}
/* +--------------------------+
- | log olog |
+ | olog log |
+--------+-------+---------+
| |object | |
|version | hash | version |
| | | |
- tail > (1,1) | x5 | (1,1) < tail
+ tail > (1,1) | x9 | (1,1) < tail
| | | |
| | | |
| (1,2) | x3 | (1,2) |
pg_shard_t from;
eversion_t last_update(1, 2);
+ hobject_t divergent_object;
+ divergent_object.set_hash(0x9);
{
pg_log_entry_t e;
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 1);
- e.soid.set_hash(0x5);
+ e.soid = divergent_object;
log.tail = e.version;
log.log.push_back(e);
e.version = last_update;
e.soid.set_hash(0x3);
log.log.push_back(e);
- e.version = eversion_t(1,3);
- e.soid.set_hash(0x9);
+ e.version = eversion_t(2, 3);
+ e.prior_version = eversion_t(1, 1);
+ e.soid = divergent_object;
e.op = pg_log_entry_t::DELETE;
log.log.push_back(e);
log.head = e.version;
log.index();
e.version = eversion_t(1, 1);
- e.soid.set_hash(0x5);
+ e.soid = divergent_object;
olog.tail = e.version;
olog.log.push_back(e);
e.version = last_update;
e.soid.set_hash(0x3);
olog.log.push_back(e);
- e.version = eversion_t(2, 3);
- e.soid.set_hash(0x9);
+ e.version = eversion_t(1, 3);
+ e.prior_version = eversion_t(1, 1);
+ e.soid = divergent_object;
e.op = pg_log_entry_t::DELETE;
olog.log.push_back(e);
olog.head = e.version;
proc_replica_log(t, oinfo, olog, omissing, from);
EXPECT_TRUE(t.empty());
- EXPECT_FALSE(omissing.have_missing());
+ EXPECT_TRUE(omissing.have_missing());
+ EXPECT_TRUE(omissing.is_missing(divergent_object));
+ EXPECT_EQ(omissing.missing[divergent_object].have, eversion_t(0, 0));
+ EXPECT_EQ(omissing.missing[divergent_object].need, eversion_t(1, 1));
EXPECT_EQ(last_update, oinfo.last_update);
- EXPECT_EQ(last_update, oinfo.last_complete);
}
/* +--------------------------+
- | log olog |
+ | olog log |
+--------+-------+---------+
| |object | |
|version | hash | version |
| | | |
- tail > (1,1) | x5 | (1,1) < tail
+ tail > (1,1) | x9 | (1,1) < tail
| | | |
| | | |
| (1,2) | x3 | (1,2) |
| | | |
| | | |
head > (1,3) | x9 | |
- | DELETE | | |
+ | MODIFY | | |
| | | |
| | x9 | (2,3) < head
- | | | MODIFY |
+ | | | DELETE |
| | | |
+--------+-------+---------+
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 1);
- e.soid.set_hash(0x5);
+ e.soid = divergent_object;
log.tail = e.version;
log.log.push_back(e);
e.version = last_update;
e.soid.set_hash(0x3);
log.log.push_back(e);
- e.version = eversion_t(1, 3);
- e.soid.set_hash(0x9);
+ e.version = eversion_t(2, 3);
+ e.prior_version = eversion_t(1, 1);
+ e.soid = divergent_object;
e.op = pg_log_entry_t::DELETE;
log.log.push_back(e);
log.head = e.version;
log.index();
e.version = eversion_t(1, 1);
- e.soid.set_hash(0x5);
+ e.soid = divergent_object;
olog.tail = e.version;
olog.log.push_back(e);
e.version = last_update;
e.soid.set_hash(0x3);
olog.log.push_back(e);
- e.version = eversion_t(2, 3);
- e.soid.set_hash(0x9);
+ e.version = eversion_t(1, 3);
+ e.prior_version = eversion_t(1, 1);
+ e.soid = divergent_object;
divergent_object = e.soid;
omissing.add(divergent_object, e.version, eversion_t());
e.op = pg_log_entry_t::MODIFY;
EXPECT_TRUE(t.empty());
EXPECT_TRUE(omissing.have_missing());
EXPECT_TRUE(omissing.is_missing(divergent_object));
- EXPECT_EQ(eversion_t(2, 3), omissing.missing[divergent_object].need);
+ EXPECT_EQ(eversion_t(1, 3), omissing.missing[divergent_object].need);
EXPECT_EQ(olog.head, oinfo.last_update);
EXPECT_EQ(olog.head, oinfo.last_complete);
proc_replica_log(t, oinfo, olog, omissing, from);
EXPECT_TRUE(t.empty());
- EXPECT_FALSE(omissing.have_missing());
+ EXPECT_TRUE(omissing.have_missing());
+ EXPECT_TRUE(omissing.is_missing(divergent_object));
+ EXPECT_EQ(omissing.missing[divergent_object].have, eversion_t(0, 0));
+ EXPECT_EQ(omissing.missing[divergent_object].need, eversion_t(1, 1));
EXPECT_EQ(last_update, oinfo.last_update);
- EXPECT_EQ(last_update, oinfo.last_complete);
}
/* +--------------------------+