]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/osd/osd_op_util.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / osd / osd_op_util.cc
index 626779843c76964474b18ec0f211f1c1ded57b9c..a33e2f110d0d4854d3c14e96ac34ac18ff0ca887 100644 (file)
@@ -6,6 +6,12 @@
 #include "osd/ClassHandler.h"
 #include "messages/MOSDOp.h"
 
+using std::ostream;
+using std::string;
+using std::vector;
+
+using ceph::bufferlist;
+
 bool OpInfo::check_rmw(int flag) const {
   ceph_assert(rmw_flags != 0);
   return rmw_flags & flag;
@@ -67,8 +73,6 @@ int OpInfo::set_from_op(
   const MOSDOp *m,
   const OSDMap &osdmap)
 {
-  vector<OSDOp>::const_iterator iter;
-
   // client flags have no bearing on whether an op is a read, write, etc.
   clear();
 
@@ -78,9 +82,18 @@ int OpInfo::set_from_op(
   if (m->has_flag(CEPH_OSD_FLAG_RETURNVEC)) {
     set_returnvec();
   }
+  return set_from_op(m->ops, m->get_pg(), osdmap);
+}
+
+int OpInfo::set_from_op(
+  const std::vector<OSDOp>& ops,
+  const pg_t& pg,
+  const OSDMap &osdmap)
+{
+  vector<OSDOp>::const_iterator iter;
 
   // set bits based on op codes, called methods.
-  for (iter = m->ops.begin(); iter != m->ops.end(); ++iter) {
+  for (iter = ops.begin(); iter != ops.end(); ++iter) {
     if ((iter->op.op == CEPH_OSD_OP_WATCH &&
         iter->op.watch.op == CEPH_OSD_WATCH_OP_PING)) {
       /* This a bit odd.  PING isn't actually a write.  It can't
@@ -110,7 +123,7 @@ int OpInfo::set_from_op(
       set_cache();
 
     // check for ec base pool
-    int64_t poolid = m->get_pg().pool();
+    int64_t poolid = pg.pool();
     const pg_pool_t *pool = osdmap.get_pg_pool(poolid);
     if (pool && pool->is_tier()) {
       const pg_pool_t *base_pool = osdmap.get_pg_pool(pool->tier_of);
@@ -180,7 +193,7 @@ int OpInfo::set_from_op(
         if (is_promote)
           set_promote();
         add_class(std::move(cname), std::move(mname), is_read, is_write,
-                      cls->whitelisted);
+                      cls->allowed);
        break;
       }
 
@@ -201,12 +214,12 @@ int OpInfo::set_from_op(
       // if we get a delete with FAILOK we can skip handle cache. without
       // FAILOK we still need to promote (or do something smarter) to
       // determine whether to return ENOENT or 0.
-      if (iter == m->ops.begin() &&
+      if (iter == ops.begin() &&
          iter->op.flags == CEPH_OSD_OP_FLAG_FAILOK) {
        set_skip_handle_cache();
       }
       // skip promotion when proxying a delete op
-      if (m->ops.size() == 1) {
+      if (ops.size() == 1) {
        set_skip_promote();
       }
       break;
@@ -215,7 +228,7 @@ int OpInfo::set_from_op(
     case CEPH_OSD_OP_CACHE_FLUSH:
     case CEPH_OSD_OP_CACHE_EVICT:
       // If try_flush/flush/evict is the only op, can skip handle cache.
-      if (m->ops.size() == 1) {
+      if (ops.size() == 1) {
        set_skip_handle_cache();
       }
       break;
@@ -225,7 +238,7 @@ int OpInfo::set_from_op(
     case CEPH_OSD_OP_SPARSE_READ:
     case CEPH_OSD_OP_CHECKSUM:
     case CEPH_OSD_OP_WRITEFULL:
-      if (m->ops.size() == 1 &&
+      if (ops.size() == 1 &&
           (iter->op.flags & CEPH_OSD_OP_FLAG_FADVISE_NOCACHE ||
            iter->op.flags & CEPH_OSD_OP_FLAG_FADVISE_DONTNEED)) {
         set_skip_promote();
@@ -252,6 +265,6 @@ int OpInfo::set_from_op(
 ostream& operator<<(ostream& out, const OpInfo::ClassInfo& i)
 {
   out << "class " << i.class_name << " method " << i.method_name
-      << " rd " << i.read << " wr " << i.write << " wl " << i.whitelisted;
+      << " rd " << i.read << " wr " << i.write << " allowed " << i.allowed;
   return out;
 }