key.append(id);
}
-static int log_index_operation(cls_method_context_t hctx, string& obj, RGWModifyOp op, rgw_bucket_entry_ver& ver, RGWPendingState state, uint64_t index_ver)
+static int log_index_operation(cls_method_context_t hctx, string& obj, RGWModifyOp op,
+ string& tag, utime_t& timestamp,
+ rgw_bucket_entry_ver& ver, RGWPendingState state, uint64_t index_ver)
{
bufferlist bl;
struct rgw_bi_log_entry entry;
entry.object = obj;
- entry.timestamp = ceph_clock_now(g_ceph_context);
+ entry.timestamp = timestamp;
entry.op = op;
entry.ver = ver;
entry.state = state;
entry.index_ver = index_ver;
+ entry.tag = tag;
string key;
bi_log_index_key(hctx, key, entry.id, index_ver);
return -EINVAL;
}
- rc = log_index_operation(hctx, op.name, op.op, entry.ver, info.state, header.ver);
+ rc = log_index_operation(hctx, op.name, op.op, op.tag, entry.meta.mtime, entry.ver, info.state, header.ver);
if (rc < 0)
return rc;
bufferlist op_bl;
if (cancel) {
- rc = log_index_operation(hctx, op.name, op.op, entry.ver, CLS_RGW_STATE_COMPLETE, header.ver);
+ rc = log_index_operation(hctx, op.name, op.op, op.tag, entry.meta.mtime, entry.ver, CLS_RGW_STATE_COMPLETE, header.ver);
if (rc < 0)
return rc;
unaccount_entry(header, entry);
}
+ entry.ver = op.ver;
switch ((int)op.op) {
case CLS_RGW_OP_DEL:
if (ondisk) {
struct rgw_bucket_category_stats& stats = header.stats[meta.category];
entry.meta = meta;
entry.name = op.name;
- entry.ver = op.ver;
entry.exists = true;
stats.num_entries++;
stats.total_size += meta.size;
break;
}
- rc = log_index_operation(hctx, op.name, op.op, entry.ver, CLS_RGW_STATE_COMPLETE, header.ver);
+ rc = log_index_operation(hctx, op.name, op.op, op.tag, entry.meta.mtime, entry.ver, CLS_RGW_STATE_COMPLETE, header.ver);
if (rc < 0)
return rc;
CLS_LOG(0, "rgw_bucket_complete_op(): entry.name=%s entry.meta.category=%d\n", remove_entry.name.c_str(), remove_entry.meta.category);
unaccount_entry(header, remove_entry);
- rc = log_index_operation(hctx, op.name, CLS_RGW_OP_DEL, remove_entry.ver, CLS_RGW_STATE_COMPLETE, header.ver);
+ rc = log_index_operation(hctx, op.name, CLS_RGW_OP_DEL, op.tag, remove_entry.meta.mtime,
+ remove_entry.ver, CLS_RGW_STATE_COMPLETE, header.ver);
if (rc < 0)
continue;
}
void rgw_bucket_entry_ver::dump(Formatter *f) const
{
- f->dump_unsigned("pool", pool);
+ f->dump_int("pool", pool);
f->dump_unsigned("epoch", epoch);
}
void rgw_bi_log_entry::dump(Formatter *f) const
{
- f->dump_string("id", id);
- f->dump_string("object", object);
-
- f->dump_int("index_ver", index_ver);
- f->dump_stream("timestamp") << timestamp;
- f->open_object_section("ver");
- ver.dump(f);
- f->close_section();
-
+ f->dump_string("op_id", id);
+ f->dump_string("op_tag", tag);
switch (op) {
case CLS_RGW_OP_ADD:
f->dump_string("op", "write");
break;
}
+ f->dump_string("object", object);
+
switch (state) {
case CLS_RGW_STATE_PENDING_MODIFY:
f->dump_string("state", "pending");
f->dump_string("state", "invalid");
break;
}
+
+ f->dump_int("index_ver", index_ver);
+ f->dump_stream("timestamp") << timestamp;
+ f->open_object_section("ver");
+ ver.dump(f);
+ f->close_section();
}
void rgw_bucket_category_stats::generate_test_instances(list<rgw_bucket_category_stats*>& o)