kue icon indicating copy to clipboard operation
kue copied to clipboard

Process won't exit after queue shutdown if client is saving a job

Open olalonde opened this issue 8 years ago • 4 comments

[email protected]

Test case:

const test = require('blue-tape')
const kue = require('kue')

let queue

test('create queue', (t) => {
  queue = kue.createQueue({
    prefix: 'test-shutdown',
    redis: {
      host: 'localhost',
      port: 6379
    },
  })
  t.end()
})

test('enqueue', (t) => {
  // don't block
  queue
    .create('job-type', { foo: 'bar' })
    .save((err) => {
      t.ok(!!err)
      console.error(err)
    })
  t.end()
})

test('shutdown queue', (t) => {
  queue.shutdown(0, (err) => {
    t.error(err)
    t.end()
  })
})

test('the process will not exit :(', (t) => {
  t.end()
})

Output (process does not exit):

$ tape test.js
TAP version 13
# create queue
# enqueue
# shutdown queue
ok 1 undefined
# the process will not exit :(
ok 2 should be truthy
{ AbortError
    at handle_offline_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:846:15)
    at RedisClient.internal_send_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:880:9)
    at Multi.exec_transaction (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:115:18)
    at Job.state (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:702:9)
    at Job.<anonymous> (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:869:10)
    at callbackOrEmit (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:89:9)
    at /Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:107:13
    at _combinedTickCallback (internal/process/next_tick.js:95:7)
    at process._tickCallback (internal/process/next_tick.js:161:9)
  command: 'EXEC',
  code: 'NR_CLOSED',
  errors:
   [ { AbortError
         at handle_offline_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:846:15)
         at RedisClient.internal_send_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:880:9)
         at pipeline_transaction_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:41:18)
         at Multi.exec_transaction (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:112:9)
         at Job.state (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:702:9)
         at Job.<anonymous> (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:869:10)
         at callbackOrEmit (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:89:9)
         at /Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:107:13
         at _combinedTickCallback (internal/process/next_tick.js:95:7)
         at process._tickCallback (internal/process/next_tick.js:161:9) command: 'HSET', code: 'NR_CLOSED', args: [Array], position: 0 },
     { AbortError
         at handle_offline_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:846:15)
         at RedisClient.internal_send_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:880:9)
         at pipeline_transaction_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:41:18)
         at Multi.exec_transaction (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:112:9)
         at Job.state (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:702:9)
         at Job.<anonymous> (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:869:10)
         at callbackOrEmit (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:89:9)
         at /Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:107:13
         at _combinedTickCallback (internal/process/next_tick.js:95:7)
         at process._tickCallback (internal/process/next_tick.js:161:9) command: 'ZADD', code: 'NR_CLOSED', args: [Array], position: 1 },
     { AbortError
         at handle_offline_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:846:15)
         at RedisClient.internal_send_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:880:9)
         at pipeline_transaction_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:41:18)
         at Multi.exec_transaction (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:112:9)
         at Job.state (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:702:9)
         at Job.<anonymous> (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:869:10)
         at callbackOrEmit (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:89:9)
         at /Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:107:13
         at _combinedTickCallback (internal/process/next_tick.js:95:7)
         at process._tickCallback (internal/process/next_tick.js:161:9) command: 'ZADD', code: 'NR_CLOSED', args: [Array], position: 2 },
     { AbortError
         at handle_offline_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:846:15)
         at RedisClient.internal_send_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/index.js:880:9)
         at pipeline_transaction_command (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:41:18)
         at Multi.exec_transaction (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/multi.js:112:9)
         at Job.state (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:702:9)
         at Job.<anonymous> (/Users/olalonde/code/kue-shutdown-test/node_modules/kue/lib/queue/job.js:869:10)
         at callbackOrEmit (/Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:89:9)
         at /Users/olalonde/code/kue-shutdown-test/node_modules/redis/lib/utils.js:107:13
         at _combinedTickCallback (internal/process/next_tick.js:95:7)
         at process._tickCallback (internal/process/next_tick.js:161:9)
       command: 'LPUSH',
       code: 'NR_CLOSED',
       args: [Array],
       position: 3 } ] }

olalonde avatar Jun 15 '17 20:06 olalonde

Created this repo to reproduce: https://github.com/olalonde/kue-shutdown-test

olalonde avatar Jun 15 '17 20:06 olalonde

Thank you @olalonde , I will try to check this ASAP

behrad avatar Jun 23 '17 20:06 behrad

Any update regarding this ? Im experiencing something similar with AWS Lambda runtime. After a "hot" start, kue tries to create a new client without being initiated first, which fails the execution.

orenherman avatar May 01 '18 15:05 orenherman

Hello! Any update regarding this?

cassiodias avatar Jul 20 '18 14:07 cassiodias