]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: mix preferred osd into placement seed
authorSage Weil <sage@newdream.net>
Mon, 19 Oct 2009 18:40:27 +0000 (11:40 -0700)
committerSage Weil <sage@newdream.net>
Mon, 19 Oct 2009 18:40:27 +0000 (11:40 -0700)
This avoids getting the same peer for all 0.0p* pgs, for
example.

Rev osdc protocol.

src/include/ceph_fs.h
src/osd/OSDMap.h

index 9b16e2e06ea6cdcf1eadbf4beefb5e16d6d4fd9a..f8f27e28a6bf6e9658e7215214b1da6ca7b43923 100644 (file)
@@ -38,7 +38,7 @@
 #define CEPH_OSD_PROTOCOL     7 /* cluster internal */
 #define CEPH_MDS_PROTOCOL     9 /* cluster internal */
 #define CEPH_MON_PROTOCOL     5 /* cluster internal */
-#define CEPH_OSDC_PROTOCOL   20 /* server/client */
+#define CEPH_OSDC_PROTOCOL   21 /* server/client */
 #define CEPH_MDSC_PROTOCOL   29 /* server/client */
 #define CEPH_MONC_PROTOCOL   15 /* server/client */
 
index a203acdb808fb194fde74caab54adb137bb30f42..be43c269f177c11c2d2646414096df5f6963d469 100644 (file)
@@ -639,6 +639,11 @@ private:
     // calculate ps (placement seed)
     static hash<object_t> H;
     ps_t ps = H(oid);
+
+    // mix in preferred osd, so we don't get the same peers for all of the placement pgs (e.g. 0.0p*)
+    if (preferred >= 0)
+      ps += preferred;
+
     /*
     ps_t ps;  // NOTE: keep full precision, here!
     switch (g_conf.osd_object_layout) {