killbill-memoizeit
entitlement: fetch accountBCD once when building the EventsStream Signed-off-by: …
4/19/2018 5:57:34 AM
Changes
entitlement/src/main/java/org/killbill/billing/entitlement/dao/OptimizedProxyBlockingStateDao.java 3(+3 -0)
entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java 9(+6 -3)
Details
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
index 91ddb72..f05669d 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
@@ -158,14 +158,6 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements
return iterator.next();
}
- private EntitlementSpecifier getFirstEntitlementSpecifier(final BaseEntitlementWithAddOnsSpecifier entitlementWithAddOnsSpecifier) throws SubscriptionBaseApiException {
- if (entitlementWithAddOnsSpecifier.getEntitlementSpecifier() == null || !entitlementWithAddOnsSpecifier.getEntitlementSpecifier().iterator().hasNext()) {
- throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_INVALID_ENTITLEMENT_SPECIFIER);
- } else {
- return entitlementWithAddOnsSpecifier.getEntitlementSpecifier().iterator().next();
- }
- }
-
@Override
public List<UUID> createBaseEntitlementsWithAddOns(final UUID accountId, final Iterable<BaseEntitlementWithAddOnsSpecifier> originalBaseEntitlementWithAddOnsSpecifiers, final boolean renameCancelledBundleIfExist, final Iterable<PluginProperty> properties, final CallContext callContext) throws EntitlementApiException {
logCreateEntitlementsWithAOs(log, originalBaseEntitlementWithAddOnsSpecifiers);
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/dao/OptimizedProxyBlockingStateDao.java b/entitlement/src/main/java/org/killbill/billing/entitlement/dao/OptimizedProxyBlockingStateDao.java
index 7df7117..9e9ba63 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/dao/OptimizedProxyBlockingStateDao.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/dao/OptimizedProxyBlockingStateDao.java
@@ -69,6 +69,7 @@ public class OptimizedProxyBlockingStateDao extends ProxyBlockingStateDao {
* @param baseSubscription base subscription (ProductCategory.BASE) associated with that bundle
* @param subscription subscription for which to build blocking states
* @param allSubscriptionsForBundle all subscriptions associated with that bundle
+ * @param accountBCD account BCD
* @param catalog full Catalog
* @param context call context
* @return blocking states for that subscription
@@ -81,6 +82,7 @@ public class OptimizedProxyBlockingStateDao extends ProxyBlockingStateDao {
@Nullable final SubscriptionBase baseSubscription,
final SubscriptionBase subscription,
final Collection<SubscriptionBase> allSubscriptionsForBundle,
+ final int accountBCD,
final Catalog catalog,
final InternalTenantContext context) throws EntitlementApiException {
// blockable id points to a subscription, but make sure it's an add-on
@@ -95,6 +97,7 @@ public class OptimizedProxyBlockingStateDao extends ProxyBlockingStateDao {
bundle,
baseSubscription,
allSubscriptionsForBundle,
+ accountBCD,
catalog,
context));
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java b/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
index 667b114..5ff2339 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
@@ -85,9 +85,12 @@ public class DefaultEventsStream implements EventsStream {
private BlockingState entitlementCancelEvent;
private EntitlementState entitlementState;
- public DefaultEventsStream(final ImmutableAccountData account, final SubscriptionBaseBundle bundle,
- final Collection<BlockingState> blockingStates, final BlockingChecker blockingChecker,
- @Nullable final SubscriptionBase baseSubscription, final SubscriptionBase subscription,
+ public DefaultEventsStream(final ImmutableAccountData account,
+ final SubscriptionBaseBundle bundle,
+ final Collection<BlockingState> blockingStates,
+ final BlockingChecker blockingChecker,
+ @Nullable final SubscriptionBase baseSubscription,
+ final SubscriptionBase subscription,
final Collection<SubscriptionBase> allSubscriptionsForBundle,
final int defaultBillCycleDayLocal,
final InternalTenantContext contextWithValidAccountRecordId, final DateTime utcNow) {
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/EventsStreamBuilder.java b/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/EventsStreamBuilder.java
index 63281e8..637ad39 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/EventsStreamBuilder.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/EventsStreamBuilder.java
@@ -149,8 +149,10 @@ public class EventsStreamBuilder {
public AccountEventsStreams buildForAccount(final Map<UUID, List<SubscriptionBase>> subscriptions, final Catalog catalog, final InternalTenantContext internalTenantContext) throws EntitlementApiException {
// Retrieve the account
final ImmutableAccountData account;
+ final int accountBCD;
try {
account = accountInternalApi.getImmutableAccountDataByRecordId(internalTenantContext.getAccountRecordId(), internalTenantContext);
+ accountBCD = accountInternalApi.getBCD(account.getId(), internalTenantContext);
} catch (final AccountApiException e) {
throw new EntitlementApiException(e);
}
@@ -227,6 +229,7 @@ public class EventsStreamBuilder {
baseSubscription,
subscription,
allSubscriptionsForBundle,
+ accountBCD,
catalog,
internalTenantContext);
@@ -244,6 +247,7 @@ public class EventsStreamBuilder {
subscription,
allSubscriptionsForBundle,
blockingStates,
+ accountBCD,
bcdCache,
catalog,
internalTenantContext);
@@ -269,7 +273,25 @@ public class EventsStreamBuilder {
return buildForEntitlement(bundle, subscription, subscriptionsForBundle, internalTenantContext);
}
- public EventsStream buildForEntitlement(final SubscriptionBaseBundle bundle, final SubscriptionBase subscription, final Collection<SubscriptionBase> allSubscriptionsForBundle, final InternalTenantContext internalTenantContext) throws EntitlementApiException {
+ public EventsStream buildForEntitlement(final SubscriptionBaseBundle bundle,
+ final SubscriptionBase subscription,
+ final Collection<SubscriptionBase> allSubscriptionsForBundle,
+ final InternalTenantContext internalTenantContext) throws EntitlementApiException {
+ final int accountBCD;
+ try {
+ accountBCD = accountInternalApi.getBCD(bundle.getAccountId(), internalTenantContext);
+ } catch (final AccountApiException e) {
+ throw new EntitlementApiException(e);
+ }
+
+ return buildForEntitlement(bundle, subscription, allSubscriptionsForBundle, accountBCD, internalTenantContext);
+ }
+
+ public EventsStream buildForEntitlement(final SubscriptionBaseBundle bundle,
+ final SubscriptionBase subscription,
+ final Collection<SubscriptionBase> allSubscriptionsForBundle,
+ final int accountBCD,
+ final InternalTenantContext internalTenantContext) throws EntitlementApiException {
final SubscriptionBase baseSubscription = findBaseSubscription(allSubscriptionsForBundle);
final ImmutableAccountData account;
@@ -285,7 +307,7 @@ public class EventsStreamBuilder {
final List<BlockingState> blockingStatesForAccount = defaultBlockingStateDao.getBlockingAllForAccountRecordId(catalog, internalTenantContext);
final Map<UUID, Integer> bcdCache = new HashMap<UUID, Integer>();
- return buildForEntitlement(blockingStatesForAccount, account, bundle, baseSubscription, subscription, allSubscriptionsForBundle, bcdCache, catalog, internalTenantContext);
+ return buildForEntitlement(blockingStatesForAccount, account, bundle, baseSubscription, subscription, allSubscriptionsForBundle, accountBCD, bcdCache, catalog, internalTenantContext);
}
// Special signature for OptimizedProxyBlockingStateDao to save some DAO calls
@@ -294,10 +316,11 @@ public class EventsStreamBuilder {
final SubscriptionBaseBundle bundle,
final SubscriptionBase baseSubscription,
final Collection<SubscriptionBase> allSubscriptionsForBundle,
+ final int accountBCD,
final Catalog catalog,
final InternalTenantContext internalTenantContext) throws EntitlementApiException {
final Map<UUID, Integer> bcdCache = new HashMap<UUID, Integer>();
- return buildForEntitlement(blockingStatesForAccount, account, bundle, baseSubscription, baseSubscription, allSubscriptionsForBundle, bcdCache, catalog, internalTenantContext);
+ return buildForEntitlement(blockingStatesForAccount, account, bundle, baseSubscription, baseSubscription, allSubscriptionsForBundle, accountBCD, bcdCache, catalog, internalTenantContext);
}
private EventsStream buildForEntitlement(final Collection<BlockingState> blockingStatesForAccount,
@@ -306,6 +329,7 @@ public class EventsStreamBuilder {
@Nullable final SubscriptionBase baseSubscription,
final SubscriptionBase subscription,
final Collection<SubscriptionBase> allSubscriptionsForBundle,
+ final int accountBCD,
final Map<UUID, Integer> bcdCache,
final Catalog catalog,
final InternalTenantContext internalTenantContext) throws EntitlementApiException {
@@ -350,6 +374,7 @@ public class EventsStreamBuilder {
baseSubscription,
subscription,
allSubscriptionsForBundle,
+ accountBCD,
catalog,
internalTenantContext);
}
@@ -360,7 +385,7 @@ public class EventsStreamBuilder {
blockingStateSet.addAll(subscriptionBlockingStates);
final List<BlockingState> blockingStates = ProxyBlockingStateDao.sortedCopy(blockingStateSet);
- return buildForEntitlement(account, bundle, baseSubscription, subscription, allSubscriptionsForBundle, blockingStates, bcdCache, catalog, internalTenantContext);
+ return buildForEntitlement(account, bundle, baseSubscription, subscription, allSubscriptionsForBundle, blockingStates, accountBCD, bcdCache, catalog, internalTenantContext);
}
private EventsStream buildForEntitlement(final ImmutableAccountData account,
@@ -369,12 +394,12 @@ public class EventsStreamBuilder {
final SubscriptionBase subscription,
final Collection<SubscriptionBase> allSubscriptionsForBundle,
final Collection<BlockingState> blockingStates,
+ final int accountBCD,
final Map<UUID, Integer> bcdCache,
final Catalog catalog,
final InternalTenantContext internalTenantContext) throws EntitlementApiException {
try {
- final int accountBCD = accountInternalApi.getBCD(account.getId(), internalTenantContext);
final int defaultAlignmentDay = subscriptionInternalApi.getDefaultBillCycleDayLocal(bcdCache,
subscription,
baseSubscription,
@@ -394,8 +419,6 @@ public class EventsStreamBuilder {
clock.getUTCNow());
} catch (final SubscriptionBaseApiException e) {
throw new EntitlementApiException(e);
- } catch (final AccountApiException e) {
- throw new EntitlementApiException(e);
}
}
diff --git a/entitlement/src/test/java/org/killbill/billing/entitlement/dao/TestBlockingDao.java b/entitlement/src/test/java/org/killbill/billing/entitlement/dao/TestBlockingDao.java
index 0e1b822..610f4b1 100644
--- a/entitlement/src/test/java/org/killbill/billing/entitlement/dao/TestBlockingDao.java
+++ b/entitlement/src/test/java/org/killbill/billing/entitlement/dao/TestBlockingDao.java
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.UUID;
import org.joda.time.LocalDate;
+import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.api.TestApiListener.NextEvent;
import org.killbill.billing.entitlement.EntitlementTestSuiteWithEmbeddedDB;
import org.killbill.billing.entitlement.api.BlockingState;
@@ -36,8 +37,8 @@ import com.google.common.collect.ImmutableMap;
public class TestBlockingDao extends EntitlementTestSuiteWithEmbeddedDB {
@Test(groups = "slow", description = "Check BlockingStateDao with a single service")
- public void testDaoWithOneService() {
- final UUID uuid = UUID.randomUUID();
+ public void testDaoWithOneService() throws AccountApiException {
+ final UUID uuid = createAccount(getAccountData(1)).getId();
final String overdueStateName = "WayPassedItMan";
final String service = "TEST";
@@ -71,7 +72,7 @@ public class TestBlockingDao extends EntitlementTestSuiteWithEmbeddedDB {
@Test(groups = "slow", description = "Check BlockingStateDao with multiple services")
public void testDaoWithMultipleServices() throws Exception {
- final UUID uuid = UUID.randomUUID();
+ final UUID uuid = createAccount(getAccountData(1)).getId();
final String overdueStateName = "WayPassedItMan";
final String service1 = "TEST";