]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: make rbd_read_from_replica_policy actually work 35438/head
authorIlya Dryomov <idryomov@gmail.com>
Sat, 30 May 2020 17:03:20 +0000 (19:03 +0200)
committerNathan Cutler <ncutler@suse.com>
Sat, 6 Jun 2020 08:24:53 +0000 (10:24 +0200)
Commit d92be8b5856d ("librbd: Improved support for balanced and
localized reads") introduced read_flags, but used low-level Objecter
flags (CEPH_OSD_FLAG_*).  This is wrong because librbd sits on top of
librados, not Objecter.  "balance" ends up being translated into
IGNORE_REDIRECT and "localize" being ignored.

Fixes: https://tracker.ceph.com/issues/45798
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit fc3c0c4dca2800140bd66100770403b1346cf738)

src/librbd/ImageCtx.cc
src/librbd/ImageCtx.h

index 4026fb934595af9651644dc871979d6ee0ec50dd..74bd121bad7df3b650ef189d57e7404e0cdc9d17 100644 (file)
@@ -807,9 +807,9 @@ public:
       read_flags = 0;
       auto read_policy = config.get_val<std::string>("rbd_read_from_replica_policy");
       if (read_policy == "balance") {
-        read_flags |= CEPH_OSD_FLAG_BALANCE_READS;
+        read_flags |= librados::OPERATION_BALANCE_READS;
       } else if (read_policy == "localize") {
-        read_flags |= CEPH_OSD_FLAG_LOCALIZE_READS;
+        read_flags |= librados::OPERATION_LOCALIZE_READS;
       }
     }
 
index 11f33b1d40c669ac7b0753da4ccb8284fef0099e..79908cf18dc43d72067187b9b1dde2e569f2859f 100644 (file)
@@ -136,7 +136,7 @@ namespace librbd {
     ceph::mutex async_ops_lock; // protects async_ops and async_requests
     ceph::mutex copyup_list_lock; // protects copyup_waiting_list
 
-    unsigned extra_read_flags;
+    unsigned extra_read_flags;  // librados::OPERATION_*
 
     bool old_format;
     uint8_t order;
@@ -208,7 +208,7 @@ namespace librbd {
     bool clone_copy_on_read;
     bool enable_alloc_hint;
     uint32_t alloc_hint_flags = 0U;
-    uint32_t read_flags = 0U;
+    uint32_t read_flags = 0U;  // librados::OPERATION_*
     uint32_t discard_granularity_bytes = 0;
     bool blkin_trace_all;
     uint64_t mirroring_replay_delay;