killbill-memoizeit

invoice: Add a fix for error reported in #1095 along with a WARN

3/5/2019 7:18:19 PM

Details

diff --git a/invoice/src/main/java/org/killbill/billing/invoice/usage/RawUsageOptimizer.java b/invoice/src/main/java/org/killbill/billing/invoice/usage/RawUsageOptimizer.java
index b33ffb3..06c591a 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/usage/RawUsageOptimizer.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/usage/RawUsageOptimizer.java
@@ -43,7 +43,6 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Ordering;
@@ -120,9 +119,11 @@ public class RawUsageOptimizer {
 
         final ListIterator<InvoiceItem> iterator = sortedUsageItems.listIterator(sortedUsageItems.size());
         while (iterator.hasPrevious()) {
-            final InvoiceItem previous = iterator.previous();
-            Preconditions.checkState(previous instanceof UsageInvoiceItem);
-            final UsageInvoiceItem item = (UsageInvoiceItem) previous;
+            final InvoiceItem item = iterator.previous();
+            if (!(item instanceof UsageInvoiceItem)) {
+                // Help to debug https://github.com/killbill/killbill/issues/1095
+                log.warn("RawUsageOptimizer : item id={}, expected to see an UsageInvoiceItem type, got {}", item.getId(), item);
+            }
             final Usage usage = knownUsage.get(item.getUsageName());
 
             if (perBillingPeriodMostRecentConsumableInArrearItemEndDate[usage.getBillingPeriod().ordinal()] == null) {