Skip to content

Не работает ttr в очереди fifottl #18

@dreadatour

Description

@dreadatour

Если таск был просрочен (выполнение таска заняло больше, чем 'ttr' секунд), то повторный его 'take' и 'ack' приводит к ошибке "Task was not taken in the session".

ВАЖНО: если приведённые ниже команды запускать в одном скрипте через dofile, всё будет хорошо.

Команды, которые нужно выполнить в консоли, чтобы воспроизвести ошибку:

queue = require 'queue'
box.cfg{wal_mode='none'}
queue.create_tube('test_ttr', 'fifottl')
queue.tube.test_ttr:put('foobar', {ttr=1})
queue.tube.test_ttr:take(0)

-- Wait few seconds

queue.tube.test_ttr:take(0)
queue.tube.test_ttr:ack(0)
- error: Task was not taken in the session

Лог:

➜ tarantool
tarantool: version 1.6.4-472-g53b61a8
type 'help' for interactive help
tarantool> queue = require 'queue'

---
...

tarantool> box.cfg{wal_mode='none'}
2015-04-03 16:59:04.273 [31212] main/101/interactive C> version 1.6.4-472-g53b61a8
2015-04-03 16:59:04.274 [31212] main/101/interactive C> log level 5
2015-04-03 16:59:04.274 [31212] main/101/interactive I> mapping 1073741824 bytes for a shared arena...
2015-04-03 16:59:04.275 [31212] main/101/interactive I> initializing an empty data directory
2015-04-03 16:59:04.284 [31250] snap/101/dumper I> creating `./00000000000000000000.snap.inprogress'
2015-04-03 16:59:04.285 [31250] snap/101/dumper I> saving snapshot `./00000000000000000000.snap.inprogress'
2015-04-03 16:59:04.285 [31250] snap/101/dumper I> done
2015-04-03 16:59:04.286 [31212] main/101/interactive I> ready to accept requests

---
...

tarantool> queue.create_tube('test_ttr', 'fifottl')
2015-04-03 16:59:16.577 [31212] main/103/fifottl I> Started queue fifottl fiber

---
- raw:
    fiber:
      status: suspended
      name: fifottl
      id: 103
    on_task_change: 'function: 0x09472e18'
    space:
      index:
        0: &0
          unique: true
          parts:
          - type: NUM
            fieldno: 1
          id: 0
          space_id: 515
          name: task_id
          type: TREE
        1: &1
          unique: true
          parts:
          - type: STR
            fieldno: 2
          - type: NUM
            fieldno: 6
          - type: NUM
            fieldno: 1
          id: 1
          space_id: 515
          name: status
          type: TREE
        2: &2
          unique: true
          parts:
          - type: STR
            fieldno: 2
          - type: NUM
            fieldno: 3
          id: 2
          space_id: 515
          name: watch
          type: TREE
        status: *1
        task_id: *0
        watch: *2
      on_replace: 'function: 0x09471a08'
      temporary: false
      id: 515
      engine: memtx
      enabled: true
      name: queue_fifottl_test_ttr
      field_count: 0
    opts: &3
      ttr: 15768000000
      ttl: 15768000000
      pri: 0
  type: fifottl
  tube_id: 0
  name: test_ttr
  opts: *3
...

tarantool> queue.tube.test_ttr:put('foobar', {ttr=1})

---
- [0, 'r', 'foobar']
...

tarantool> queue.tube.test_ttr:take(0)

---
- [0, 't', 'foobar']
...

tarantool> print("Wait few seconds")
Wait few seconds

---
...

tarantool> queue.tube.test_ttr:take(0)

---
- [0, 't', 'foobar']
...

tarantool> queue.tube.test_ttr:ack(0)

---
- error: Task was not taken in the session
...

tarantool>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions