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

Adam Saghy closed FINERACT-3000.
--------------------------------
    Resolution: Duplicate

> Working Capital loan COB loses loans when two partitions run at once (worker 
> reader is not step-scoped)
> -------------------------------------------------------------------------------------------------------
>
>                 Key: FINERACT-3000
>                 URL: https://issues.apache.org/jira/browse/FINERACT-3000
>             Project: Apache Fineract
>          Issue Type: Bug
>            Reporter: Piotr Wargulak
>            Priority: Major
>             Fix For: Unknown
>
>
> {{WorkingCapitalLoanCOBWorkerConfiguration#workingCapitalLoanCOBWorkerStep}} 
> creates one {{WorkingCapitalLoanCOBWorkerItemReader}} and one 
> {{WorkingCapitalLoanCOBWorkerItemProcessor}} with {{new}} when the step bean 
> is built, so every partition of the job shares them. The reader's 
> {{remainingData}} queue is replaced in {{{}beforeStep{}}}.
> Loan COB uses {{@StepScope}} beans for the same roles 
> ({{{}LoanCOBWorkerConfiguration#cobWorkerItemReader{}}}, since 2022).
> Partitions of one job can run at the same time on one instance: the 
> {{inboundRequests}} channel is consumed by both worker steps, and the 
> {{scheduling}} pool has 4 threads. When two partitions of 
> {{WORKING_CAPITAL_LOAN_COB_JOB}} overlap, the second one's {{beforeStep}} 
> replaces the first one's queue. The first partition's loans are locked 
> ({{{}LOAN_COB_CHUNK_PROCESSING{}}}) but never read. The job ends 
> {{COMPLETED}} and the locks stay: the writer releases only the loans it 
> wrote, and the unlock step needs {{{}last_closed_business_date = 
> lock_placed_on_cob_business_date{}}}. From then on the scheduled run no 
> longer picks those loans up, and operations on them are refused.
> *Steps to reproduce* (one instance, default 
> {{{}WC_LOAN_COB_PARTITION_SIZE=100{}}})
>  # Create and disburse 100 Working Capital loans, and 2 more (102 loans, so 2 
> partitions).
>  # Move the business date one day at a time and run the Working Capital Loan 
> COB job each day.
>  # Within a few nights one run logs 
> {{workingCapitalLoanCOBWorkerStep:partition_0}} and {{partition_1}} on two 
> {{scheduling-N}} threads at once; {{partition_0}} logs {{Apply locks for [1 … 
> 100]}} and then processes loan 102.
>  # {{m_wc_loan_account_locks}} then holds 100 rows with no error, and those 
> loans' {{last_closed_business_date}} never moves again.
> In our runs (32 nights each) two partitions lost loans in 3 of 3 runs, once 
> for good (100 loans). With one partition ({{{}WC_LOAN_COB_PARTITION_SIZE{}}} 
> above the number of loans) none were lost.
> *Proposed fix:* make the WC worker reader, processor and writer 
> {{@StepScope}} beans, as Loan COB does, and have the reader implement 
> {{StepExecutionListener}} instead of using {{@BeforeStep}} (a step-scope 
> proxy hides the annotation; {{CobStepListenerRegistrationTest}} pins the 
> interface form).



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to