From 2bdf415eb3288bb36801232cee4f6f931dd650cf Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Fri, 27 May 2022 02:07:26 +0300 Subject: [PATCH] Fix unknown OSD numbers on error --- src/osd_peering.cpp | 4 ++-- src/osd_primary_chain.cpp | 1 + src/osd_primary_subops.cpp | 19 ++++++++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/osd_peering.cpp b/src/osd_peering.cpp index 22d27d02..4fb894d9 100644 --- a/src/osd_peering.cpp +++ b/src/osd_peering.cpp @@ -317,7 +317,7 @@ void osd_t::submit_sync_and_list_subop(osd_num_t role_osd, pg_peering_state_t *p // Self osd_op_t *op = new osd_op_t(); op->op_type = 0; - op->peer_fd = 0; + op->peer_fd = -1; clock_gettime(CLOCK_REALTIME, &op->tv_begin); op->bs_op = new blockstore_op_t(); op->bs_op->opcode = BS_OP_SYNC; @@ -383,7 +383,7 @@ void osd_t::submit_list_subop(osd_num_t role_osd, pg_peering_state_t *ps) // Self osd_op_t *op = new osd_op_t(); op->op_type = 0; - op->peer_fd = 0; + op->peer_fd = -1; clock_gettime(CLOCK_REALTIME, &op->tv_begin); op->bs_op = new blockstore_op_t(); op->bs_op->opcode = BS_OP_LIST; diff --git a/src/osd_primary_chain.cpp b/src/osd_primary_chain.cpp index b10cf7d1..0001d733 100644 --- a/src/osd_primary_chain.cpp +++ b/src/osd_primary_chain.cpp @@ -295,6 +295,7 @@ int osd_t::submit_bitmap_subops(osd_op_t *cur_op, pg_t & pg) else { // Fail it immediately + subop->peer_fd = -1; subop->reply.hdr.retval = -EPIPE; subop->callback(subop); } diff --git a/src/osd_primary_subops.cpp b/src/osd_primary_subops.cpp index 220f3c35..ffe2b11f 100644 --- a/src/osd_primary_subops.cpp +++ b/src/osd_primary_subops.cpp @@ -233,6 +233,7 @@ int osd_t::submit_primary_subop_batch(int submit_type, inode_t inode, uint64_t o else { // Fail it immediately + subop->peer_fd = -1; subop->reply.hdr.retval = -EPIPE; subop->callback(subop); } @@ -321,7 +322,21 @@ void osd_t::handle_primary_subop(osd_op_t *subop, osd_op_t *cur_op) osd_primary_op_data_t *op_data = cur_op->op_data; if (retval != expected) { - printf("%s subop failed: retval = %d (expected %d)\n", osd_op_names[opcode], retval, expected); + if (opcode == OSD_OP_SEC_READ || opcode == OSD_OP_SEC_WRITE || opcode == OSD_OP_SEC_WRITE_STABLE) + { + printf( + "%s subop to %lx:%lx v%lu failed on peer %d: retval = %d (expected %d)\n", + osd_op_names[opcode], subop->req.sec_rw.oid.inode, subop->req.sec_rw.oid.stripe, subop->req.sec_rw.version, + subop->peer_fd, retval, expected + ); + } + else + { + printf( + "%s subop failed on peer %d: retval = %d (expected %d)\n", + osd_op_names[opcode], subop->peer_fd, retval, expected + ); + } if (retval == -EPIPE) { op_data->epipe++; @@ -495,6 +510,7 @@ void osd_t::submit_primary_del_batch(osd_op_t *cur_op, obj_ver_osd_t *chunks_to_ else { // Fail it immediately + subops[i].peer_fd = -1; subops[i].reply.hdr.retval = -EPIPE; subops[i].callback(&subops[i]); } @@ -609,6 +625,7 @@ void osd_t::submit_primary_stab_subops(osd_op_t *cur_op) else { // Fail it immediately + subops[i].peer_fd = -1; subops[i].reply.hdr.retval = -EPIPE; subops[i].callback(&subops[i]); }