// are we actually going to perform this put, or is it too old?
if (!check_versions(old_bci.info.objv_tracker.read_version, orig_mtime,
objv_tracker.write_version, mtime, sync_type)) {
+ objv_tracker.read_version = old_bci.info.objv_tracker.read_version;
return STATUS_NO_APPLY;
}
}
int RGWMetadataManager::put(string& metadata_key, bufferlist& bl,
- RGWMetadataHandler::sync_type_t sync_type)
+ RGWMetadataHandler::sync_type_t sync_type,
+ obj_version *existing_version)
{
RGWMetadataHandler *handler;
string entry;
return -EINVAL;
}
- return handler->put(store, entry, objv_tracker, mtime, jo, sync_type);
+ ret = handler->put(store, entry, objv_tracker, mtime, jo, sync_type);
+ if (existing_version) {
+ *existing_version = objv_tracker.read_version;
+ }
+ return ret;
}
int RGWMetadataManager::remove(string& metadata_key)
RGWObjVersionTracker *objv_tracker);
int get(string& metadata_key, Formatter *f);
int put(string& metadata_key, bufferlist& bl,
- RGWMetadataHandler::sync_type_t sync_mode);
+ RGWMetadataHandler::sync_type_t sync_mode,
+ obj_version *existing_version = NULL);
int remove(string& metadata_key);
int list_keys_init(string& section, void **phandle);
}
}
- http_ret = store->meta_mgr->put(metadata_key, bl, sync_type);
+ http_ret = store->meta_mgr->put(metadata_key, bl, sync_type, &ondisk_version);
if (http_ret < 0) {
dout(5) << "ERROR: can't put key: " << cpp_strerror(http_ret) << dendl;
return;
http_return_code = STATUS_NO_CONTENT;
set_req_state_err(s, http_return_code);
dump_errno(s);
+ stringstream ver_stream;
+ ver_stream << "ver:" << ondisk_version.ver
+ <<",tag:" << ondisk_version.tag;
dump_pair(s, "RGWX_UPDATE_STATUS", update_status.c_str());
+ dump_pair(s, "RGWX_UPDATE_VERSION", ver_stream.str().c_str());
end_header(s);
}
class RGWOp_Metadata_Put : public RGWRESTOp {
int get_data(bufferlist& bl);
string update_status;
+ obj_version ondisk_version;
public:
RGWOp_Metadata_Put() {}
~RGWOp_Metadata_Put() {}