Skip to content

Commit

Permalink
Merge pull request #45 from chytonpide/bugfix/duplicated-tracker-crea…
Browse files Browse the repository at this point in the history
…tion

Fix duplicated tracker creation
  • Loading branch information
VaughnVernon authored Mar 26, 2022
2 parents 05d9557 + a7f8591 commit 9b27b11
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -169,19 +169,7 @@ public void startDiscussionInitiation(StartDiscussionInitiationCommand aCommand)
+ aCommand.getProductId());
}

String timedOutEventName =
ProductDiscussionRequestTimedOut.class.getName();

TimeConstrainedProcessTracker tracker =
new TimeConstrainedProcessTracker(
product.tenantId().id(),
ProcessId.newProcessId(),
"Create discussion for product: "
+ product.name(),
new Date(),
5L * 60L * 1000L, // retries every 5 minutes
3, // 3 total retries
timedOutEventName);
TimeConstrainedProcessTracker tracker = processTrackerOfProduct(product);

this.processTrackerRepository().save(tracker);

Expand Down Expand Up @@ -310,4 +298,32 @@ private void requestProductDiscussionFor(Product aProduct) {
ApplicationServiceLifeCycle.fail(e);
}
}

private TimeConstrainedProcessTracker processTrackerOfProduct(Product aProduct) {
TimeConstrainedProcessTracker tracker = null;

if(aProduct.discussionInitiationId() != null) {
ProcessId processId = ProcessId.existingProcessId(aProduct.discussionInitiationId());

tracker = this.processTrackerRepository()
.trackerOfProcessId(aProduct.tenantId().id(), processId);
} else {
String timedOutEventName =
ProductDiscussionRequestTimedOut.class.getName();

tracker =
new TimeConstrainedProcessTracker(
aProduct.tenantId().id(),
ProcessId.newProcessId(),
"Create discussion for product: "
+ aProduct.name(),
new Date(),
5L * 60L * 1000L, // retries every 5 minutes
3, // 3 total retries
timedOutEventName);
}

return tracker;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ public void testRetryProductDiscussionRequest() throws Exception {
product.productId());

assertEquals(DiscussionAvailability.REQUESTED, productWithRetriedRequestedDiscussion.discussion().availability());
assertEquals(productWithDiscussionInitiation.discussionInitiationId(), productWithRetriedRequestedDiscussion.discussionInitiationId());
}

public void testStartDiscussionInitiation() throws Exception {
Expand Down

0 comments on commit 9b27b11

Please sign in to comment.