void WriteBuffer::clear() { ctx_.clear(); reply_.clear(); um_backing_msg_cleanup(&umMsg_); um_backing_msg_init(&umMsg_); mc_ascii_response_buf_cleanup(&asciiResponse_); mc_ascii_response_buf_init(&asciiResponse_); }
int um_emit_iovs_extended(um_backing_msg_t* bmsg, uint64_t reqid, mc_msg_t* msg, struct iovec* value_iovs, size_t n_value_iovs, emit_iov_cb* emit_iov, void* context) { FBI_ASSERT(bmsg && !bmsg->inuse && msg && msg->op != mc_op_end && emit_iov); _backing_msg_fill(bmsg, reqid, msg, value_iovs, n_value_iovs); if (entry_list_emit_iovs(&bmsg->elist, emit_iov, context)) { um_backing_msg_cleanup(bmsg); return -1; } return 0; }
ssize_t um_write_iovs_extended(um_backing_msg_t* bmsg, uint64_t reqid, mc_msg_t* msg, struct iovec* value_iovs, size_t n_value_iovs, struct iovec* iovs, size_t n_iovs) { FBI_ASSERT(bmsg && !bmsg->inuse && msg && msg->op != mc_op_end && iovs); _backing_msg_fill(bmsg, reqid, msg, value_iovs, n_value_iovs); int iovs_used = entry_list_to_iovecs(&bmsg->elist, iovs, n_iovs); if (iovs_used <= 0) { um_backing_msg_cleanup(bmsg); return -1; } return iovs_used; }
TEST(umbrella, iovecSerialize) { size_t nIovs = 3; char value[] = "value"; iovec iovs[] = {{&value[0], 1}, {&value[1], 2}, {&value[3], 2}}; um_backing_msg_t bmsg; um_backing_msg_init(&bmsg); uint64_t reqId = 1; mc_msg_t msg; mc_msg_init_not_refcounted(&msg); msg.op = mc_op_get; msg.result = mc_res_found; msg.flags = 0x4; // Verify emitIov std::string serializedVal = ""; EXPECT_EQ( um_emit_iovs_extended( &bmsg, reqId, &msg, iovs, nIovs, emitIov, (void *)&serializedVal), 0); verifySerializedValue(serializedVal, reqId, &msg, value); // Verify writeIov um_backing_msg_cleanup(&bmsg); um_backing_msg_init(&bmsg); serializedVal = ""; reqId++; iovec output[20]; ssize_t nOutIovs = um_write_iovs_extended(&bmsg, reqId, &msg, iovs, nIovs, output, 20); EXPECT_GE(nOutIovs, 1); for (int i = 0; i < nOutIovs; i++) { serializedVal.append((const char *)output[i].iov_base, output[i].iov_len); } verifySerializedValue(serializedVal, reqId, &msg, value); }
McServerTransaction::~McServerTransaction() { session_->onTransactionCompleted(isSubRequest_); um_backing_msg_cleanup(&umMsg_); mc_ascii_response_buf_cleanup(&asciiResponse_); }
McProtocolSerializer::RequestContext::~RequestContext() { um_backing_msg_cleanup(&umBackingMsg_); }