Is JSON::Coder intended to be thread safe ?
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
- 38/100
Hướng nghiên cứu
Bắt đầu với activesupport/lib/active_support/json/encoding.rb tại các điểm tạo và tái sử dụng JSON::Coder dùng chung, sau đó kiểm tra JSON::Coder#dump và #generate về hành vi đồng thời trên JRuby. Sử dụng bản tái hiện bằng nhiều thread đã được báo cáo, nếu được cung cấp, để xác nhận race; hoàn tất khi hợp đồng về tính an toàn luồng được quyết định và hành vi được ghi lại hoặc được bao phủ bởi một regression test.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
In JRuby we hit a race condition: ActiveSupport uses a single shared JSON::Coder
instance and calls #dump on it from multiple threads.
ActiveSupport creates one shared Coder:
https://github.com/rails/rails/blob/v8.1.3.1/activesupport/lib/active_support/json/encoding.rb#L152
…and reuses it on every encode:
https://github.com/rails/rails/blob/v8.1.3.1/activesupport/lib/active_support/json/encoding.rb#L188
The error we got, on a flat object was
JSON::NestingError: nesting of 100 is too deep. Did you try to serialize objects with circular references?
Question: is a single JSON::Coder instance intended to be safe to call
concurrently from multiple threads (i.e. is #dump/#generate on one Coder
intended to be thread-safe)?
Versions: json 2.21.2 (java), JRuby 10.0.5.0, activesupport 8.1.3.1.
I have a small threaded reproduction I can add if useful.
- Ngôn ngữ chính
- Ruby
- Star
- 782
- Fork
- 383
- Merge trung bình
- 1 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 10
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
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 ruby/json
-
Can `ResumableParser` return whether the last `partial_value` container is completed or not? Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
-
Output formatting differences between jRuby 10.0.0.1 and Ruby 3.4 when converting Float to JSON. Đang mởjruby
ruby/json#817 · 3 bình luận · 1 reaction · 1 người được giao ·
-
jruby
-
new feature
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Please Drop ruby 3.2 support Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
googleapis/google-api-ruby-client#28001 · 5 reaction ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100