method: NewMethodQuery deadlocks when a sort argument contains a method call

Đã đóng Phù hợp với người mới
#175 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
85/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
go
Lĩnh vực
cli

Hướng nghiên cứu

Bắt đầu trong method.go và theo dõi cách NewMethodQuery tìm và gọi factory đã đăng ký; issue xác định khóa được giữ trong khi gọi đó là nguyên nhân gây deadlock. Sau đó tìm bảng TestParseQuery và thêm trường hợp sort("count()") được mô tả trong issue. Chạy các bài kiểm tra parser và xác nhận lời gọi phương thức lồng nhau hoàn tất mà không bị treo.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

NewMethodQuery (method.go) holds methodQueryMux while it calls the registered factory. NewSortQuery and NewRSortQuery parse their argument with ParseQuery, which calls NewMethodQuery again for any method inside it, so the second Lock never returns:

  • ParseQuery(sort("count()")) and ParseQuery(rsort("has(""a"")")) hang forever.
  • The lock stays held, so every later method parse in the process hangs too.

This predates #174 (same on main).

Fix: look up the factory under the lock and call it after unlocking; a recursive RLock on an RWMutex would still block behind a waiting writer. Add sort("count()") as a TestParseQuery row.

Ngôn ngữ chính
Go
Star
7
Fork
2
Merge trung bình
10 giờ 2 phút
Pull request đã merge (30 ngày)
56

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của mojatter/tree

Tất cả issue của mojatter/tree

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.