uint64_t ver = op.watch.ver;
if (!ver)
result = -EINVAL;
- else if (ver < oi.user_version.version)
+ else if (ver < oi.user_version)
result = -ERANGE;
- else if (ver > oi.user_version.version)
+ else if (ver > oi.user_version)
result = -EOVERFLOW;
break;
}
uint64_t ver = op.watch.ver;
if (!ver)
result = -EINVAL;
- else if (ver < src_obc->obs.oi.user_version.version)
+ else if (ver < src_obc->obs.oi.user_version)
result = -ERANGE;
- else if (ver > src_obc->obs.oi.user_version.version)
+ else if (ver > src_obc->obs.oi.user_version)
result = -EOVERFLOW;
break;
}
dout(10) << "watch: ctx->obc=" << (void *)obc << " cookie=" << cookie
<< " oi.version=" << oi.version.version << " ctx->at_version=" << ctx->at_version << dendl;
- dout(10) << "watch: oi.user_version=" << oi.user_version.version << dendl;
+ dout(10) << "watch: oi.user_version=" << oi.user_version<< dendl;
dout(10) << "watch: peer_addr="
<< ctx->op->request->get_connection()->get_peer_addr() << dendl;
p->timeout,
p->cookie,
osd->get_next_id(get_osdmap()->get_epoch()),
- ctx->obc->obs.oi.user_version.version,
+ ctx->obc->obs.oi.user_version,
osd));
for (map<pair<uint64_t, entity_name_t>, WatchRef>::iterator i =
ctx->obc->watchers.begin();
// read-op? done?
if (ctx->op_t.empty() && !ctx->modify) {
- ctx->reply_user_version = ctx->obs->oi.user_version.version;
+ ctx->reply_user_version = ctx->obs->oi.user_version;
unstable_stats.add(ctx->delta_stats, ctx->obc->obs.oi.category);
return result;
}
// finish and log the op.
if (ctx->user_modify) {
/* update the user_version for any modify ops, except for the watch op */
- ctx->new_obs.oi.user_version = ctx->at_version;
+ ctx->new_obs.oi.user_version = ctx->at_version.version;
}
- ctx->reply_user_version = ctx->new_obs.oi.user_version.version;
+ ctx->reply_user_version = ctx->new_obs.oi.user_version;
ctx->bytes_written = ctx->op_t.get_encoded_bytes();
if (ctx->new_obs.exists) {
::encode(truncate_size, bl);
::encode(lost, bl);
::encode(old_watchers, bl);
- ::encode(user_version, bl);
+ /* shenanigans to avoid breaking backwards compatibility in the disk format.
+ * When we can, switch this out for simply putting the version_t on disk. */
+ eversion_t user_eversion(0, user_version);
+ ::encode(user_eversion, bl);
::encode(uses_tmap, bl);
::encode(watchers, bl);
ENCODE_FINISH(bl);
lost = false;
if (struct_v >= 4) {
::decode(old_watchers, bl);
- ::decode(user_version, bl);
+ eversion_t user_eversion;
+ ::decode(user_eversion, bl);
+ user_version = user_eversion.version;
}
if (struct_v >= 9)
::decode(uses_tmap, bl);
string category;
eversion_t version, prior_version;
- eversion_t user_version;
+ version_t user_version;
osd_reqid_t last_reqid;
uint64_t size;
static void generate_test_instances(list<object_info_t*>& o);
explicit object_info_t()
- : size(0), lost(false),
+ : user_version(0), size(0), lost(false),
truncate_seq(0), truncate_size(0), uses_tmap(false)
{}
object_info_t(const hobject_t& s)
- : soid(s), size(0),
+ : soid(s), user_version(0), size(0),
lost(false), truncate_seq(0), truncate_size(0), uses_tmap(false) {}
object_info_t(bufferlist& bl) {