[ 
https://issues.apache.org/jira/browse/NIFI-6395?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Iván Ezequiel Rodriguez updated NIFI-6395:
------------------------------------------
    Description: 
The processor counters fail to execute multiple threads. The programming is not 
safe since they are not atomic operations. They are using a volatile instance 
variable accessed by multiple threads when onTrigger is called. The solution is 
to declare those local variables to onTrigger. Perform several tests with 
millions of records and the counter does not work correctly when it is executed 
with more than one task.

The problem is in the declaration of these instance variables:

private *volatile int* lineCount;
private *volatile int* lineNonEmptyCount;
private *volatile int* wordCount;
private *volatile int* characterCount;

This is not safe to perform atomic operations on these variables. As a result 
the counters register less amount of lines when executed with multiple threads.

[FIX|https://github.com/apache/nifi/pull/3549/commits/86c6ef7ce84089055f26aca68ea996c6735f7c0a]


  was:
The processor counters fail to execute multiple threads. The programming is not 
safe since they are not atomic operations. They are using a volatile instance 
variable accessed by multiple threads when onTrigger is called. The solution is 
to declare those local variables to onTrigger. Perform several tests with 
millions of records and the counter does not work correctly when it is executed 
with more than one task.

The problem is in the declaration of these instance variables:

private *volatile int* lineCount;
private *volatile int* lineNonEmptyCount;
private *volatile int* wordCount;
private *volatile int* characterCount;

This is not safe to perform atomic operations on these variables. As a result 
the counters register less amount of lines when executed with multiple threads.

FIX:

[FIX|https://github.com/apache/nifi/pull/3549/commits/86c6ef7ce84089055f26aca68ea996c6735f7c0a]



> CountText processor is not thread safe - concurrency error
> ----------------------------------------------------------
>
>                 Key: NIFI-6395
>                 URL: https://issues.apache.org/jira/browse/NIFI-6395
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Extensions
>    Affects Versions: 1.9.2
>         Environment: software platform
>            Reporter: Iván Ezequiel Rodriguez
>            Priority: Major
>              Labels: concurrency, count, error, processor, text, thread-safe
>
> The processor counters fail to execute multiple threads. The programming is 
> not safe since they are not atomic operations. They are using a volatile 
> instance variable accessed by multiple threads when onTrigger is called. The 
> solution is to declare those local variables to onTrigger. Perform several 
> tests with millions of records and the counter does not work correctly when 
> it is executed with more than one task.
> The problem is in the declaration of these instance variables:
> private *volatile int* lineCount;
> private *volatile int* lineNonEmptyCount;
> private *volatile int* wordCount;
> private *volatile int* characterCount;
> This is not safe to perform atomic operations on these variables. As a result 
> the counters register less amount of lines when executed with multiple 
> threads.
> [FIX|https://github.com/apache/nifi/pull/3549/commits/86c6ef7ce84089055f26aca68ea996c6735f7c0a]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to