Consumer.wait() blocks indefinitely
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- javascript, python
Hướng nghiên cứu
Bắt đầu trong couchdbkit/consumer/init.py và couchdbkit/consumer/sync.py, sau đó lần theo quá trình dọn dẹp response qua restkit/wrappers.py và các thao tác đọc cùng I/O socket của http_parser được hiển thị trong traceback. Tái hiện Consumer.wait() với yêu cầu _changes liên tục có bộ lọc và so sánh với curl. Công việc được hoàn tất khi client không còn bị block ngoài dự kiến và một regression test bao phủ hành vi này.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
I have a strange issue where Consumer.wait() blocks indefinitely, that is not reproducible using curl.
Basically I'm registering a Consumer for a (rather large) database with a specific since-value (53000000 in my case)
consumer = Consumer(db)
consumer.wait(self.callback, since=since, include_docs=True)
The callback receives and processes three results, and the call then blocks in
^CTraceback (most recent call last):
File "./manage.py", line 36, in <module>
execute_manager(settings)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 469, in execute_manager
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 222, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 255, in execute
output = self.handle(*args, **options)
File "/srv/mygpo/mygpo/../mygpo/maintenance/management/changescmd.py", line 59, in handle
self.process(self.db, since)
File "/srv/mygpo/mygpo/../mygpo/maintenance/management/changescmd.py", line 100, in process
consumer.wait(self.callback, since=since, **params)
File "/usr/local/lib/python2.7/dist-packages/couchdbkit-0.6.4-py2.7.egg/couchdbkit/consumer/__init__.py", line 103, in wait
return self._consumer.wait(cb, **params)
File "/usr/local/lib/python2.7/dist-packages/couchdbkit-0.6.4-py2.7.egg/couchdbkit/consumer/sync.py", line 56, in wait
break
File "/usr/local/lib/python2.7/dist-packages/restkit-4.2.1-py2.7.egg/restkit/wrappers.py", line 161, in __exit__
self.close()
File "/usr/local/lib/python2.7/dist-packages/restkit-4.2.1-py2.7.egg/restkit/wrappers.py", line 169, in close
self.body.read()
File "/usr/local/lib/python2.7/dist-packages/http_parser-0.8.1-py2.7-linux-x86_64.egg/http_parser/reader.py", line 33, in readinto
recved = self.http_stream.stream.readinto(buf)
File "/usr/local/lib/python2.7/dist-packages/http_parser-0.8.1-py2.7-linux-x86_64.egg/http_parser/_socketio.py", line 70, in readinto
return _recv_into_sock(self._sock, b)
File "/usr/local/lib/python2.7/dist-packages/http_parser-0.8.1-py2.7-linux-x86_64.egg/http_parser/_socketio.py", line 24, in <lambda>
_recv_into_sock = lambda sock, buf: sock.recv_into(buf)
KeyboardInterrupt
In the CouchDB log the query shows up as
[Sun, 03 Mar 2013 12:08:58 GMT] [info] [<0.9352.205>] 127.0.0.1 - - GET /mygpo/_changes?feed=continuous&since=53000000&filter=episode_states%2Fhas_play_events&include_docs=true 200
If I repeat the same call with curl, it quickly returns a large number of additional results. I'd therefore rule out an issue on the CouchDB side.
The filter that is used in the query is shown below.
function(doc, req)
{
if(doc.doc_type != "EpisodeUserState")
{
return false;
}
if(doc._deleted == true)
{
return false;
}
if(!doc.actions)
{
return false;
}
function isPlayEvent(action)
{
return action.action == "play";
}
return doc.actions.some(isPlayEvent);
}
I've tested and reproduced that with the latest version of couchdbkit, and have since upgraded couchdbkit (as well as restkit and http-parser) to their latest HEADs to rule out any recently fixed issues.
Any suggestions on how to further debug this?
- Ngôn ngữ chính
- Python
- Star
- 261
- Fork
- 90
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của benoitc/couchdbkit
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
benoitc/couchdbkit#181 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 35/100
benoitc/couchdbkit#196 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
benoitc/couchdbkit#194 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
benoitc/couchdbkit#193 · 2 bình luận · 1 reaction ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 48/100
benoitc/couchdbkit#192 ·
Tất cả issue của benoitc/couchdbkit
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
openvinotoolkit/openvino_notebooks#3858 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
hummingbot/hummingbot-api#256 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
-
area:other help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
WingedGuardian/GENesis-AGI#4734 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
peach-mitao/peach#693 ·
Maintainer thường phản hồi trong vòng 1 ngày