public void init() { try { objectQueue = new ArrayBlockingQueue<>(SPOOLER_QUEUE_SIZE); spoolQueueMeter = context.createMeter("spoolQueue"); pathMatcher = new AntPathMatcher(s3ConfigBean.s3Config.delimiter); } catch (Exception ex) { throw new RuntimeException(ex); } }
private void handleException(Source.Context context, String messageId, Exception ex) throws StageException { switch (context.getOnErrorRecord()) { case DISCARD: break; case TO_ERROR: context.reportError(ParserErrors.PARSER_03, messageId, ex.toString(), ex); break; case STOP_PIPELINE: if (ex instanceof StageException) { throw (StageException) ex; } else { throw new StageException(ParserErrors.PARSER_03, messageId, ex.toString(), ex); } default: throw new IllegalStateException( Utils.format("Unknown on error value '{}'", context.getOnErrorRecord(), ex)); } }
public List<Stage.ConfigIssue> init(Source.Context context) { List<Stage.ConfigIssue> issues = new ArrayList<>(); switch (dataFormat) { case JSON: if (dataFormatConfig.jsonMaxObjectLen < 1) { issues.add( context.createConfigIssue( DataFormat.JSON.name(), "dataFormatConfig.maxJsonObjectLen", ParserErrors.PARSER_04)); } break; case TEXT: if (dataFormatConfig.textMaxLineLen < 1) { issues.add( context.createConfigIssue( DataFormat.TEXT.name(), "dataFormatConfig.maxLogLineLength", ParserErrors.PARSER_04)); } break; case DELIMITED: if (dataFormatConfig.csvMaxObjectLen < 1) { issues.add( context.createConfigIssue( DataFormat.DELIMITED.name(), "dataFormatConfig.csvMaxObjectLen", ParserErrors.PARSER_04)); } break; case XML: if (messageConfig != null && messageConfig.produceSingleRecordPerMessage) { issues.add( context.createConfigIssue( parentName, "messageConfig.produceSingleRecordPerMessage", ParserErrors.PARSER_06)); } if (dataFormatConfig.xmlMaxObjectLen < 1) { issues.add( context.createConfigIssue( DataFormat.XML.name(), "dataFormatConfig.maxXmlObjectLen", ParserErrors.PARSER_04)); } if (dataFormatConfig.xmlRecordElement != null && !dataFormatConfig.xmlRecordElement.isEmpty() && !XMLChar.isValidName(dataFormatConfig.xmlRecordElement)) { issues.add( context.createConfigIssue( DataFormat.XML.name(), "dataFormatConfig.xmlRecordElement", ParserErrors.PARSER_02, dataFormatConfig.xmlRecordElement)); } break; case SDC_JSON: break; case LOG: logDataFormatValidator = new LogDataFormatValidator( dataFormatConfig.logMode, dataFormatConfig.logMaxObjectLen, dataFormatConfig.retainOriginalLine, dataFormatConfig.customLogFormat, dataFormatConfig.regex, dataFormatConfig.grokPatternDefinition, dataFormatConfig.grokPattern, dataFormatConfig.enableLog4jCustomLogFormat, dataFormatConfig.log4jCustomLogFormat, dataFormatConfig.onParseError, dataFormatConfig.maxStackTraceLines, DataFormat.LOG.name(), getFieldPathToGroupMap(dataFormatConfig.fieldPathsToGroupName)); logDataFormatValidator.validateLogFormatConfig(issues, context); break; case AVRO: if (!dataFormatConfig.schemaInMessage && (dataFormatConfig.avroSchema == null || dataFormatConfig.avroSchema.isEmpty())) { issues.add( context.createConfigIssue( DataFormat.AVRO.name(), "dataFormatConfig.avroSchema", ParserErrors.PARSER_07, dataFormatConfig.avroSchema)); } break; default: issues.add( context.createConfigIssue( parentName, "dataFormat", ParserErrors.PARSER_05, dataFormat)); } DataParserFactoryBuilder builder = new DataParserFactoryBuilder(context, dataFormat.getParserFormat()) .setCharset(Charset.defaultCharset()); if (dataFormatConfig.charset == null) { messageCharset = StandardCharsets.UTF_8; } else { try { messageCharset = Charset.forName(dataFormatConfig.charset); } catch (UnsupportedCharsetException ex) { // setting it to a valid one so the parser factory can be configured and tested for more // errors messageCharset = StandardCharsets.UTF_8; issues.add( context.createConfigIssue( parentName, "charset", ParserErrors.PARSER_01, dataFormatConfig.charset)); } } builder.setCharset(messageCharset).setRemoveCtrlChars(dataFormatConfig.removeCtrlChars); switch (dataFormat) { case TEXT: builder.setMaxDataLen(dataFormatConfig.textMaxLineLen); break; case JSON: builder.setMode(dataFormatConfig.jsonContent); builder.setMaxDataLen(dataFormatConfig.jsonMaxObjectLen); break; case DELIMITED: builder .setMaxDataLen(dataFormatConfig.csvMaxObjectLen) .setMode(dataFormatConfig.csvFileFormat) .setMode(dataFormatConfig.csvHeader) .setMode(dataFormatConfig.csvRecordType) .setConfig( DelimitedDataParserFactory.DELIMITER_CONFIG, dataFormatConfig.csvCustomDelimiter) .setConfig(DelimitedDataParserFactory.ESCAPE_CONFIG, dataFormatConfig.csvCustomEscape) .setConfig(DelimitedDataParserFactory.QUOTE_CONFIG, dataFormatConfig.csvCustomQuote); break; case XML: builder.setMaxDataLen(dataFormatConfig.xmlMaxObjectLen); builder.setConfig( XmlDataParserFactory.RECORD_ELEMENT_KEY, dataFormatConfig.xmlRecordElement); break; case SDC_JSON: builder.setMaxDataLen(-1); break; case LOG: logDataFormatValidator.populateBuilder(builder); break; case AVRO: builder .setMaxDataLen(Integer.MAX_VALUE) .setConfig(AvroDataParserFactory.SCHEMA_KEY, dataFormatConfig.avroSchema) .setConfig( AvroDataParserFactory.SCHEMA_IN_MESSAGE_KEY, dataFormatConfig.schemaInMessage); break; default: throw new IllegalStateException("Unknown data format: " + dataFormat); } parserFactory = builder.build(); return issues; }