Hey Karan,
We are seeing that for a large number of recurring payments we get the exception on line 170 because plugin properties is empty. We have a test case where we had 140 recurring payments happening after advancing the clock and we saw this exception happened in 2 out 140 subscriptions. We tried debugging and turns out pluginProperties is empty. The fact that it doesnt always happen might indicate its a race condition as described on issue 1559.
We are using killbill v0.22.29
Exception stacktrace:
Error during onSuccessCall for plugin='__INVOICE_PAYMENT_CONTROL_PLUGIN__', paymentExternalKey='000000-e28f-49f1-ad39-48280a22f63c'#012org.killbill.billing.control.plugin.api.PaymentControlApiException: Failed to retrieve invoiceId: #012#011at org.killbill.billing.payment.invoice.InvoicePaymentControlPluginApi.getInvoiceId(InvoicePaymentControlPluginApi.java:319)#012#011at org.killbill.billing.payment.invoice.InvoicePaymentControlPluginApi.onSuccessCall(InvoicePaymentControlPluginApi.java:170)#012#011at org.killbill.billing.payment.core.sm.control.ControlPluginRunner.executePluginOnSuccessCalls(ControlPluginRunner.java:203)#012#011at org.killbill.billing.payment.core.sm.control.OperationControlCallback.executePluginOnSuccessCalls(OperationControlCallback.java:208)#012#011at org.killbill.billing.payment.core.sm.control.CompletionControlOperation$1.doOperation(CompletionControlOperation.java:105)#012#011at org.killbill.billing.payment.core.sm.control.CompletionControlOperation$1.doOperation(CompletionControlOperation.java:74)#012#011at org.killbill.billing.payment.core.ProcessorBase$WithAccountLock.processAccountWithLock(ProcessorBase.java:179)#012#011at org.killbill.billing.payment.core.ProcessorBase$CallableWithAccountLock.call(ProcessorBase.java:162)#012#011at org.killbill.billing.payment.core.ProcessorBase$CallableWithAccountLock.call(ProcessorBase.java:143)#012#011at org.killbill.billing.payment.dispatcher.CallableWithRequestData.call(CallableWithRequestData.java:69)#012#011at org.killbill.commons.concurrent.WrappedCallable.call(WrappedCallable.java:45)#012#011at java.util.concurrent.FutureTask.run(FutureTask.java:266)#012#011at org.killbill.commons.concurrent.WrappedRunnable.run(WrappedRunnable.java:49)#012#011at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)#012#011at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)#012#011at java.lang.Thread.run(Thread.java:750)#012Caused by: org.killbill.billing.payment.api.PaymentApiException: Plugin exception Need to specify a valid invoiceId in property IPCD_INVOICE_ID#012#011