You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@fineract.apache.org by "Mohit Sinha (JIRA)" <ji...@apache.org> on 2019/07/09 07:53:00 UTC

[jira] [Updated] (FINERACT-759) Possible thread unsafe bug for batch processing

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

Mohit Sinha updated FINERACT-759:
---------------------------------
    Affects Version/s: 1.4.0

> Possible thread unsafe bug for batch processing
> -----------------------------------------------
>
>                 Key: FINERACT-759
>                 URL: https://issues.apache.org/jira/browse/FINERACT-759
>             Project: Apache Fineract
>          Issue Type: Bug
>    Affects Versions: 1.4.0
>            Reporter: Mohit Sinha
>            Assignee: Mohit Sinha
>            Priority: Critical
>             Fix For: 1.4.0
>
>
> I have noticed some errors while doing batch processing in Mifos.
>   
>  !https://mail.google.com/mail/u/0?ui=2&ik=1a1c6fef1c&attid=0.1&permmsgid=msg-a:r-170619917994284201&th=16afe11c353a555b&view=fimg&sz=s0-l75-ft&attbid=ANGjdJ9p_KNZRnGZYdfbuosB_WlTfMEykfXgJGyi1TLe-OeGixMWmUITIPJQgNsQNC9oHaLkTi-bS1S7TPq-ogo39qUYdie-_bMiWAHXhB2ewuIgRzmoR_ga1abS6rA&disp=emb&realattid=ii_jw7o4odi1|width=1354,height=319!
>  I found out some reasons for this on this link [https://stackoverflow.com/questions/53470042/java-util-concurrentmodificationexception-bug-when-performing-io-operations]
>   
>  Hence, the object might change when it is in the middle of Gson serialization.
>   
>  After further studying the codebase, I found out some possible thread related bugs in *BatchApiServiceImpl.java.* 
>  It is a singleton with a variable that stores the state for a request. 
> {code:java}
> private List<BatchResponse> checkList = new ArrayList<>();  {code}
>  
>  On line number 125,
> {code:java}
> checkList = responseList;
> return responseList;  {code}
> This line may cause the error.
>   
>  There are some possible fixes for this:
>  # I can remove *BatchApiServiceImpl.java* from the Spring Context and create a new object for every request. This will handle the possible thread related bugs.
>  # In *BatchApiResource.java* line 119 
> {code:java}
> if (enclosingTransaction) {
>  result = service.handleBatchRequestsWithEnclosingTransaction(requestList, uriInfo);
> } else {
>  result = service.handleBatchRequestsWithoutEnclosingTransaction(requestList, uriInfo);
> }
> return this.toApiJsonSerializer.serialize(result);{code}
> I can clone the *result* array and then pass it for serialization. This will remove the error, but won't solve possible thread related bugs.
>  # I can modify *checkList* logic and possibly remove it from *BatchApiServiceImpl.java* . 
>  
>  I will need your suggestions and opinions on this.
>   
>   



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