h1->release(h, nullptr, i);
+ check(get_meta(h, h1, "key1"), "Get meta failed");
+ checkeq(PROTOCOL_BINARY_RESPONSE_SUCCESS,
+ last_status.load(), "Get meta failed");
+
+ uint64_t curr_revseqno = last_meta.revSeqno;
+
/* Store a deleted item first with CAS 0 */
checkeq(ENGINE_SUCCESS,
store(h, h1, nullptr, OPERATION_SET, "key1", "deletevalue", &i,
h1->release(h, nullptr, i);
+ check(get_meta(h, h1, "key1"), "Get meta failed");
+ checkeq(PROTOCOL_BINARY_RESPONSE_SUCCESS,
+ last_status.load(), "Get meta failed");
+
+ checkeq(last_meta.revSeqno, curr_revseqno + 1,
+ "rev seqno should have incremented");
+
checkeq(ENGINE_SUCCESS,
store(h, h1, nullptr, OPERATION_SET, "key2", "somevalue", &i),
"Failed set");
h1->release(h, nullptr, i);
+ check(get_meta(h, h1, "key2"), "Get meta failed");
+ checkeq(PROTOCOL_BINARY_RESPONSE_SUCCESS,
+ last_status.load(), "Get meta failed");
+
+ curr_revseqno = last_meta.revSeqno;
+
/* Store a deleted item with the existing CAS value */
checkeq(ENGINE_SUCCESS,
store(h, h1, nullptr, OPERATION_SET, "key2", "deletevaluewithcas",
wait_for_flusher_to_settle(h, h1);
+ check(get_meta(h, h1, "key2"), "Get meta failed");
+ checkeq(PROTOCOL_BINARY_RESPONSE_SUCCESS,
+ last_status.load(), "Get meta failed");
+
+ checkeq(last_meta.revSeqno, curr_revseqno + 1,
+ "rev seqno should have incremented");
+
+ curr_revseqno = last_meta.revSeqno;
+
checkeq(ENGINE_SUCCESS,
store(h, h1, nullptr, OPERATION_SET, "key2",
"newdeletevalue", &i, 0, 0, 3600, 0x00, DocumentState::Deleted),
h1->release(h, nullptr, i);
+ check(get_meta(h, h1, "key2"), "Get meta failed");
+ checkeq(PROTOCOL_BINARY_RESPONSE_SUCCESS,
+ last_status.load(), "Get meta failed");
+
+ checkeq(last_meta.revSeqno, curr_revseqno + 1,
+ "rev seqno should have incremented");
+
+ curr_revseqno = last_meta.revSeqno;
+
checkeq(ENGINE_SUCCESS,
store(h, h1, nullptr, OPERATION_SET, "key2",
"newdeletevaluewithcas", &i, info.cas, 0, 3600, 0x00,
DocStateFilter::AliveOrDeleted),
"Failed to get value");
+ check(get_meta(h, h1, "key2"), "Get meta failed");
+ checkeq(PROTOCOL_BINARY_RESPONSE_SUCCESS,
+ last_status.load(), "Get meta failed");
+
+ checkeq(last_meta.revSeqno, curr_revseqno + 1,
+ "rev seqno should have incremented");
+
check(h1->get_item_info(h, nullptr, i, &info),
"Getting item info failed");
Item deleted_item(key, 0, 0, "deletedvalue", strlen("deletedvalue"));
deleted_item.setDeleted();
+ auto prev_revseqno = v->getRevSeqno();
+ deleted_item.setRevSeqno(prev_revseqno);
+
// Set a new deleted value
v->setValue(deleted_item, this->vbucket->ht);
- ItemMetaData itm_meta;
EXPECT_EQ(MutationStatus::WasDirty,
this->public_processSoftDelete(v->getKey(), v, 0));
verifyValue(key, "deletedvalue", TrackReference::Yes, WantsDeleted::Yes);
+ EXPECT_EQ(prev_revseqno + 1, v->getRevSeqno());
}
/**
Item deleted_item(key, 0, 0, "deletedvalue", strlen("deletedvalue"));
deleted_item.setDeleted();
+ auto prev_revseqno = v->getRevSeqno();
+ deleted_item.setRevSeqno(prev_revseqno);
+
// Set a new deleted value
v->setValue(deleted_item, this->vbucket->ht);
TrackReference::Yes,
WantsDeleted::Yes);
+ EXPECT_EQ(prev_revseqno + 1, v->getRevSeqno());
+
Item update_deleted_item(
key, 0, 0, "updatedeletedvalue", strlen("updatedeletedvalue"));
update_deleted_item.setDeleted();
+ prev_revseqno = v->getRevSeqno();
+ update_deleted_item.setRevSeqno(prev_revseqno);
+
// Set a new deleted value
v->setValue(update_deleted_item, this->vbucket->ht);
this->public_processSoftDelete(v->getKey(), v, 0));
verifyValue(
key, "updatedeletedvalue", TrackReference::Yes, WantsDeleted::Yes);
+ EXPECT_EQ(prev_revseqno + 1, v->getRevSeqno());
}
TEST_P(VBucketTest, SizeStatsSoftDel) {