CEPH_OSD_FLAG_FULL_TRY = 0x800000, /* try op despite full flag */
CEPH_OSD_FLAG_FULL_FORCE = 0x1000000, /* force op despite full flag */
CEPH_OSD_FLAG_IGNORE_REDIRECT = 0x2000000, /* ignore redirection */
+ CEPH_OSD_FLAG_RETURNVEC = 0x4000000, /* allow overall result >= 0, and return >= 0 and buffer for each op in opvec */
};
enum {
LIBRADOS_OPERATION_FULL_FORCE = 128,
LIBRADOS_OPERATION_IGNORE_REDIRECT = 256,
LIBRADOS_OPERATION_ORDERSNAP = 512,
+ /* enable/allow >0 return values and payloads on write/update */
+ LIBRADOS_OPERATION_RETURNVEC = 1024,
};
/** @} */
// marked full; ops will either succeed (e.g., delete) or return
// EDQUOT or ENOSPC
OPERATION_FULL_TRY = LIBRADOS_OPERATION_FULL_TRY,
- //mainly for delete
+ // mainly for delete
OPERATION_FULL_FORCE = LIBRADOS_OPERATION_FULL_FORCE,
OPERATION_IGNORE_REDIRECT = LIBRADOS_OPERATION_IGNORE_REDIRECT,
OPERATION_ORDERSNAP = LIBRADOS_OPERATION_ORDERSNAP,
+ // enable/allow return value and per-op return code/buffers
+ OPERATION_RETURNVEC = LIBRADOS_OPERATION_RETURNVEC,
};
/*
op_flags |= CEPH_OSD_FLAG_IGNORE_REDIRECT;
if (flags & librados::OPERATION_ORDERSNAP)
op_flags |= CEPH_OSD_FLAG_ORDERSNAP;
+ if (flags & librados::OPERATION_RETURNVEC)
+ op_flags |= CEPH_OSD_FLAG_RETURNVEC;
return op_flags;
}
if (m->has_flag(CEPH_OSD_FLAG_RWORDERED)) {
op->set_force_rwordered();
}
+ if (m->has_flag(CEPH_OSD_FLAG_RETURNVEC)) {
+ op->set_returnvec();
+ }
// set bits based on op codes, called methods.
for (iter = m->ops.begin(); iter != m->ops.end(); ++iter) {
bool OpRequest::need_skip_promote() {
return check_rmw(CEPH_OSD_RMW_FLAG_SKIP_PROMOTE);
}
+bool OpRequest::allows_returnvec() const {
+ return check_rmw(CEPH_OSD_RMW_FLAG_RETURNVEC);
+}
void OpRequest::set_rmw_flags(int flags) {
#ifdef WITH_LTTNG
void OpRequest::set_skip_handle_cache() { set_rmw_flags(CEPH_OSD_RMW_FLAG_SKIP_HANDLE_CACHE); }
void OpRequest::set_skip_promote() { set_rmw_flags(CEPH_OSD_RMW_FLAG_SKIP_PROMOTE); }
void OpRequest::set_force_rwordered() { set_rmw_flags(CEPH_OSD_RMW_FLAG_RWORDERED); }
+void OpRequest::set_returnvec() { set_rmw_flags(CEPH_OSD_RMW_FLAG_RETURNVEC); }
void OpRequest::mark_flag_point(uint8_t flag, const char *s) {
#ifdef WITH_LTTNG
bool need_promote();
bool need_skip_handle_cache();
bool need_skip_promote();
+ bool allows_returnvec() const;
void set_read();
void set_write();
void set_cache();
void set_skip_handle_cache();
void set_skip_promote();
void set_force_rwordered();
+ void set_returnvec();
struct ClassInfo {
ClassInfo(std::string&& class_name, std::string&& method_name,
case CEPH_OSD_FLAG_FULL_TRY: return "full_try";
case CEPH_OSD_FLAG_FULL_FORCE: return "full_force";
case CEPH_OSD_FLAG_IGNORE_REDIRECT: return "ignore_redirect";
+ case CEPH_OSD_FLAG_RETURNVEC: return "returnvec";
default: return "???";
}
}
CEPH_OSD_RMW_FLAG_SKIP_HANDLE_CACHE = (1 << 8),
CEPH_OSD_RMW_FLAG_SKIP_PROMOTE = (1 << 9),
CEPH_OSD_RMW_FLAG_RWORDERED = (1 << 10),
+ CEPH_OSD_RMW_FLAG_RETURNVEC = (1 << 11),
};