| 173 | |
| 174 | public: |
| 175 | void encode_payload(uint64_t features) override { |
| 176 | using ceph::encode; |
| 177 | if(false == bdata_encode) { |
| 178 | OSDOp::merge_osd_op_vector_out_data(ops, data); |
| 179 | bdata_encode = true; |
| 180 | } |
| 181 | |
| 182 | if ((features & CEPH_FEATURE_PGID64) == 0) { |
| 183 | header.version = 1; |
| 184 | ceph_osd_reply_head head; |
| 185 | memset(&head, 0, sizeof(head)); |
| 186 | head.layout.ol_pgid = pgid.get_old_pg().v; |
| 187 | head.flags = flags; |
| 188 | head.osdmap_epoch = osdmap_epoch; |
| 189 | head.reassert_version = bad_replay_version; |
| 190 | head.result = result.get_host_to_wire(); |
| 191 | head.num_ops = ops.size(); |
| 192 | head.object_len = oid.name.length(); |
| 193 | encode(head, payload); |
| 194 | for (unsigned i = 0; i < head.num_ops; i++) { |
| 195 | encode(ops[i].op, payload); |
| 196 | } |
| 197 | ceph::encode_nohead(oid.name, payload); |
| 198 | } else { |
| 199 | header.version = HEAD_VERSION; |
| 200 | encode(oid, payload); |
| 201 | encode(pgid, payload); |
| 202 | encode(flags, payload); |
| 203 | encode(result, payload); |
| 204 | encode(bad_replay_version, payload); |
| 205 | encode(osdmap_epoch, payload); |
| 206 | |
| 207 | __u32 num_ops = ops.size(); |
| 208 | encode(num_ops, payload); |
| 209 | for (unsigned i = 0; i < num_ops; i++) |
| 210 | encode(ops[i].op, payload); |
| 211 | |
| 212 | encode(retry_attempt, payload); |
| 213 | |
| 214 | for (unsigned i = 0; i < num_ops; i++) |
| 215 | encode(ops[i].rval, payload); |
| 216 | |
| 217 | encode(replay_version, payload); |
| 218 | encode(user_version, payload); |
| 219 | if ((features & CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING) == 0) { |
| 220 | header.version = 6; |
| 221 | encode(redirect, payload); |
| 222 | } else { |
| 223 | do_redirect = !redirect.empty(); |
| 224 | encode(do_redirect, payload); |
| 225 | if (do_redirect) { |
| 226 | encode(redirect, payload); |
| 227 | } |
| 228 | } |
| 229 | encode_trace(payload, features); |
| 230 | } |
| 231 | } |
| 232 | void decode_payload() override { |
nothing calls this directly
no test coverage detected