Skip to content

Taken task is not released back to 'ready' after Tarantool reboot #66

Closed
@rybakit

Description

@rybakit

How to reproduce:

  1. Get into the docker container and add a task:
docker-compose exec tnt1 tarantoolctl connect /var/run/tarantool/tarantool.sock
queue.tube.default:put({test=true})
---
- [0, 'r', {'test': true}]
...
  1. Take a task:
queue.tube.default:take()
---
- [0, 't', {'test': true}]
...
  1. Restart container:
docker-compose restart tnt1
  1. Check task status:
queue.tube.default:peek(0)
---
- [0, 't', {'test': true}]
...

The issue can be reproduced with connectors:

https://github.com/igorcoding/asynctnt-queue:

import asyncio
import asynctnt
import asynctnt_queue
import sys

async def run():
    conn = asynctnt.Connection(host='tnt1', port=3301, username='tnt1', password='tnt1')
    await conn.connect()

    queue = asynctnt_queue.Queue(conn)
    test_tube = queue.tube('default')

    # Retrieve a task from queue
    task = await test_tube.take(1)

    print(task)

    # Restart Tarantool here
    sys.stdin.readline()

    await conn.disconnect()

loop = asyncio.get_event_loop()
loop.run_until_complete(run())

https://github.com/tarantool-php/queue:

<?php

$conn = new \Tarantool\Client\Connection\StreamConnection('tcp://127.0.0.1:3301');
$client = new \Tarantool\Client\Client($conn, new \Tarantool\Client\Packer\PurePacker());
$client->authenticate('tnt1', 'tnt1');

$queue = new \Tarantool\Queue\Queue($client, 'default');
$task = $queue->take(1);

var_dump($task);

readline('Restart Tarantool and press a key to continue');

Here is the simplified instance configuration:

box.cfg {
    listen = 3301,
    log_level = 5
}

local config = {
    user = 'tnt1',
    password = 'tnt1'
}

if not box.schema.user.exists(config.user) then
    box.schema.user.create(config.user, {password = config.password})
    box.schema.user.grant(config.user, 'read,write,execute', 'universe', nil)
end

queue = require('queue')
box.once('foobar:v0.1.0', function()
    queue.create_tube('default', 'fifottl', {if_not_exists = true})
end)

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions