From 366d7ab2a18e766afe88e516f40d5146277fce09 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Fri, 6 May 2016 07:38:08 -0400 Subject: [PATCH] INT-4023: Fix MongoDB MGSs timing issue JIRA: https://jira.spring.io/browse/INT-4023 There is no guaranty that following `System.currentTimeMillis()` return the same value. That is how the `assertEquals()` test for `created` and `modified` value may fail sporadically. * Fix `MongoDbMessageStore` and `ConfigurableMongoDbMessageStore` do not use a new `System.currentTimeMillis()` in case of `group create` **Cherry-pick to 4.2.x** Conflicts: spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore.java spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java --- .../mongodb/store/ConfigurableMongoDbMessageStore.java | 6 +++--- .../integration/mongodb/store/MongoDbMessageStore.java | 6 +++--- .../store/AbstractMongoDbMessageGroupStoreTests.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore.java b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore.java index f8be1e7ff5..9c2e06f6e5 100644 --- a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore.java +++ b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore.java @@ -177,7 +177,7 @@ public class ConfigurableMongoDbMessageStore extends AbstractConfigurableMongoDb Query query = groupOrderQuery(groupId); MessageDocument messageDocument = mongoTemplate.findOne(query, MessageDocument.class, collectionName); - long createdTime = 0; + long createdTime = System.currentTimeMillis(); int lastReleasedSequence = 0; boolean complete = false; @@ -191,8 +191,8 @@ public class ConfigurableMongoDbMessageStore extends AbstractConfigurableMongoDb document.setGroupId(groupId); document.setComplete(complete); document.setLastReleasedSequence(lastReleasedSequence); - document.setCreatedTime(createdTime == 0 ? System.currentTimeMillis() : createdTime); - document.setLastModifiedTime(System.currentTimeMillis()); + document.setCreatedTime(createdTime); + document.setLastModifiedTime(messageDocument == null ? createdTime : System.currentTimeMillis()); document.setSequence(getNextId()); addMessageDocument(document); diff --git a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java index 7645f4c458..46bf2abcea 100644 --- a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java +++ b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java @@ -280,7 +280,7 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore Query query = whereGroupIdOrder(groupId); MessageWrapper messageDocument = template.findOne(query, MessageWrapper.class, collectionName); - long createdTime = 0; + long createdTime = System.currentTimeMillis(); int lastReleasedSequence = 0; boolean complete = false; @@ -293,8 +293,8 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore MessageWrapper wrapper = new MessageWrapper(message); wrapper.set_GroupId(groupId); - wrapper.set_Group_timestamp(createdTime == 0 ? System.currentTimeMillis() : createdTime); - wrapper.set_Group_update_timestamp(System.currentTimeMillis()); + wrapper.set_Group_timestamp(createdTime); + wrapper.set_Group_update_timestamp(messageDocument == null ? createdTime : System.currentTimeMillis()); wrapper.set_Group_complete(complete); wrapper.set_LastReleasedSequenceNumber(lastReleasedSequence); wrapper.setSequence(getNextId()); diff --git a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/AbstractMongoDbMessageGroupStoreTests.java b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/AbstractMongoDbMessageGroupStoreTests.java index f20a4670f5..dd1ac7d7b2 100644 --- a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/AbstractMongoDbMessageGroupStoreTests.java +++ b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/AbstractMongoDbMessageGroupStoreTests.java @@ -233,7 +233,7 @@ public abstract class AbstractMongoDbMessageGroupStoreTests extends MongoDbAvail long createdTimestamp = messageGroup.getTimestamp(); long updatedTimestamp = messageGroup.getLastModified(); assertEquals(createdTimestamp, updatedTimestamp); - Thread.sleep(1000); + Thread.sleep(10); message = new GenericMessage("Hello again"); messageGroup = store.addMessageToGroup(1, message); createdTimestamp = messageGroup.getTimestamp();