Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

junction: rewrite BlockingCalculator to be more efficient #1451

Merged
merged 2 commits into from Jul 8, 2021

Conversation

pierre
Copy link
Member

@pierre pierre commented Jul 8, 2021

Stacktraces from the load test:

catalina-exec-3" #107 daemon prio=5 os_prio=0 tid=0x00007fc6686b5000 nid=0x401 runnable [0x00007fc5192e8000]
   java.lang.Thread.State: RUNNABLE
	at com.google.common.collect.Iterators$5.computeNext(Iterators.java:637)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:141)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:136)
	at com.google.common.collect.Iterators$ConcatenatedIterator.hasNext(Iterators.java:1324)
	at com.google.common.collect.Iterators$5.computeNext(Iterators.java:635)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:141)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:136)
	at com.google.common.collect.Iterators.addAll(Iterators.java:355)
	at com.google.common.collect.Lists.newArrayList(Lists.java:143)
	at com.google.common.collect.Lists.newArrayList(Lists.java:130)
	at org.killbill.billing.junction.plumbing.billing.BlockingCalculator.getAggregateBlockingEventsPerSubscription(BlockingCalculator.java:148)
	at org.killbill.billing.junction.plumbing.billing.BlockingCalculator.insertBlockingEvents(BlockingCalculator.java:115)
	at org.killbill.billing.junction.plumbing.billing.DefaultInternalBillingApi.getBillingEventsForAccountAndUpdateAccountBCD(DefaultInternalBillingApi.java:129)
	at org.killbill.billing.invoice.InvoiceDispatcher.processAccountWithLock(InvoiceDispatcher.java:350)
	at org.killbill.billing.invoice.InvoiceDispatcher.processAccount(InvoiceDispatcher.java:316)
	at org.killbill.billing.invoice.api.user.DefaultInvoiceUserApi.triggerDryRunInvoiceGeneration(DefaultInvoiceUserApi.java:272)
catalina-exec-3" #107 daemon prio=5 os_prio=0 tid=0x00007fc6686b5000 nid=0x401 runnable [0x00007fc5192e8000]
   java.lang.Thread.State: RUNNABLE
	at java.util.TreeMap.keyIterator(TreeMap.java:1110)
	at java.util.TreeMap$KeySet.iterator(TreeMap.java:1123)
	at java.util.TreeSet.iterator(TreeSet.java:181)
	at org.killbill.billing.junction.plumbing.billing.BlockingCalculator.filter(BlockingCalculator.java:233)
	at org.killbill.billing.junction.plumbing.billing.BlockingCalculator.insertBlockingEvents(BlockingCalculator.java:118)
	at org.killbill.billing.junction.plumbing.billing.DefaultInternalBillingApi.getBillingEventsForAccountAndUpdateAccountBCD(DefaultInternalBillingApi.java:129)
	at org.killbill.billing.invoice.InvoiceDispatcher.processAccountWithLock(InvoiceDispatcher.java:350)
	at org.killbill.billing.invoice.InvoiceDispatcher.processAccount(InvoiceDispatcher.java:316)
	at org.killbill.billing.invoice.api.user.DefaultInvoiceUserApi.triggerDryRunInvoiceGeneration(DefaultInvoiceUserApi.java:272)
catalina-exec-3" #107 daemon prio=5 os_prio=0 tid=0x00007fc6686b5000 nid=0x401 runnable [0x00007fc5192e8000]
   java.lang.Thread.State: RUNNABLE
	at java.util.HashMap.resize(HashMap.java:704)
	at java.util.HashMap.putVal(HashMap.java:629)
	at java.util.HashMap.put(HashMap.java:612)
	at org.killbill.billing.junction.plumbing.billing.BlockingCalculator.createBlockingDurations(BlockingCalculator.java:324)
	at org.killbill.billing.junction.plumbing.billing.BlockingCalculator.insertBlockingEvents(BlockingCalculator.java:116)
	at org.killbill.billing.junction.plumbing.billing.DefaultInternalBillingApi.getBillingEventsForAccountAndUpdateAccountBCD(DefaultInternalBillingApi.java:129)
	at org.killbill.billing.invoice.InvoiceDispatcher.processAccountWithLock(InvoiceDispatcher.java:350)
	at org.killbill.billing.invoice.InvoiceDispatcher.processAccount(InvoiceDispatcher.java:316)
	at org.killbill.billing.invoice.api.user.DefaultInvoiceUserApi.triggerDryRunInvoiceGeneration(DefaultInvoiceUserApi.java:272)

Signed-off-by: Pierre-Alexandre Meyer <pierre@mouraf.org>
@pierre pierre requested a review from sbrossie July 8, 2021 10:35
Signed-off-by: Pierre-Alexandre Meyer <pierre@mouraf.org>
@sbrossie sbrossie merged commit 58a89e7 into master Jul 8, 2021
@pierre pierre deleted the junction-optimization branch July 29, 2021 07:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants