From 645c3122b2a95fc575f1ad4baa0d77d0d99d5527 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 18 Oct 2018 10:17:42 -0400 Subject: [PATCH] osd/osd_types: include PG log return codes in object copy data If the base tier records an error against an operation, the cache tier currently might incorrectly respond with a success return code. Signed-off-by: Jason Dillaman --- src/osd/osd_types.cc | 13 +++++++++++-- src/osd/osd_types.h | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 79b0ab8482b..dc02c3ff11b 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -4495,7 +4495,7 @@ void object_copy_cursor_t::generate_test_instances(list& void object_copy_data_t::encode(bufferlist& bl, uint64_t features) const { - ENCODE_START(7, 5, bl); + ENCODE_START(8, 5, bl); encode(size, bl); encode(mtime, bl); encode(attrs, bl); @@ -4511,6 +4511,7 @@ void object_copy_data_t::encode(bufferlist& bl, uint64_t features) const encode(reqids, bl); encode(truncate_seq, bl); encode(truncate_size, bl); + encode(reqid_return_codes, bl); ENCODE_FINISH(bl); } @@ -4574,6 +4575,9 @@ void object_copy_data_t::decode(bufferlist::const_iterator& bl) decode(truncate_seq, bl); decode(truncate_size, bl); } + if (struct_v >= 8) { + decode(reqid_return_codes, bl); + } } DECODE_FINISH(bl); } @@ -4633,12 +4637,17 @@ void object_copy_data_t::dump(Formatter *f) const f->dump_unsigned("snap", *p); f->close_section(); f->open_array_section("reqids"); + uint32_t idx = 0; for (auto p = reqids.begin(); p != reqids.end(); - ++p) { + ++idx, ++p) { f->open_object_section("extra_reqid"); f->dump_stream("reqid") << p->first; f->dump_stream("user_version") << p->second; + auto it = reqid_return_codes.find(idx); + if (it != reqid_return_codes.end()) { + f->dump_int("return_code", it->second); + } f->close_section(); } f->close_section(); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index c87e3bccf46..cd92a1c76a2 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -4484,6 +4484,9 @@ struct object_copy_data_t { ///< recent reqids on this object mempool::osd_pglog::vector > reqids; + ///< map reqids by index to error return code (if any) + mempool::osd_pglog::map reqid_return_codes; + uint64_t truncate_seq; uint64_t truncate_size; -- 2.39.5