Просмотр исходного кода

Merge pull request #20 from sharelatex/ho-ttl-delay

added random up to 30 mins delay to the ttl of mongo objects
Brian Gough 9 лет назад
Родитель
Сommit
29da5797e3

+ 7 - 1
services/track-changes/app/coffee/PackManager.coffee

@@ -526,7 +526,13 @@ module.exports = PackManager =
 	setTTLOnArchivedPack: (project_id, doc_id, pack_id, callback) ->
 		db.docHistory.findAndModify {
 			query: {_id: pack_id}
-			update: {$set: {expiresAt: new Date(Date.now() + 1*DAYS)}}
+			update: {$set: {expiresAt: PackManager._getOneDayInFutureWithRandomDelay()}}
 		}, (err) ->
 			logger.log {project_id, doc_id, pack_id}, "set expiry on pack"
 			callback()
+
+
+	_getOneDayInFutureWithRandomDelay: ->
+		thirtyMins = 1000 * 60 * 30
+		randomThirtyMinMax = Math.ceil(Math.random() * thirtyMins)
+		return new Date(Date.now() + randomThirtyMinMax + 1*DAYS)

+ 30 - 1
services/track-changes/test/unit/coffee/PackManager/PackManagerTests.coffee

@@ -25,7 +25,6 @@ describe "PackManager", ->
 		@project_id = ObjectId().toString()
 		@PackManager.MAX_COUNT = 512
 
-
 	afterEach ->
 		tk.reset()
 
@@ -334,3 +333,33 @@ describe "PackManager", ->
 				@callback.called.should.equal true
 			it "should return with no error", ->
 				@callback.calledWith(undefined).should.equal true
+
+	describe "setTTLOnArchivedPack", ->
+		beforeEach ->
+			@pack_id = "somepackid"
+			@onedayinms = 86400000
+			@db.docHistory =
+				findAndModify : sinon.stub().callsArgWith(1)
+
+		it "should set expires to 1 day", (done)->
+			@PackManager._getOneDayInFutureWithRandomDelay = sinon.stub().returns(@onedayinms)
+			@PackManager.setTTLOnArchivedPack @project_id, @doc_id, @pack_id, =>
+				args = @db.docHistory.findAndModify.args[0][0]
+				args.query._id.should.equal @pack_id
+				args.update['$set'].expiresAt.should.equal @onedayinms
+				done()
+
+
+	describe "_getOneDayInFutureWithRandomDelay", ->
+		beforeEach ->
+			@onedayinms = 86400000
+			@thirtyMins = 1000 * 60 * 30
+
+		it "should give 1 day + 30 mins random time", (done)->
+			loops = 10000
+			while --loops > 0
+				randomDelay = @PackManager._getOneDayInFutureWithRandomDelay() - new Date(Date.now() + @onedayinms)
+				randomDelay.should.be.above(0)
+				randomDelay.should.be.below(@thirtyMins + 1)
+			done()
+