]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Add whether shard is primary in list-inconsistent-obj
authorDavid Zafman <dzafman@redhat.com>
Thu, 6 Jul 2017 02:14:36 +0000 (19:14 -0700)
committerAbhishek Lekshmanan <abhishek@suse.com>
Wed, 23 Aug 2017 13:44:27 +0000 (15:44 +0200)
Add new field in the client interface
Update test case

Fixes: http://tracker.ceph.com/issues/18836
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit 8ad4b291131058bbdb4267f4cad35a40fb905bb4)

doc/rados/command/list-inconsistent-obj.json
qa/standalone/scrub/osd-scrub-repair.sh
src/common/scrub_types.cc
src/common/scrub_types.h
src/include/rados/rados_types.hpp
src/osd/PGBackend.cc
src/tools/rados/rados.cc

index b9ee1793ff2b759879940c0825cd15553167b615..a7c17ace9be540784215d3e0a1a395e6ee2a8b01 100644 (file)
                 "osd": {
                   "type": "integer"
                 },
+                "primary": {
+                  "type": "boolean"
+                },
                 "size": {
                   "type": "integer"
                 },
               },
               "required": [
                 "osd",
+                "primary",
                 "errors"
               ]
             }
index 28db9476b1b83e08437f53a09d6b67a98c5b5358..74b9b8a29202d1013cbc0934a73fa4684792f005 100755 (executable)
@@ -630,14 +630,16 @@ function TEST_corrupt_scrub_replicated() {
         {
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 9,
           "errors": [
             "size_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:ce3f1d6a:::ROBJ1:head(47'54 osd.0.0:53 dirty|omap|data_digest|omap_digest s 7 uv 3 dd 2ddbf8f5 od f5fba2c6 alloc_hint [0 0 0])",
@@ -661,12 +663,14 @@ function TEST_corrupt_scrub_replicated() {
           "errors": [
             "stat_error"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 7,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:bc819597:::ROBJ12:head(47'52 osd.0.0:51 dirty|omap|data_digest|omap_digest s 7 uv 36 dd 2ddbf8f5 od 67f306a alloc_hint [0 0 0])",
@@ -688,12 +692,14 @@ function TEST_corrupt_scrub_replicated() {
           "errors": [
             "stat_error"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 7,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:d60617f9:::ROBJ13:head(47'55 osd.0.0:54 dirty|omap|data_digest|omap_digest s 7 uv 39 dd 2ddbf8f5 od 6441854d alloc_hint [0 0 0])",
@@ -716,14 +722,16 @@ function TEST_corrupt_scrub_replicated() {
           "errors": [
             "oi_attr_corrupted"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 7,
           "errors": [
             "oi_attr_missing"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "union_shard_errors": [
@@ -756,7 +764,8 @@ function TEST_corrupt_scrub_replicated() {
           ],
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "attrs": [
@@ -770,7 +779,8 @@ function TEST_corrupt_scrub_replicated() {
           "errors": [
             "oi_attr_missing"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:30259878:::ROBJ15:head(47'46 osd.0.0:45 dirty|omap|data_digest|omap_digest s 7 uv 45 dd 2ddbf8f5 od 2d2a4d6e alloc_hint [0 0 0])",
@@ -793,13 +803,15 @@ function TEST_corrupt_scrub_replicated() {
         {
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "errors": [
             "missing"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:f2a5b2a4:::ROBJ3:head(47'57 osd.0.0:56 dirty|omap|data_digest|omap_digest s 7 uv 9 dd 2ddbf8f5 od b35dfd alloc_hint [0 0 0])",
@@ -842,7 +854,8 @@ function TEST_corrupt_scrub_replicated() {
           ],
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "attrs": [
@@ -869,7 +882,8 @@ function TEST_corrupt_scrub_replicated() {
           ],
           "size": 7,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:86586531:::ROBJ8:head(82'62 client.4351.0:1 dirty|omap|data_digest|omap_digest s 7 uv 62 dd 2ddbf8f5 od d6be81dc alloc_hint [0 0 0])",
@@ -904,7 +918,8 @@ function TEST_corrupt_scrub_replicated() {
           "object_info": "3:ffdb2004:::ROBJ9:head(102'63 client.4433.0:1 dirty|omap|data_digest|omap_digest s 1 uv 63 dd 2b63260d od 2eecc539 alloc_hint [0 0 0])",
           "size": 1,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "attrs": [
@@ -922,7 +937,8 @@ function TEST_corrupt_scrub_replicated() {
           "object_info": "3:ffdb2004:::ROBJ9:head(47'60 osd.0.0:59 dirty|omap|data_digest|omap_digest s 7 uv 27 dd 2ddbf8f5 od 2eecc539 alloc_hint [0 0 0])",
           "size": 1,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:ffdb2004:::ROBJ9:head(102'63 client.4433.0:1 dirty|omap|data_digest|omap_digest s 1 uv 63 dd 2b63260d od 2eecc539 alloc_hint [0 0 0])",
@@ -1003,7 +1019,8 @@ EOF
           "omap_digest": "0xf5fba2c6",
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2d4a11c2",
@@ -1013,7 +1030,8 @@ EOF
             "data_digest_mismatch_oi",
             "size_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:ce3f1d6a:::ROBJ1:head(47'54 osd.0.0:53 dirty|omap|data_digest|omap_digest s 7 uv 3 dd 2ddbf8f5 od f5fba2c6 alloc_hint [0 0 0])",
@@ -1042,7 +1060,8 @@ EOF
           "errors": [
             "omap_digest_mismatch_oi"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2ddbf8f5",
@@ -1051,7 +1070,8 @@ EOF
           "errors": [
             "omap_digest_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:b1f19cbd:::ROBJ10:head(47'51 osd.0.0:50 dirty|omap|data_digest|omap_digest s 7 uv 30 dd 2ddbf8f5 od c2025a24 alloc_hint [0 0 0])",
@@ -1074,14 +1094,16 @@ EOF
           "omap_digest": "0xa03cef03",
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 7,
           "errors": [
             "read_error"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:87abbf36:::ROBJ11:head(47'48 osd.0.0:47 dirty|omap|data_digest|omap_digest s 7 uv 33 dd 2ddbf8f5 od a03cef03 alloc_hint [0 0 0])",
@@ -1103,14 +1125,16 @@ EOF
           "errors": [
             "stat_error"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2ddbf8f5",
           "omap_digest": "0x067f306a",
           "size": 7,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:bc819597:::ROBJ12:head(47'52 osd.0.0:51 dirty|omap|data_digest|omap_digest s 7 uv 36 dd 2ddbf8f5 od 67f306a alloc_hint [0 0 0])",
@@ -1132,14 +1156,16 @@ EOF
           "errors": [
             "stat_error"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 7,
           "errors": [
             "read_error"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "union_shard_errors": [
@@ -1164,7 +1190,8 @@ EOF
           "errors": [
             "oi_attr_corrupted"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2ddbf8f5",
@@ -1173,7 +1200,8 @@ EOF
           "errors": [
             "oi_attr_missing"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "union_shard_errors": [
@@ -1208,7 +1236,8 @@ EOF
           "omap_digest": "0x2d2a4d6e",
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "attrs": [
@@ -1224,7 +1253,8 @@ EOF
           "errors": [
             "oi_attr_missing"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:30259878:::ROBJ15:head(47'46 osd.0.0:45 dirty|omap|data_digest|omap_digest s 7 uv 45 dd 2ddbf8f5 od 2d2a4d6e alloc_hint [0 0 0])",
@@ -1251,14 +1281,16 @@ EOF
           "errors": [
             "data_digest_mismatch_oi"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2ddbf8f5",
           "omap_digest": "0xf8e11918",
           "size": 7,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:e97ce31e:::ROBJ2:head(47'56 osd.0.0:55 dirty|omap|data_digest|omap_digest s 7 uv 6 dd 2ddbf8f5 od f8e11918 alloc_hint [0 0 0])",
@@ -1283,13 +1315,15 @@ EOF
           "omap_digest": "0x00b35dfd",
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "errors": [
             "missing"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:f2a5b2a4:::ROBJ3:head(47'57 osd.0.0:56 dirty|omap|data_digest|omap_digest s 7 uv 9 dd 2ddbf8f5 od b35dfd alloc_hint [0 0 0])",
@@ -1314,14 +1348,16 @@ EOF
           "errors": [
             "omap_digest_mismatch_oi"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2ddbf8f5",
           "omap_digest": "0xe2d46ea4",
           "size": 7,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:f4981d31:::ROBJ4:head(47'58 osd.0.0:57 dirty|omap|data_digest|omap_digest s 7 uv 12 dd 2ddbf8f5 od e2d46ea4 alloc_hint [0 0 0])",
@@ -1346,7 +1382,8 @@ EOF
           "omap_digest": "0x1a862a41",
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2ddbf8f5",
@@ -1355,7 +1392,8 @@ EOF
           "errors": [
             "omap_digest_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:f4bfd4d1:::ROBJ5:head(47'59 osd.0.0:58 dirty|omap|data_digest|omap_digest s 7 uv 15 dd 2ddbf8f5 od 1a862a41 alloc_hint [0 0 0])",
@@ -1382,14 +1420,16 @@ EOF
           "errors": [
             "omap_digest_mismatch_oi"
           ],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2ddbf8f5",
           "omap_digest": "0x179c919f",
           "size": 7,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:a53c12e8:::ROBJ6:head(47'50 osd.0.0:49 dirty|omap|data_digest|omap_digest s 7 uv 18 dd 2ddbf8f5 od 179c919f alloc_hint [0 0 0])",
@@ -1414,7 +1454,8 @@ EOF
           "omap_digest": "0xefced57a",
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x2ddbf8f5",
@@ -1423,7 +1464,8 @@ EOF
           "errors": [
             "omap_digest_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:8b55fa4b:::ROBJ7:head(47'49 osd.0.0:48 dirty|omap|data_digest|omap_digest s 7 uv 21 dd 2ddbf8f5 od efced57a alloc_hint [0 0 0])",
@@ -1470,7 +1512,8 @@ EOF
           "omap_digest": "0xd6be81dc",
           "size": 7,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "attrs": [
@@ -1499,7 +1542,8 @@ EOF
           "omap_digest": "0xd6be81dc",
           "size": 7,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:86586531:::ROBJ8:head(82'62 client.4351.0:1 dirty|omap|data_digest|omap_digest s 7 uv 62 dd 2ddbf8f5 od d6be81dc alloc_hint [0 0 0])",
@@ -1536,7 +1580,8 @@ EOF
           "omap_digest": "0x2eecc539",
           "size": 3,
           "errors": [],
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "attrs": [
@@ -1556,7 +1601,8 @@ EOF
           "omap_digest": "0x2eecc539",
           "size": 3,
           "errors": [],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         }
       ],
       "selected_object_info": "3:ffdb2004:::ROBJ9:head(122'64 client.4532.0:1 dirty|omap|data_digest|omap_digest s 3 uv 64 dd 1f26fb26 od 2eecc539 alloc_hint [0 0 0])",
@@ -1690,7 +1736,8 @@ function corrupt_scrub_erasure() {
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 9,
@@ -1698,13 +1745,15 @@ function corrupt_scrub_erasure() {
           "errors": [
             "size_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "size": 2048,
           "shard": 1,
           "errors": [],
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:9175b684:::EOBJ1:head(21'1 client.4179.0:1 dirty|data_digest|omap_digest s 7 uv 1 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -1728,20 +1777,23 @@ function corrupt_scrub_erasure() {
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "shard": 0,
           "errors": [
             "missing"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "size": 2048,
           "shard": 1,
           "errors": [],
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:b197b25d:::EOBJ3:head(37'3 client.4251.0:1 dirty|data_digest|omap_digest s 7 uv 3 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -1790,10 +1842,12 @@ function corrupt_scrub_erasure() {
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "osd": 1,
+          "primary": true,
           "shard": 0,
           "errors": [],
           "size": 2048,
@@ -1827,6 +1881,7 @@ function corrupt_scrub_erasure() {
         },
         {
           "osd": 2,
+          "primary": false,
           "shard": 1,
           "errors": [],
           "size": 2048,
@@ -1879,7 +1934,8 @@ function corrupt_scrub_erasure() {
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 4096,
@@ -1887,13 +1943,15 @@ function corrupt_scrub_erasure() {
           "errors": [
             "size_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "size": 2048,
           "shard": 1,
           "errors": [],
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:8549dfb5:::EOBJ5:head(65'7 client.4441.0:1 dirty|data_digest|omap_digest s 7 uv 7 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -1953,7 +2011,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 9,
@@ -1962,7 +2021,8 @@ EOF
             "read_error",
             "size_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "data_digest": "0x00000000",
@@ -1970,7 +2030,8 @@ EOF
           "size": 2048,
           "shard": 1,
           "errors": [],
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:9175b684:::EOBJ1:head(27'1 client.4155.0:1 dirty|data_digest|omap_digest s 7 uv 1 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -1997,14 +2058,16 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "shard": 0,
           "errors": [
             "missing"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "data_digest": "0x00000000",
@@ -2012,7 +2075,8 @@ EOF
           "size": 2048,
           "shard": 1,
           "errors": [],
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:b197b25d:::EOBJ3:head(41'3 client.4199.0:1 dirty|data_digest|omap_digest s 7 uv 3 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -2063,7 +2127,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "attrs": [
@@ -2098,7 +2163,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 0,
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "attrs": [
@@ -2133,7 +2199,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 1,
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:5e723e06:::EOBJ4:head(48'6 client.4223.0:1 dirty|data_digest|omap_digest s 7 uv 6 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -2158,7 +2225,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x00000000",
@@ -2168,7 +2236,8 @@ EOF
             "size_mismatch_oi"
           ],
           "shard": 0,
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "data_digest": "0x00000000",
@@ -2176,7 +2245,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 1,
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:8549dfb5:::EOBJ5:head(65'7 client.4288.0:1 dirty|data_digest|omap_digest s 7 uv 7 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -2212,7 +2282,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 9,
@@ -2221,7 +2292,8 @@ EOF
             "read_error",
             "size_mismatch_oi"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "data_digest": "0x04cfa72f",
@@ -2229,7 +2301,8 @@ EOF
           "size": 2048,
           "shard": 1,
           "errors": [],
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:9175b684:::EOBJ1:head(21'1 client.4179.0:1 dirty|data_digest|omap_digest s 7 uv 1 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -2256,7 +2329,8 @@ EOF
             "ec_hash_error"
           ],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "data_digest": "0x04cfa72f",
@@ -2264,7 +2338,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 0,
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "data_digest": "0x04cfa72f",
@@ -2272,7 +2347,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 1,
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:9babd184:::EOBJ2:head(29'2 client.4217.0:1 dirty|data_digest|omap_digest s 7 uv 2 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -2296,10 +2372,12 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "osd": 1,
+          "primary": true,
           "shard": 0,
           "errors": [
             "missing"
@@ -2311,7 +2389,8 @@ EOF
           "size": 2048,
           "shard": 1,
           "errors": [],
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:b197b25d:::EOBJ3:head(37'3 client.4251.0:1 dirty|data_digest|omap_digest s 7 uv 3 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
@@ -2362,10 +2441,12 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "osd": 1,
+          "primary": true,
           "shard": 0,
           "errors": [],
           "size": 2048,
@@ -2401,6 +2482,7 @@ EOF
         },
         {
           "osd": 2,
+          "primary": false,
           "shard": 1,
           "errors": [],
           "size": 2048,
@@ -2457,7 +2539,8 @@ EOF
           "size": 2048,
           "errors": [],
           "shard": 2,
-          "osd": 0
+          "osd": 0,
+          "primary": false
         },
         {
           "size": 4096,
@@ -2466,7 +2549,8 @@ EOF
             "size_mismatch_oi",
             "ec_size_error"
           ],
-          "osd": 1
+          "osd": 1,
+          "primary": true
         },
         {
           "data_digest": "0x04cfa72f",
@@ -2474,7 +2558,8 @@ EOF
           "size": 2048,
           "shard": 1,
           "errors": [],
-          "osd": 2
+          "osd": 2,
+          "primary": false
         }
       ],
       "selected_object_info": "3:8549dfb5:::EOBJ5:head(65'7 client.4441.0:1 dirty|data_digest|omap_digest s 7 uv 7 dd 2ddbf8f5 od ffffffff alloc_hint [0 0 0])",
index f53d8ea3f93deb158229699d32387647909a4a9f..abc575d7a0db5fa3d4e1850d69e4a9365c299f5e 100644 (file)
@@ -70,8 +70,9 @@ void shard_info_wrapper::set_object(const ScrubMap::object& object)
 
 void shard_info_wrapper::encode(bufferlist& bl) const
 {
-  ENCODE_START(2, 1, bl);
+  ENCODE_START(3, 3, bl);
   ::encode(errors, bl);
+  ::encode(primary, bl);
   if (has_shard_missing()) {
     return;
   }
@@ -87,8 +88,9 @@ void shard_info_wrapper::encode(bufferlist& bl) const
 
 void shard_info_wrapper::decode(bufferlist::iterator& bp)
 {
-  DECODE_START(2, bp);
+  DECODE_START(3, bp);
   ::decode(errors, bp);
+  ::decode(primary, bp);
   if (has_shard_missing()) {
     return;
   }
@@ -98,8 +100,7 @@ void shard_info_wrapper::decode(bufferlist::iterator& bp)
   ::decode(omap_digest, bp);
   ::decode(data_digest_present, bp);
   ::decode(data_digest, bp);
-  if (struct_v > 1)
-    ::decode(selected_oi, bp);
+  ::decode(selected_oi, bp);
   DECODE_FINISH(bp);
 }
 
@@ -120,10 +121,12 @@ void
 inconsistent_obj_wrapper::set_auth_missing(const hobject_t& hoid,
                                            const map<pg_shard_t, ScrubMap*>& maps,
                                           map<pg_shard_t, shard_info_wrapper> &shard_map,
-                                          int &shallow_errors, int &deep_errors)
+                                          int &shallow_errors, int &deep_errors,
+                                          const pg_shard_t &primary)
 {
   for (auto pg_map : maps) {
     auto oid_object = pg_map.second->objects.find(hoid);
+    shard_map[pg_map.first].primary = (pg_map.first == primary);
     if (oid_object == pg_map.second->objects.end())
       shard_map[pg_map.first].set_missing();
     else
index 39a265671c24d480a4df1f583c81b28b6fd5d9d8..21e557b98aa4c2740cd2268e82d4da848b25b8f7 100644 (file)
@@ -116,7 +116,8 @@ struct inconsistent_obj_wrapper : librados::inconsistent_obj_t {
   void set_auth_missing(const hobject_t& hoid,
                         const map<pg_shard_t, ScrubMap*>&,
                        map<pg_shard_t, shard_info_wrapper>&,
-                       int &shallow_errors, int &deep_errors);
+                       int &shallow_errors, int &deep_errors,
+                       const pg_shard_t &primary);
   void set_version(uint64_t ver) { version = ver; }
   void encode(bufferlist& bl) const;
   void decode(bufferlist::iterator& bp);
index 9b79f8780ee6090c1d6aa90ebdf7f27e7c8085c5..1d5aca85beacf32723a8d2b8799cb5f0b49a668c 100644 (file)
@@ -121,6 +121,7 @@ struct shard_info_t : err_t {
   bool data_digest_present = false;
   uint32_t data_digest = 0;
   bool selected_oi = false;
+  bool primary = false;
 };
 
 struct osd_shard_t {
index 157b2422ab3989371bb7c54a850742faec30e295..d73bcd30c1a21b646b4e9388d8bf5c936c4f73fc 100644 (file)
@@ -782,6 +782,8 @@ map<pg_shard_t, ScrubMap *>::const_iterator
     }
     string error_string;
     auto& shard_info = shard_map[j->first];
+    if (j->first == get_parent()->whoami_shard())
+      shard_info.primary = true;
     if (i->second.read_error) {
       shard_info.set_read_error();
       error_string += " read_error";
@@ -929,7 +931,8 @@ void PGBackend::be_compare_scrubmaps(
     set<pg_shard_t> object_errors;
     if (auth == maps.end()) {
       object_error.set_version(0);
-      object_error.set_auth_missing(*k, maps, shard_map, shallow_errors, deep_errors);
+      object_error.set_auth_missing(*k, maps, shard_map, shallow_errors,
+       deep_errors, get_parent()->whoami_shard());
       if (object_error.has_deep_errors())
        ++deep_errors;
       else if (object_error.has_shallow_errors())
@@ -982,6 +985,7 @@ void PGBackend::be_compare_scrubmaps(
       } else {
        cur_missing.insert(j->first);
        shard_map[j->first].set_missing();
+        shard_map[j->first].primary = (j->first == get_parent()->whoami_shard());
        // Can't have any other errors if there is no information available
        ++shallow_errors;
        errorstream << pgid << " shard " << j->first << " missing " << *k
index 9d00403033ed096a887c902f0cddd3f8917e49c9..5e8684deccd11a38de7cb38d02015d98846fc7cb 100644 (file)
@@ -1448,6 +1448,7 @@ static void dump_inconsistent(const inconsistent_obj_t& inc,
     f.open_object_section("shard");
     auto& osd_shard = shard_info.first;
     f.dump_int("osd", osd_shard.osd);
+    f.dump_bool("primary", shard_info.second.primary);
     auto shard = osd_shard.shard;
     if (shard != shard_id_t::NO_SHARD)
       f.dump_unsigned("shard", shard);