diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java
index 5f85d6b..3174f6d 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java
@@ -65,12 +65,14 @@ import static com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils
public class BusinessInvoiceFactory extends BusinessFactoryBase {
+ private static final int NB_THREADS = 20;
+
private final Executor executor;
public BusinessInvoiceFactory(final OSGIKillbillLogService logService,
final OSGIKillbillAPI osgiKillbillAPI) {
super(logService, osgiKillbillAPI);
- executor = Executors.newFixedThreadPool(20);
+ executor = Executors.newFixedThreadPool(NB_THREADS);
}
/**
@@ -102,6 +104,7 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
}
// Create the business invoice items
+ // We build them in parallel as invoice items are directly proportional to subscriptions (@see BusinessSubscriptionTransitionFactory)
final CompletionService<BusinessInvoiceItemBaseModelDao> completionService = new ExecutorCompletionService<BusinessInvoiceItemBaseModelDao>(executor);
final Multimap<UUID, BusinessInvoiceItemBaseModelDao> businessInvoiceItemsForInvoiceId = ArrayListMultimap.<UUID, BusinessInvoiceItemBaseModelDao>create();
for (final InvoiceItem invoiceItem : allInvoiceItems.values()) {
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessSubscriptionTransitionFactory.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessSubscriptionTransitionFactory.java
index 5573bbd..dfc2750 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessSubscriptionTransitionFactory.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessSubscriptionTransitionFactory.java
@@ -46,19 +46,22 @@ import com.ning.killbill.osgi.libs.killbill.OSGIKillbillLogService;
public class BusinessSubscriptionTransitionFactory extends BusinessFactoryBase {
+ private static final int NB_THREADS = 20;
+
private final Executor executor;
public BusinessSubscriptionTransitionFactory(final OSGIKillbillLogService logService,
final OSGIKillbillAPI osgiKillbillAPI) {
super(logService, osgiKillbillAPI);
- executor = Executors.newFixedThreadPool(20);
+ executor = Executors.newFixedThreadPool(NB_THREADS);
}
public Collection<BusinessSubscriptionTransitionModelDao> createBusinessSubscriptionTransitions(final UUID accountId,
final Long accountRecordId,
final Long tenantRecordId,
final CallContext context) throws AnalyticsRefreshException {
- // We build bsts for each subscription in parallel - we don't care about the overall ordering but we do care about ordering for
+ // We build bsts for each subscription in parallel as large accounts may have 50,000+ bundles
+ // We don't care about the overall ordering but we do care about ordering for
// a given subscription (we'd like the generated record ids to be sequential).
final CompletionService<Collection<BusinessSubscriptionTransitionModelDao>> completionService = new ExecutorCompletionService<Collection<BusinessSubscriptionTransitionModelDao>>(executor);