Vấn đề với bất kỳ lỗi điểm phát sóng nào là bạn cần đạt đến ngưỡng biên dịch (ví dụ: 10000) trước khi nó có thể giúp bạn: vì vậy nếu kiểm tra đơn vị của bạn là "tầm thường", có thể bạn sẽ không bắt được nó.
Ví dụ: chúng tôi gặp phải vấn đề về kết quả không chính xác một cách sáng suốt, vì thử nghiệm cụ thể này tạo 20.000 chỉ mục tài liệu. Trong các thử nghiệm của chúng tôi, chúng tôi ngẫu nhiên hóa các giao diện khác nhau (ví dụ: các triển khai thư mục khác nhau) và các tham số chỉ mục, và thử nghiệm chỉ thất bại 1% thời gian, sau đó có thể tái tạo với cùng một hạt giống ngẫu nhiên. Chúng tôi cũng chạy checkindex trên mọi chỉ mục để kiểm tra việc tạo, thực hiện một số kiểm tra sanity để đảm bảo chỉ mục không bị hỏng.
Đối với thử nghiệm chúng tôi đã tìm thấy, nếu bạn có cấu hình cụ thể: ví dụ: RAMDirectory + PulsingCodec + tải trọng được lưu trữ cho trường, sau khi nó đạt đến ngưỡng biên dịch, vòng lặp liệt kê trên các bài đăng trả về các phép tính không chính xác, trong trường hợp này là số lượng tài liệu trả về cho một thuật ngữ! = DocFreq được lưu trữ cho thuật ngữ.
Chúng tôi có một số lượng tốt các bài kiểm tra căng thẳng và điều quan trọng cần lưu ý là các xác nhận thông thường trong bài kiểm tra này thực sự trôi qua, phần kiểm tra ở phần cuối không thành công.
Vấn đề lớn với việc lập chỉ mục tăng dần của Lucene về cơ bản hoạt động bằng cách hợp nhất nhiều phân đoạn thành một: vì điều này, nếu những dữ liệu không hợp lệ này được tính được lưu trữ vào chỉ mục mới được hợp nhất: tham nhũng.
Tôi muốn nói lỗi này là lén lút hơn các lỗi điểm phát sóng tối ưu hóa vòng lặp trước mà chúng tôi đã nhấn (ví dụ: công cụ đăng nhập lật, https://issues.apache.org/jira/browse/LUCENE-2975). Trong trường hợp đó, chúng tôi đã có được các tài liệu tiêu cực bất thường, điều này giúp bạn dễ dàng nắm bắt. Chúng tôi cũng chỉ phải tự mở một phương thức duy nhất để né tránh nó. Mặt khác, "thử nghiệm" duy nhất mà chúng tôi ban đầu cho rằng đó là một chỉ số 10GB khổng lồ của http://www.pangaea.de/, do đó, thật khó để thu hẹp nó xuống lỗi này. Trong trường hợp này, tôi đã dành một số lượng thời gian (ví dụ như mỗi đêm tuần trước) cố gắng tự unroll/inline những thứ khác nhau, cố gắng để tạo một số workaround vì vậy chúng tôi có thể né tránh các lỗi và không có khả năng chỉ số tham nhũng đang được tạo. Tôi có thể né tránh một số trường hợp, nhưng có nhiều trường hợp tôi không thể ... và tôi chắc chắn rằng nếu chúng ta có thể kích hoạt công cụ này trong các thử nghiệm của chúng tôi có nhiều trường hợp hơn ...
Nguồn
2011-08-01 04:27:08
Trực tiếp từ nguồn. 1 – aroth
Cảm ơn, nhân tiện, vì tôi đã thấy nhiều nhận xét về nó: xin lưu ý rằng thiết lập thử nghiệm đã bắt gặp 'kết quả sai' đã được cam kết vào ngày 30 tháng 6 (https://issues.apache.org/jira/browse/LUCENE- 3264), Tuy nhiên dấu thời gian trên bản phát hành Java 7 thực sự là ngày 27 tháng 6 (http://blog.thetaphi.de/2011/07/real-story-behind-java-7-ga-bugs.html), oh, và lỗi đã được mở tại oracle kể từ ngày 13 tháng 5 anyway (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7044738). –
Cảm ơn Robert vì câu trả lời chi tiết, trực tiếp. Đây là một thảm họa: Dự án hiện tại của tôi sử dụng rất nhiều mật mã và băm mật mã. Hàng triệu lần lặp trên mảng. Các sự cố mà tôi có thể xử lý, nhưng có các tệp được mã hóa không chính xác hoặc các băm chỉ có thể trở thành những năm hiển nhiên theo dõi các hậu quả khủng khiếp. – Carsten