2012-06-12 2 views
1

셀러 리와 amqp를 사용하여 작업을 실행하려고하면 아래 오류가 발생합니다. 구성에 문제가 있습니다. 이 문제를 어떻게 해결할 수 있습니까? 결과를 저장셀러리 'i'형식의 내부 오류입니다.

[2012-06-12 16:49:37,231: CRITICAL/MainProcess] Task core.tasks.sanity[c44c8058-46d1-48cd-a687-0481f5bd5ee5] INTERNAL ERROR: error("'i' format requires -2147483648 <= number <= 2147483647",) 
Traceback (most recent call last): 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/celery/execute/trace.py", line 192, in trace_task 
    R = I.handle_error_state(task, eager=eager) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/celery/execute/trace.py", line 91, in handle_error_state 
    }[self.state](task, store_errors=store_errors) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/celery/execute/trace.py", line 114, in handle_failure 
    task.backend.mark_as_failure(req.id, exc, self.strtb) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/celery/backends/base.py", line 96, in mark_as_failure 
    traceback=traceback) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/celery/backends/base.py", line 229, in store_result 
    return self._store_result(task_id, result, status, traceback, **kwargs) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/celery/backends/amqp.py", line 121, in _store_result 
    "traceback": traceback}) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/kombu/connection.py", line 272, in _ensured 
    return fun(*args, **kwargs) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/celery/backends/amqp.py", line 97, in _publish_result 
    self._create_producer(task_id, connection).publish(meta) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/celery/backends/amqp.py", line 87, in _create_producer 
    self._create_binding(task_id)(connection.default_channel).declare() 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/kombu/entity.py", line 386, in declare 
    self.queue_declare(nowait, passive=False) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/kombu/entity.py", line 408, in queue_declare 
    nowait=nowait) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/amqplib/client_0_8/channel.py", line 1376, in queue_declare 
    args.write_table(arguments) 
    File "/nobackup/vivenara/pyenv/lib/python2.7/site-packages/amqplib/client_0_8/serialization.py", line 378, in write_table 
    table_data.write(pack('>i', v)) 
error: 'i' format requires -2147483648 <= number <= 2147483647 
+0

사용중인 RabbitMQ의 버전은 무엇입니까? – asksol

+0

RHEL 상자에서 버전 2.8.2를 사용 중입니다. –

+0

맞춤 CELERY_TASK_RESULT_EXPIRES을 (를) 설정 했습니까? stacktrace에서 대기열 선언 명령을 amqp 이진 프레임 형식으로 직렬화하려고 시도 할 때 결과 만료 값이 float/int 또는 범위를 벗어난 다른 형식 인 경우이 오류를 얻는 것이 좋습니다. – asksol

답변

2

값 오버플 : 그것은 INT로 인식하면서

error: 'i' format requires -2147483648 <= number <= 2147483647 

BIGINT/경도 값은 AMQP 큐에 기록되고있다. 내가 생각하는 구성상의 문제는 아닙니다. 결과로 저장하려고 시도하는 가치는 무엇입니까? 결과 값이 무엇

return self._store_result(task_id, result, status, traceback, **kwargs) 

당신이 확인할 수 있습니다 내가 스택 추적에서 볼

?

def mark_as_failure(self, task_id, exc, traceback=None): 
     """Mark task as executed with failure. Stores the execption.""" 
     return self.store_result(task_id, exc, status=states.FAILURE, 
           traceback=traceback) 

이가 작업에서 발생한 예외가 될 수 없습니다 :

task.backend.mark_as_failure(req.id, exc, self.strtb) 

따라서이 경우에는이 결과로 EXC 반환 아마이 이상한 값 ...

편집입니다 bigint 상태 코드가 포함되어 있습니까?

+0

처음에는 생각했지만 결과는 간단한 부울 True/False 값입니다. –

+0

task.backend.mark_as_failure (req.id, exc, self.strtb) - 작업이 실패한 것으로 보입니다. 그래서 아마 다른 반환 값/코드를 사용합니다. – Tisho

+0

결과로 예외 (exc)를 반환하는 것 같습니다 ... 코드 발사는 어떤 종류의 예외인지 확인할 수 있습니까? code = big_int를 사용하여 예외가 될 수 있습니다. 그런 다음 직렬화하고 AMQP로 푸시하려고하면 try ... try로 래핑 해보십시오 : 코드를 제외하고 디버깅 세부 정보가있는 사용자 정의 예외를 다시 throw하십시오. – Tisho