::decode(pool, bl);
}
DECODE_FINISH(bl);
+ build_filestore_key_cache();
}
void hobject_t::decode(json_spirit::Value& v)
else if (p.name_ == "namespace")
nspace = p.value_.get_str();
}
+ build_filestore_key_cache();
}
void hobject_t::dump(Formatter *f) const
{
if (o.is_max())
return out << "MAX";
- out << std::hex << o.hash << std::dec;
+ out << std::hex << o.get_hash() << std::dec;
if (o.get_key().length())
out << "." << o.get_key();
out << "/" << o.oid << "/" << o.snap;
shard_id = shard_id_t::NO_SHARD;
}
DECODE_FINISH(bl);
+ hobj.set_hash(hobj.get_hash()); //to call build_filestore_key_cache();
}
void ghobject_t::decode(json_spirit::Value& v)
struct hobject_t {
object_t oid;
snapid_t snap;
- uint32_t hash;
private:
+ uint32_t hash;
bool max;
+ filestore_hobject_key_t filestore_key_cache;
static const int64_t POOL_IS_TEMP = -1;
public:
int64_t pool;
}
string to_str() const;
+
+ uint32_t get_hash() const {
+ return hash;
+ }
+ void set_hash(uint32_t value) {
+ hash = value;
+ build_filestore_key_cache();
+ }
static bool match_hash(uint32_t to_check, uint32_t bits, uint32_t match) {
return (match & ~((~0)<<bits)) == (to_check & ~((~0)<<bits));
return pool == POOL_IS_TEMP;
}
- hobject_t() : snap(0), hash(0), max(false), pool(-1) {}
+ hobject_t() : snap(0), hash(0), max(false), pool(-1) {
+ build_filestore_key_cache();
+ }
hobject_t(object_t oid, const string& key, snapid_t snap, uint64_t hash,
int64_t pool, string nspace) :
oid(oid), snap(snap), hash(hash), max(false),
pool(pool), nspace(nspace),
- key(oid.name == key ? string() : key) {}
+ key(oid.name == key ? string() : key) {
+ build_filestore_key_cache();
+ }
hobject_t(const sobject_t &soid, const string &key, uint32_t hash,
int64_t pool, string nspace) :
oid(soid.oid), snap(soid.snap), hash(hash), max(false),
pool(pool), nspace(nspace),
- key(soid.oid.name == key ? string() : key) {}
+ key(soid.oid.name == key ? string() : key) {
+ build_filestore_key_cache();
+ }
/// @return min hobject_t ret s.t. ret.hash == this->hash
hobject_t get_boundary() const {
if (is_max())
return *this;
hobject_t ret;
- ret.hash = hash;
+ ret.set_hash(hash);
return ret;
}
/* Do not use when a particular hash function is needed */
explicit hobject_t(const sobject_t &o) :
oid(o.oid), snap(o.snap), max(false), pool(-1) {
- hash = CEPH_HASH_NAMESPACE::hash<sobject_t>()(o);
+ set_hash(CEPH_HASH_NAMESPACE::hash<sobject_t>()(o));
}
// maximum sorted value.
return _reverse_nibbles(hash);
}
filestore_hobject_key_t get_filestore_key() const {
- if (max)
- return 0x100000000ull;
- else
- return get_filestore_key_u32();
+ return max ? 0x100000000ull : filestore_key_cache;
+ }
+ void build_filestore_key_cache() {
+ filestore_key_cache = _reverse_nibbles(hash);
}
const string& get_effective_key() const {
if (hobj.is_max())
return *this;
ghobject_t ret;
- ret.hobj.hash = hobj.hash;
+ ret.hobj.set_hash(hobj.hash);
return ret;
}
filestore_hobject_key_t get_filestore_key_u32() const {
t += snprintf(t, end - t, ".none");
else
t += snprintf(t, end - t, ".%llx", (long long unsigned)oid.hobj.pool);
- snprintf(t, end - t, ".%.*X", (int)(sizeof(oid.hobj.hash)*2), oid.hobj.hash);
+ snprintf(t, end - t, ".%.*X", (int)(sizeof(oid.hobj.get_hash())*2), oid.hobj.get_hash());
if (oid.generation != ghobject_t::NO_GEN ||
oid.shard_id != shard_id_t::NO_SHARD) {
t += snprintf(t, end - t, ".snapdir");
else
t += snprintf(t, end - t, ".%llx", (long long unsigned)oid.hobj.snap);
- snprintf(t, end - t, ".%.*X", (int)(sizeof(oid.hobj.hash)*2), oid.hobj.hash);
+ snprintf(t, end - t, ".%.*X", (int)(sizeof(oid.hobj.get_hash())*2), oid.hobj.get_hash());
out += string(snap_with_hash);
return out;
}
typedef ceph::shared_ptr<FD> FDRef;
FDRef lookup(const ghobject_t &hoid) {
- int registry_id = hoid.hobj.hash % registry_shards;
+ int registry_id = hoid.hobj.get_hash() % registry_shards;
return registry[registry_id].lookup(hoid);
}
FDRef add(const ghobject_t &hoid, int fd, bool *existed) {
- int registry_id = hoid.hobj.hash % registry_shards;
+ int registry_id = hoid.hobj.get_hash() % registry_shards;
return registry[registry_id].add(hoid, new FD(fd), existed);
}
/// clear cached fd for hoid, subsequent lookups will get an empty FD
void clear(const ghobject_t &hoid) {
- int registry_id = hoid.hobj.hash % registry_shards;
+ int registry_id = hoid.hobj.get_hash() % registry_shards;
registry[registry_id].purge(hoid);
}
char *end = t + sizeof(buf);
// make field ordering match with hobject_t compare operations
- snprintf(t, end - t, "%.*X", (int)(sizeof(oid.hobj.hash)*2),
+ snprintf(t, end - t, "%.*X", (int)(sizeof(oid.hobj.get_hash())*2),
(uint32_t)oid.get_filestore_key_u32());
full_name += string(buf);
full_name.append(GHOBJECT_KEY_SEP_S);
(*out) = ghobject_t(hobject_t(name, key, snap, hash, (int64_t)pool, ns),
generation, shard_id);
// restore reversed hash. see calculate_key
- out->hobj.hash = out->get_filestore_key();
+ out->hobj.set_hash(out->get_filestore_key());
}
if (out_coll)
string HashIndex::get_path_str(const ghobject_t &oid) {
assert(!oid.is_max());
- return get_hash_str(oid.hobj.hash);
+ return get_hash_str(oid.hobj.get_hash());
}
uint32_t HashIndex::hash_prefix_to_hash(string prefix) {
t += snprintf(t, end - t, "_snapdir");
else
t += snprintf(t, end - t, "_%llx", (long long unsigned)oid.hobj.snap);
- snprintf(t, end - t, "_%.*X", (int)(sizeof(oid.hobj.hash)*2), oid.hobj.hash);
+ snprintf(t, end - t, "_%.*X", (int)(sizeof(oid.hobj.get_hash())*2), oid.hobj.get_hash());
return string(s);
}
t += snprintf(t, end - t, "snapdir");
else
t += snprintf(t, end - t, "%llx", (long long unsigned)oid.hobj.snap);
- snprintf(t, end - t, "_%.*X", (int)(sizeof(oid.hobj.hash)*2), oid.hobj.hash);
+ snprintf(t, end - t, "_%.*X", (int)(sizeof(oid.hobj.get_hash())*2), oid.hobj.get_hash());
full_name += string(buf);
full_name.append("_");
t += snprintf(t, end - t, "snapdir");
else
t += snprintf(t, end - t, "%llx", (long long unsigned)oid.hobj.snap);
- snprintf(t, end - t, "_%.*X", (int)(sizeof(oid.hobj.hash)*2), oid.hobj.hash);
+ snprintf(t, end - t, "_%.*X", (int)(sizeof(oid.hobj.get_hash())*2), oid.hobj.get_hash());
full_name += string(snap_with_hash);
return full_name;
}
o.hobj.snap = CEPH_SNAPDIR;
else
o.hobj.snap = strtoull(bar+1, NULL, 16);
- sscanf(hash, "_%X", &o.hobj.hash);
+
+ uint32_t hobject_hash_input;
+ sscanf(hash, "_%X", &hobject_hash_input);
+ o.hobj.set_hash(hobject_hash_input);
return 1;
}
return false;
}
void insert(const hobject_t& o) {
- hits.insert(o.hash);
+ hits.insert(o.get_hash());
++count;
}
bool contains(const hobject_t& o) const {
- return hits.count(o.hash);
+ return hits.count(o.get_hash());
}
unsigned insert_count() const {
return count;
}
void insert(const hobject_t& o) {
- bloom.insert(o.hash);
+ bloom.insert(o.get_hash());
}
bool contains(const hobject_t& o) const {
- return bloom.contains(o.hash);
+ return bloom.contains(o.get_hash());
}
unsigned insert_count() const {
return bloom.element_count();
for (list<pg_log_entry_t>::iterator i = oldlog.begin();
i != oldlog.end();
) {
- if ((i->soid.hash & mask) == child_pgid.m_seed) {
+ if ((i->soid.get_hash() & mask) == child_pgid.m_seed) {
olog->log.push_back(*i);
} else {
log.push_back(*i);
hobject_t snapoid(
coid.oid, coid.get_key(),
- obc->ssc->snapset.head_exists ? CEPH_NOSNAP:CEPH_SNAPDIR, coid.hash,
+ obc->ssc->snapset.head_exists ? CEPH_NOSNAP:CEPH_SNAPDIR, coid.get_hash(),
info.pgid.pool(), coid.get_namespace());
ObjectContextRef snapset_obc = get_object_context(snapoid, false);
MOSDOp *m = static_cast<MOSDOp *>(ctx->op->get_req());
object_locator_t src_oloc;
get_src_oloc(soid.oid, m->get_object_locator(), src_oloc);
- hobject_t src_oid(osd_op.soid, src_oloc.key, soid.hash,
+ hobject_t src_oid(osd_op.soid, src_oloc.key, soid.get_hash(),
info.pgid.pool(), src_oloc.nspace);
src_obc = ctx->src_obc[src_oid];
dout(10) << " src_oid " << src_oid << " obc " << src_obc << dendl;
ObjectContextRef rollback_to;
int ret = find_object_context(
- hobject_t(soid.oid, soid.get_key(), snapid, soid.hash, info.pgid.pool(),
+ hobject_t(soid.oid, soid.get_key(), snapid, soid.get_hash(), info.pgid.pool(),
soid.get_namespace()),
&rollback_to, false, false, &missing_oid);
if (ret == -EAGAIN) {
} else if (ctx->new_snapset.clones.size() &&
!ctx->cache_evict) {
// save snapset on _snap
- hobject_t snapoid(soid.oid, soid.get_key(), CEPH_SNAPDIR, soid.hash,
+ hobject_t snapoid(soid.oid, soid.get_key(), CEPH_SNAPDIR, soid.get_hash(),
info.pgid.pool(), soid.get_namespace());
dout(10) << " final snapset " << ctx->new_snapset
<< " in " << snapoid << dendl;
bool map_snapid_to_clone,
hobject_t *pmissing)
{
- hobject_t head(oid.oid, oid.get_key(), CEPH_NOSNAP, oid.hash,
+ hobject_t head(oid.oid, oid.get_key(), CEPH_NOSNAP, oid.get_hash(),
info.pgid.pool(), oid.get_namespace());
- hobject_t snapdir(oid.oid, oid.get_key(), CEPH_SNAPDIR, oid.hash,
+ hobject_t snapdir(oid.oid, oid.get_key(), CEPH_SNAPDIR, oid.get_hash(),
info.pgid.pool(), oid.get_namespace());
// want the snapdir?
put_snapset_context(ssc);
return -ENOENT;
}
- hobject_t soid(oid.oid, oid.get_key(), ssc->snapset.clones[k], oid.hash,
+ hobject_t soid(oid.oid, oid.get_key(), ssc->snapset.clones[k], oid.get_hash(),
info.pgid.pool(), oid.get_namespace());
if (pg_log.get_missing().is_missing(soid)) {
assert(peer_info.count(*p));
const pg_info_t& pi = peer_info[*p];
if (pi.last_backfill == hobject_t() ||
- pi.last_backfill.hash == info.pgid.ps()) {
+ pi.last_backfill.get_hash() == info.pgid.ps()) {
dout(10) << __func__ << " backfill target osd." << *p
<< " last_backfill has not progressed past pgid ps"
<< dendl;
// choose random starting position
agent_state->position = hobject_t();
agent_state->position.pool = info.pgid.pool();
- agent_state->position.hash = pool.info.get_random_pg_position(
+ agent_state->position.set_hash(pool.info.get_random_pg_position(
info.pgid.pgid,
- rand());
+ rand()));
agent_state->start = agent_state->position;
dout(10) << __func__ << " allocated new state, position "
for (map<hobject_t, item>::iterator i = missing.begin();
i != missing.end();
) {
- if ((i->first.hash & mask) == child_pgid.m_seed) {
+ if ((i->first.get_hash() & mask) == child_pgid.m_seed) {
omissing->add(i->first, i->second.need, i->second.have);
rm(i++);
} else {
for (map<hobject_t,object>::const_iterator p = objects.begin(); p != objects.end(); ++p) {
f->open_object_section("object");
f->dump_string("name", p->first.oid.name);
- f->dump_unsigned("hash", p->first.hash);
+ f->dump_unsigned("hash", p->first.get_hash());
f->dump_string("key", p->first.get_key());
f->dump_int("snapid", p->first.snap);
p->second.dump(f);
for (vector<ghobject_t>::iterator i = objects.begin();
i != objects.end();
++i) {
- ASSERT_EQ(!(i->hobj.hash & (1<<common_suffix_size)), 0u);
+ ASSERT_EQ(!(i->hobj.get_hash() & (1<<common_suffix_size)), 0u);
t.remove(cid, *i);
}
for (vector<ghobject_t>::iterator i = objects.begin();
i != objects.end();
++i) {
- ASSERT_EQ(i->hobj.hash & (1<<common_suffix_size), 0u);
+ ASSERT_EQ(i->hobj.get_hash() & (1<<common_suffix_size), 0u);
t.remove(tid, *i);
}
ObjectStore::Transaction t;
ghobject_t o;
if (i < 8) {
- o.hobj.hash = (i << 16) | 0xA1;
+ o.hobj.set_hash((i << 16) | 0xA1);
t.touch(cid, o);
}
- o.hobj.hash = (i << 16) | 0xB1;
+ o.hobj.set_hash((i << 16) | 0xB1);
t.touch(cid, o);
r = store->apply_transaction(t);
ASSERT_EQ(r, 0);
for (int i = 1; i < 8; ++i) {
ObjectStore::Transaction t;
ghobject_t o;
- o.hobj.hash = (i << 16) | 0xA1;
+ o.hobj.set_hash((i << 16) | 0xA1);
t.remove(cid, o);
r = store->apply_transaction(t);
ASSERT_EQ(r, 0);
for (int i = 1; i < 8; ++i) {
ObjectStore::Transaction t;
ghobject_t o;
- o.hobj.hash = (i << 16) | 0xA1;
+ o.hobj.set_hash((i << 16) | 0xA1);
bool exists = store->exists(cid, o);
ASSERT_EQ(exists, false);
}
{
ghobject_t o;
- o.hobj.hash = 0xA1;
+ o.hobj.set_hash(0xA1);
bool exists = store->exists(cid, o);
ASSERT_EQ(exists, true);
}
for (int i = 0; i < 360; ++i) {
ObjectStore::Transaction t;
ghobject_t o;
- o.hobj.hash = (i << 16) | 0xA1;
+ o.hobj.set_hash((i << 16) | 0xA1);
t.remove(cid, o);
- o.hobj.hash = (i << 16) | 0xB1;
+ o.hobj.set_hash((i << 16) | 0xB1);
t.remove(cid, o);
r = store->apply_transaction(t);
ASSERT_EQ(r, 0);
stringstream ss;
ss << "obj_" << id;
hoid.oid = ss.str();
- hoid.hash = id;
+ hoid.set_hash(id);
return hoid;
}
static eversion_t mk_evt(unsigned ep, unsigned v) {
eversion_t newhead;
hobject_t divergent;
- divergent.hash = 0x9;
+ divergent.set_hash(0x9);
{
pg_log_entry_t e;
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
log.tail = e.version;
log.log.push_back(e);
e.version = newhead = eversion_t(1, 4);
info.log_tail = log.tail = eversion_t(1, 1);
newhead = eversion_t(1, 3);
e.version = divergent_version = eversion_t(1, 5);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
divergent_object = e.soid;
e.op = pg_log_entry_t::DELETE;
e.prior_version = prior_version = eversion_t(0, 2);
list<hobject_t> remove_snap;
info.last_backfill = hobject_t();
- info.last_backfill.hash = 1;
- oe.soid.hash = 2;
+ info.last_backfill.set_hash(1);
+ oe.soid.set_hash(2);
EXPECT_FALSE(is_dirty());
EXPECT_TRUE(remove_snap.empty());
list<hobject_t> remove_snap;
info.log_tail = eversion_t(2,1);
- oe.soid.hash = 1;
+ oe.soid.set_hash(1);
oe.op = pg_log_entry_t::MODIFY;
oe.prior_version = eversion_t(1,1);
list<hobject_t> remove_snap;
info.log_tail = eversion_t(2,1);
- oe.soid.hash = 1;
+ oe.soid.set_hash(1);
oe.op = pg_log_entry_t::DELETE;
oe.prior_version = eversion_t(1,1);
list<hobject_t> remove_snap;
info.log_tail = eversion_t(10,1);
- oe.soid.hash = 1;
+ oe.soid.set_hash(1);
oe.op = pg_log_entry_t::MODIFY;
oe.prior_version = eversion_t();
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 4);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
log.tail = e.version;
log.log.push_back(e);
e.version = eversion_t(1, 5);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
log.log.push_back(e);
log.head = e.version;
log.index();
info.last_update = log.head;
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
olog.tail = e.version;
olog.log.push_back(e);
e.version = eversion_t(1, 5);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
olog.log.push_back(e);
olog.head = e.version;
}
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
log.tail = e.version;
log.log.push_back(e);
e.version = eversion_t(1, 2);
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
log.log.push_back(e);
e.version = eversion_t(1,3);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
divergent_object = e.soid;
e.op = pg_log_entry_t::DELETE;
log.log.push_back(e);
info.last_update = log.head;
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
olog.tail = e.version;
olog.log.push_back(e);
e.version = eversion_t(1, 2);
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
olog.log.push_back(e);
e.version = eversion_t(2, 3);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
e.op = pg_log_entry_t::MODIFY;
olog.log.push_back(e);
e.version = eversion_t(2, 4);
- e.soid.hash = 0x7;
+ e.soid.set_hash(0x7);
e.op = pg_log_entry_t::DELETE;
olog.log.push_back(e);
olog.head = e.version;
/* DELETE entries from olog that are appended to the hed of the
log are also added to remove_snap.
*/
- EXPECT_EQ(0x7U, remove_snap.front().hash);
+ EXPECT_EQ(0x7U, remove_snap.front().get_hash());
EXPECT_TRUE(t.empty());
EXPECT_EQ(log.head, info.last_update);
EXPECT_TRUE(info.purged_snaps.contains(purged_snap));
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
log.tail = e.version;
log.log.push_back(e);
e.version = eversion_t(1, 4);
- e.soid.hash = 0x7;
+ e.soid.set_hash(0x7);
log.log.push_back(e);
e.version = eversion_t(1, 5);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
log.log.push_back(e);
log.head = e.version;
log.index();
info.last_update = log.head;
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
olog.tail = e.version;
olog.log.push_back(e);
e.version = eversion_t(1, 4);
- e.soid.hash = 0x7;
+ e.soid.set_hash(0x7);
olog.log.push_back(e);
olog.head = e.version;
}
EXPECT_FALSE(missing.have_missing());
EXPECT_EQ(2U, log.log.size());
EXPECT_EQ(stat_version, info.stats.version);
- EXPECT_EQ(0x9U, remove_snap.front().hash);
+ EXPECT_EQ(0x9U, remove_snap.front().get_hash());
EXPECT_TRUE(t.empty());
EXPECT_TRUE(info.purged_snaps.empty());
EXPECT_TRUE(is_dirty());
log.tail = eversion_t();
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
log.log.push_back(e);
e.version = eversion_t(1, 2);
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
log.log.push_back(e);
log.head = e.version;
log.index();
olog.tail = eversion_t(2, 3);
e.version = eversion_t(2, 4);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
olog.log.push_back(e);
e.version = eversion_t(2, 5);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
olog.log.push_back(e);
olog.head = e.version;
}
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 2);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
log.tail = e.version;
log.log.push_back(e);
e.version = eversion_t(1, 3);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
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.hash = 0x3;
+ e.soid.set_hash(0x3);
olog.tail = e.version;
olog.log.push_back(e);
e.version = eversion_t(2, 3);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
e.op = pg_log_entry_t::DELETE;
olog.log.push_back(e);
olog.head = e.version;
{
e.soid = divergent_object;
- e.soid.hash = 0x1;
+ e.soid.set_hash(0x1);
e.version = eversion_t(1, 1);
log.tail = e.version;
log.log.push_back(e);
log.tail = e.version;
log.log.push_back(e);
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
e.version = eversion_t(1, 4);
log.log.push_back(e);
- e.soid.hash = 0x7;
+ e.soid.set_hash(0x7);
e.version = eversion_t(1, 5);
log.log.push_back(e);
- e.soid.hash = 0x8;
+ e.soid.set_hash(0x8);
e.version = eversion_t(1, 6);
log.log.push_back(e);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
e.op = pg_log_entry_t::DELETE;
e.version = eversion_t(2, 7);
log.log.push_back(e);
- e.soid.hash = 0xa;
+ e.soid.set_hash(0xa);
e.version = eversion_t(2, 8);
log.head = e.version;
log.log.push_back(e);
{
e.soid = divergent_object;
- e.soid.hash = 0x1;
+ e.soid.set_hash(0x1);
e.version = eversion_t(1, 1);
olog.tail = e.version;
olog.log.push_back(e);
olog.log.push_back(e);
e.prior_version = eversion_t(0, 0);
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
e.version = eversion_t(1, 4);
olog.log.push_back(e);
- e.soid.hash = 0x7;
+ e.soid.set_hash(0x7);
e.version = eversion_t(1, 5);
olog.log.push_back(e);
- e.soid.hash = 0x8;
+ e.soid.set_hash(0x8);
e.version = eversion_t(1, 6);
olog.log.push_back(e);
- e.soid.hash = 0x9; // should not be added to missing, create
+ e.soid.set_hash(0x9); // should not be added to missing, create
e.op = pg_log_entry_t::MODIFY;
e.version = eversion_t(1, 7);
olog.log.push_back(e);
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
log.tail = e.version;
log.log.push_back(e);
e.version = last_update;
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
log.log.push_back(e);
e.version = eversion_t(1,3);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
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.hash = 0x5;
+ e.soid.set_hash(0x5);
olog.tail = e.version;
olog.log.push_back(e);
e.version = last_update;
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
olog.log.push_back(e);
e.version = eversion_t(2, 3);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
e.op = pg_log_entry_t::DELETE;
olog.log.push_back(e);
olog.head = e.version;
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 1);
- e.soid.hash = 0x5;
+ e.soid.set_hash(0x5);
log.tail = e.version;
log.log.push_back(e);
e.version = last_update;
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
log.log.push_back(e);
e.version = eversion_t(1, 3);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
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.hash = 0x5;
+ e.soid.set_hash(0x5);
olog.tail = e.version;
olog.log.push_back(e);
e.version = last_update;
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
olog.log.push_back(e);
e.version = eversion_t(2, 3);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
divergent_object = e.soid;
omissing.add(divergent_object, e.version, eversion_t());
e.op = pg_log_entry_t::MODIFY;
e.mod_desc.mark_unrollbackable();
e.version = eversion_t(1, 1);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
log.tail = e.version;
log.log.push_back(e);
e.version = last_update;
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
log.log.push_back(e);
e.version = new_version;
e.prior_version = eversion_t(1, 1);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
e.op = pg_log_entry_t::DELETE;
log.log.push_back(e);
log.head = e.version;
e.op = pg_log_entry_t::MODIFY;
e.version = eversion_t(1, 1);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
olog.tail = e.version;
olog.log.push_back(e);
e.version = last_update;
- e.soid.hash = 0x3;
+ e.soid.set_hash(0x3);
olog.log.push_back(e);
e.version = divergent_version;
e.prior_version = eversion_t(1, 1);
- e.soid.hash = 0x9;
+ e.soid.set_hash(0x9);
divergent_object = e.soid;
omissing.add(divergent_object, e.version, eversion_t());
e.op = pg_log_entry_t::MODIFY;