killbill-uncached

Merge remote-tracking branch 'origin/kares-performance'

4/20/2015 1:32:59 PM

Changes

.travis.yml 2(+1 -1)

util/src/main/java/org/killbill/billing/util/glue/MySqlGlobalLockerModule.java 34(+0 -34)

util/src/main/java/org/killbill/billing/util/glue/MySqlGlobalLockerProvider.java 39(+0 -39)

Details

.travis.yml 2(+1 -1)

diff --git a/.travis.yml b/.travis.yml
index ee54aea..95923b9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,7 +6,7 @@ sudo: false
 #  directories:
 #      - $HOME/.m2
 
-script: if [[ -v COMMAND ]]; then $COMMAND; else travis_retry mvn -q -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN -Dorg.slf4j.simpleLogger.log.org.killbill.billing.util.cache=ERROR -Dorg.slf4j.simpleLogger.log.org.killbill.billing.lifecycle=ERROR clean install $PHASE | egrep -v 'Download|Install|[ \t]*at [ \ta-zA-Z0-9\.\:\(\)]+'; [ ${PIPESTATUS[0]} == 0 ]; fi
+script: if [[ -v COMMAND ]]; then $COMMAND; else travis_retry mvn -q -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN -Dorg.slf4j.simpleLogger.log.org.killbill.billing.util.cache=ERROR -Dorg.slf4j.simpleLogger.log.org.killbill.billing.lifecycle=ERROR clean install $PHASE 2>&1 | egrep -v 'Download|Install|[ \t]*at [ \ta-zA-Z0-9\.\:\(\)]+'; [ ${PIPESTATUS[0]} == 0 ]; fi
 # Remove --quiet to avoid timeouts
 install: mvn -U install -DskipTests=true | egrep -v 'Download|Install'
 
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/glue/DefaultInvoiceModule.java b/invoice/src/main/java/org/killbill/billing/invoice/glue/DefaultInvoiceModule.java
index f790741..5929709 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/glue/DefaultInvoiceModule.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/glue/DefaultInvoiceModule.java
@@ -19,6 +19,7 @@
 package org.killbill.billing.invoice.glue;
 
 import org.killbill.billing.glue.InvoiceModule;
+import org.killbill.billing.invoice.InvoiceDispatcher;
 import org.killbill.billing.invoice.InvoiceListener;
 import org.killbill.billing.invoice.InvoiceTagHandler;
 import org.killbill.billing.invoice.api.DefaultInvoiceService;
@@ -117,6 +118,10 @@ public class DefaultInvoiceModule extends KillBillModule implements InvoiceModul
         }
     }
 
+    protected void installInvoiceDispatcher() {
+        bind(InvoiceDispatcher.class).asEagerSingleton();
+    }
+
     protected void installInvoiceListener() {
         bind(InvoiceListener.class).asEagerSingleton();
     }
@@ -141,6 +146,7 @@ public class DefaultInvoiceModule extends KillBillModule implements InvoiceModul
         installInvoiceService();
         installInvoiceNotifier();
         installNotifiers();
+        installInvoiceDispatcher();
         installInvoiceListener();
         installTagHandler();
         installInvoiceGenerator();
diff --git a/util/src/main/java/org/killbill/billing/util/glue/GlobalLockerModule.java b/util/src/main/java/org/killbill/billing/util/glue/GlobalLockerModule.java
index f8fe73d..bc1d2b9 100644
--- a/util/src/main/java/org/killbill/billing/util/glue/GlobalLockerModule.java
+++ b/util/src/main/java/org/killbill/billing/util/glue/GlobalLockerModule.java
@@ -20,6 +20,8 @@ package org.killbill.billing.util.glue;
 
 import java.io.IOException;
 
+import javax.sql.DataSource;
+
 import org.killbill.billing.platform.api.KillbillConfigSource;
 import org.killbill.commons.embeddeddb.EmbeddedDB;
 import org.killbill.commons.locker.GlobalLocker;
