Details
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueIntegration.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueIntegration.java
index 7dd3961..af2fc28 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueIntegration.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueIntegration.java
@@ -29,6 +29,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.killbill.billing.ErrorCode;
+import org.killbill.billing.api.FlakyRetryAnalyzer;
import org.killbill.billing.api.TestApiListener.NextEvent;
import org.killbill.billing.beatrix.integration.BeatrixIntegrationModule;
import org.killbill.billing.beatrix.util.InvoiceChecker.ExpectedInvoiceItemCheck;
@@ -1025,7 +1026,8 @@ public class TestOverdueIntegration extends TestOverdueBase {
checkODState(OverdueWrapper.CLEAR_STATE_NAME);
}
- @Test(groups = "slow", description = "Test overdue state with total unpaid invoice balance condition")
+ // Flaky, see https://github.com/killbill/killbill/issues/782
+ @Test(groups = "slow", description = "Test overdue state with total unpaid invoice balance condition", retryAnalyzer = FlakyRetryAnalyzer.class)
public void testOverdueStateWithTotalUnpaidInvoiceBalanceCondition() throws Exception {
// 2012-05-01T00:03:42.000Z
clock.setTime(new DateTime(2012, 5, 1, 0, 3, 42, 0));
diff --git a/util/src/main/java/org/killbill/billing/util/glue/CacheProviderBase.java b/util/src/main/java/org/killbill/billing/util/glue/CacheProviderBase.java
index 24f2dbf..222dc7f 100644
--- a/util/src/main/java/org/killbill/billing/util/glue/CacheProviderBase.java
+++ b/util/src/main/java/org/killbill/billing/util/glue/CacheProviderBase.java
@@ -32,6 +32,7 @@ import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.jcache.JCacheGaugeSet;
+import com.google.common.base.Preconditions;
abstract class CacheProviderBase {
@@ -61,6 +62,7 @@ abstract class CacheProviderBase {
final MutableConfiguration<K, V> configuration = new MutableConfiguration<K, V>().setTypes(keyType, valueType)
.setStoreByValue(false); // Store by reference to avoid copying large objects (e.g. catalog)
final Cache<K, V> cache = cacheManager.createCache(cacheName, configuration);
+ Preconditions.checkState(!cache.isClosed(), "Cache '%s' should not be closed", cacheName);
// Re-create the metrics to support dynamically created caches (e.g. for Shiro)
metricRegistry.removeMatching(new MetricFilter() {
diff --git a/util/src/main/java/org/killbill/billing/util/glue/Eh107CacheManagerProvider.java b/util/src/main/java/org/killbill/billing/util/glue/Eh107CacheManagerProvider.java
index 95677b2..d5de5cc 100644
--- a/util/src/main/java/org/killbill/billing/util/glue/Eh107CacheManagerProvider.java
+++ b/util/src/main/java/org/killbill/billing/util/glue/Eh107CacheManagerProvider.java
@@ -39,6 +39,7 @@ import com.codahale.metrics.MetricRegistry;
public class Eh107CacheManagerProvider extends CacheProviderBase implements Provider<CacheManager> {
private static final Logger logger = LoggerFactory.getLogger(Eh107CacheManagerProvider.class);
+ private static final EhcacheLoggingListener ehcacheLoggingListener = new EhcacheLoggingListener();
private final Set<BaseCacheLoader> cacheLoaders;
@@ -66,7 +67,9 @@ public class Eh107CacheManagerProvider extends CacheProviderBase implements Prov
cacheManager = cachingProvider.getCacheManager();
}
- cacheManager.unwrap(InternalCacheManager.class).registerListener(new EhcacheLoggingListener());
+ // Make sure we start from a clean state - this is mainly useful for tests
+ cacheManager.unwrap(InternalCacheManager.class).deregisterListener(ehcacheLoggingListener);
+ cacheManager.unwrap(InternalCacheManager.class).registerListener(ehcacheLoggingListener);
for (final BaseCacheLoader<?, ?> cacheLoader : cacheLoaders) {
createCache(cacheManager,