diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
index f169d53..b416661 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
@@ -93,20 +93,25 @@ public class TestIntegration extends TestIntegrationBase {
}
- @Test(groups = {"slow", "stress"}, enabled = true)
+ @Test(groups = {"stress"}, enabled = true)
public void stressTestDebug() throws Exception {
- final int maxIterations = 5;
+ final int maxIterations = 100;
for (int curIteration = 0; curIteration < maxIterations; curIteration++) {
log.info("################################ ITERATION " + curIteration + " #########################");
- Thread.sleep(1000);
- testRepairChangeBPWithAddonIncluded();
- setupTest();
+ if (curIteration != 0) {
+ setupTest();
+ }
+ testAddonsWithMultipleAlignments();
+ if (curIteration < maxIterations - 1) {
+ cleanupTest();
+ Thread.sleep(1000);
+ }
}
}
@Test(groups = "slow", enabled = true)
- public void testRepairChangeBPWithAddonIncluded() throws Exception {
+ public void testAddonsWithMultipleAlignments() throws Exception {
log.info("Starting testRepairChangeBPWithAddonIncluded");
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java
index 5428580..5f1c8e4 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDatePoster.java
@@ -17,6 +17,7 @@
package com.ning.billing.invoice.notification;
import java.io.IOException;
+import java.util.List;
import java.util.UUID;
import org.joda.time.DateTime;
@@ -26,7 +27,7 @@ import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
import com.ning.billing.invoice.api.DefaultInvoiceService;
-import com.ning.billing.util.notificationq.NotificationKey;
+import com.ning.billing.util.notificationq.Notification;
import com.ning.billing.util.notificationq.NotificationQueue;
import com.ning.billing.util.notificationq.NotificationQueueService;
import com.ning.billing.util.notificationq.NotificationQueueService.NoSuchNotificationQueue;
@@ -45,14 +46,24 @@ public class DefaultNextBillingDatePoster implements NextBillingDatePoster {
}
@Override
- public void insertNextBillingNotification(final Transmogrifier transactionalDao, final UUID acountId, final UUID subscriptionId, final DateTime futureNotificationTime) {
+ public void insertNextBillingNotification(final Transmogrifier transactionalDao, final UUID accountId, final UUID subscriptionId, final DateTime futureNotificationTime) {
final NotificationQueue nextBillingQueue;
try {
+
+
nextBillingQueue = notificationQueueService.getNotificationQueue(DefaultInvoiceService.INVOICE_SERVICE_NAME,
DefaultNextBillingDateNotifier.NEXT_BILLING_DATE_NOTIFIER_QUEUE);
log.info("Queuing next billing date notification. id: {}, timestamp: {}", subscriptionId.toString(), futureNotificationTime.toString());
- nextBillingQueue.recordFutureNotificationFromTransaction(transactionalDao, futureNotificationTime, acountId, new NextBillingDateNotificationKey(subscriptionId));
+
+ List<Notification> existingNotifications = nextBillingQueue.getNotificationForAccountAndDate(accountId, futureNotificationTime);
+ if (existingNotifications.size() > 0) {
+ log.info(String.format("%s : notification for account %s and date %s already exist, skip...",
+ DefaultNextBillingDateNotifier.NEXT_BILLING_DATE_NOTIFIER_QUEUE, accountId, futureNotificationTime));
+ return;
+ }
+
+ nextBillingQueue.recordFutureNotificationFromTransaction(transactionalDao, futureNotificationTime, accountId, new NextBillingDateNotificationKey(subscriptionId));
} catch (NoSuchNotificationQueue e) {
log.error("Attempting to put items on a non-existent queue (NextBillingDateNotifier).", e);
} catch (IOException e) {
diff --git a/util/src/main/resources/com/ning/billing/util/ddl.sql b/util/src/main/resources/com/ning/billing/util/ddl.sql
index 1513ec3..acb8d69 100644
--- a/util/src/main/resources/com/ning/billing/util/ddl.sql
+++ b/util/src/main/resources/com/ning/billing/util/ddl.sql
@@ -103,7 +103,7 @@ CREATE TABLE notifications (
id char(36) NOT NULL,
created_date datetime NOT NULL,
class_name varchar(256) NOT NULL,
- account_id char(36) NOT NULL,
+ account_id char(36),
notification_key varchar(2048) NOT NULL,
creating_owner char(50) NOT NULL,
effective_date datetime NOT NULL,