@@ -37,9 +39,10 @@ public class GlobalLockerModule extends KillBillModule {
 
     @Provides
     @Singleton
-    protected GlobalLocker provideGlobalLocker(final EmbeddedDB embeddedDB) throws IOException {
-        if (EmbeddedDB.DBEngine.MYSQL.equals(embeddedDB)) {
-            return new MySqlGlobalLocker(embeddedDB.getDataSource());
+    // Note: we need to inject the pooled DataSource here, not the (direct) one from EmbeddedDB
+    protected GlobalLocker provideGlobalLocker(final DataSource dataSource, final EmbeddedDB embeddedDB) throws IOException {
+        if (EmbeddedDB.DBEngine.MYSQL.equals(embeddedDB.getDBEngine())) {
+            return new MySqlGlobalLocker(dataSource);
         } else {
             return new MemoryGlobalLocker();
         }
diff --git a/util/src/test/java/org/killbill/billing/util/UtilTestSuiteWithEmbeddedDB.java b/util/src/test/java/org/killbill/billing/util/UtilTestSuiteWithEmbeddedDB.java
index 69abe55..17e8dfb 100644
--- a/util/src/test/java/org/killbill/billing/util/UtilTestSuiteWithEmbeddedDB.java
+++ b/util/src/test/java/org/killbill/billing/util/UtilTestSuiteWithEmbeddedDB.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2010-2012 Ning, Inc.
+ * Copyright 2010-2014 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
  *
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
  * License.  You may obtain a copy of the License at:
  *
@@ -18,20 +20,9 @@ package org.killbill.billing.util;
 
 import javax.inject.Inject;
 
-import org.killbill.billing.security.api.SecurityApi;
-import org.killbill.billing.util.security.shiro.dao.UserDao;
-import org.skife.jdbi.v2.IDBI;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
 import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
 import org.killbill.billing.api.TestApiListener;
-import org.killbill.bus.api.PersistentBus;
-import org.killbill.commons.locker.GlobalLocker;
-import org.killbill.notificationq.api.NotificationQueueService;
+import org.killbill.billing.security.api.SecurityApi;
 import org.killbill.billing.util.audit.dao.AuditDao;
 import org.killbill.billing.util.cache.CacheControllerDispatcher;
 import org.killbill.billing.util.callcontext.InternalCallContextFactory;
@@ -42,6 +33,19 @@ import org.killbill.billing.util.export.dao.DatabaseExportDao;
 import org.killbill.billing.util.glue.TestUtilModuleWithEmbeddedDB;
 import org.killbill.billing.util.tag.dao.DefaultTagDao;
 import org.killbill.billing.util.tag.dao.TagDefinitionDao;
+import org.killbill.bus.api.PersistentBus;
+import org.killbill.commons.embeddeddb.EmbeddedDB.DBEngine;
+import org.killbill.commons.locker.GlobalLocker;
+import org.killbill.commons.locker.memory.MemoryGlobalLocker;
+import org.killbill.commons.locker.mysql.MySqlGlobalLocker;
+import org.killbill.notificationq.api.NotificationQueueService;
+import org.skife.jdbi.v2.IDBI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
@@ -82,11 +86,17 @@ public abstract class UtilTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuite
     @Inject
     protected SecurityApi securityApi;
 
-
     @BeforeClass(groups = "slow")
     public void beforeClass() throws Exception {
         final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestUtilModuleWithEmbeddedDB(configSource));
         g.injectMembers(this);
+
+        if (DBEngine.MYSQL.equals(helper.getDBEngine())) {
+            Assert.assertTrue(locker instanceof MySqlGlobalLocker);
+        } else {
+            Assert.assertTrue(locker instanceof MemoryGlobalLocker);
+        }
+        Assert.assertTrue(locker.isFree("a", "b"));
     }
 
     @Override