diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-09-16 10:57:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-16 10:57:54 +0200 |
commit | ebc628ed34f9934be3498ba86a950ad1f88c160f (patch) | |
tree | 16c8d04f694d44cddaed997a025cc62d577820b9 | |
parent | 78dbf5da1d22f28d0dde886e13f1a4c384d612b5 (diff) | |
parent | 7466019d2f39c86fbdf35c2cfb717bba7b810b27 (diff) |
Merge pull request #3429 from vespa-engine/toregge/fixup-notify-putdone-remove-removedone-issues-pass2
Handle out of order put operations while tracking pending remove.
-rw-r--r-- | searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp | 8 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp | 5 |
2 files changed, 10 insertions, 3 deletions
diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp b/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp index cddce944e4d..625e9c1f6a9 100644 --- a/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp +++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp @@ -289,14 +289,18 @@ TEST_F("Test that out of order notifyRemoveDone is handled", StatsFixture) TEST_DO(f.assertChanges(1, 1)); } -TEST_F("Test that out of order notifyPutDone is handled", StatsFixture) +TEST_F("Test that out of order notifyPutDone is partially handled", StatsFixture) { f.notifyRemove(toGid(doc1), 20); TEST_DO(f.assertChanges(0, 1)); f.notifyPutDone(toGid(doc1), 12, 50); TEST_DO(f.assertChanges(1, 1)); - f.notifyRemoveDone(toGid(doc1), 20); + f.notifyPutDone(toGid(doc1), 11, 40); TEST_DO(f.assertChanges(1, 1)); + f.notifyPutDone(toGid(doc1), 13, 55); + TEST_DO(f.assertChanges(2, 1)); + f.notifyRemoveDone(toGid(doc1), 20); + TEST_DO(f.assertChanges(2, 1)); } } diff --git a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp index 341c5434623..bd3574327bc 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp +++ b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp @@ -57,7 +57,10 @@ GidToLidChangeHandler::notifyPutDone(GlobalId gid, uint32_t lid, SerialNum seria if (entry.removeSerialNum > serialNum) { return; // Document has already been removed later on } - assert(entry.putSerialNum < serialNum); + assert(entry.putSerialNum != serialNum); + if (entry.putSerialNum > serialNum) { + return; // Document has already been put later on + } entry.putSerialNum = serialNum; } notifyPutDone(gid, lid); |