[
https://issues.apache.org/jira/browse/NIFI-16311?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Joe Witt updated NIFI-16311:
----------------------------
Status: Patch Available (was: Open)
> ParseSyslog initializes SyslogParser unsafely under concurrent tasks
> --------------------------------------------------------------------
>
> Key: NIFI-16311
> URL: https://issues.apache.org/jira/browse/NIFI-16311
> Project: Apache NiFi
> Issue Type: Bug
> Components: Extensions
> Reporter: Joe Witt
> Assignee: Joe Witt
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> ParseSyslog keeps a SyslogParser in a non-volatile instance field and lazily
> constructs it inside onTrigger:
> if (parser == null || !parser.getCharsetName().equals(charsetName)) {
> parser = new SyslogParser(Charset.forName(charsetName));
> }
> NiFi uses a single processor instance for all concurrent tasks, so this is an
> unsynchronized check-then-act. A second thread can observe a non-null parser
> whose charset has not been published, or two threads can replace the field
> while parseEvent is running.
> The Character Set property does not support Expression Language, so its value
> cannot change between triggers. The per-trigger re-init is unnecessary.
> ParseSyslog5424 already does this correctly: it builds the parser in
> @OnScheduled and stores it in a volatile field.
> This ticket is only that lifecycle/concurrency fix. It does not change
> parsing, relationships, or how FlowFile content is read.
> Expected:
> - SyslogParser is created once when the processor is scheduled
> - Concurrent tasks share a safely published, immutable-for-the-run parser
> - Existing RFC3164/RFC5424 parse tests still pass
> - A TestRunner test with concurrent tasks succeeds
> Actual:
> - Parser construction races in onTrigger when Concurrent Tasks > 1
--
This message was sent by Atlassian Jira
(v8.20.10#820010)