ceph: include preferred osd in placement seed
authorSage Weil <sage@newdream.net>
Mon, 19 Oct 2009 18:41:51 +0000 (11:41 -0700)
committerSage Weil <sage@newdream.net>
Mon, 19 Oct 2009 18:42:41 +0000 (11:42 -0700)
Mix the preferred osd (if any) into the placement seed that is fed into
the CRUSH object placement calculation.  This prevents all the placement
pgs from peering with the same osds.

Rev the osd client protocol with this change.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/ceph_fs.h
fs/ceph/osdmap.c

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 6f0aeff4185a97762c3d2149c8a84d7435de5d26..72d75a239ac234db244beaecefece23a89a31b89 100644 (file)
@@ -791,6 +791,8 @@ int ceph_calc_object_layout(struct ceph_object_layout *ol,
        pgid.pg64 = 0;   /* start with it zeroed out */
        pgid.pg.ps = ceph_full_name_hash(oid, strlen(oid));
        pgid.pg.preferred = preferred;
+       if (preferred >= 0)
+               pgid.pg.ps += preferred;
        pgid.pg.pool = le32_to_cpu(fl->fl_pg_pool);
        if (preferred >= 0)
                dout("calc_object_layout '%s' pgid %d.%xp%d (%llx)\n", oid,