diff --git a/CHANGELOG.md b/CHANGELOG.md index f5323f1..6b82cfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. (#256). - `kick()` left a transaction open when the `utube` tube had no buried tasks (#256). +- The `utubettl` driver could accumulate tasks in the status `READY` without + deleting (#261). ## [1.5.0] - 2026-07-10 diff --git a/queue/abstract/driver/utubettl.lua b/queue/abstract/driver/utubettl.lua index 4d73ecc..3501dbc 100644 --- a/queue/abstract/driver/utubettl.lua +++ b/queue/abstract/driver/utubettl.lua @@ -652,7 +652,7 @@ function method.release(self, id, opts) else task = self.space:update(id, { { '=', i_status, state.READY }, - { '=', i_next_event, util.time(task[i_created] + task[i_ttl]) } + { '=', i_next_event, task[i_created] + task[i_ttl] } }) if self.ready_space_mode and task ~= nil then diff --git a/t/040-utubettl.t b/t/040-utubettl.t index f6f811e..5f85e3c 100755 --- a/t/040-utubettl.t +++ b/t/040-utubettl.t @@ -3,7 +3,7 @@ local yaml = require('yaml') local fiber = require('fiber') local test = (require('tap')).test() -test:plan(18) +test:plan(19) local queue = require('queue') local state = require('queue.abstract.state') @@ -394,6 +394,21 @@ test:test('ttl after delay test', function(test) test:is(task.ttr, TTR * 1000000, 'check TTR after release') end) +test:test('test task deleted after release and ttl', function(test) + local TTL = 1 + test:plan(2) + box.cfg{} + local tube = queue.create_tube('test_delete_after_release', 'utubettl', { if_not_exists = true }) + tube:put({'test_task'}, {ttl = TTL, ttr = 10}) + local task = tube:take(.1) + test:ok(task ~= nil, 'task was taken') + if task == nil then return end + tube:release(task[1]) -- No delay. + + fiber.sleep(TTL + 0.3) + test:is(tube:take(.1), nil, 'task must be deleted by TTL after release without delay') +end) + test:test('Get tasks by state test', function(test) test:plan(2) local tube = queue.create_tube('test_task_it', 'utubettl')