int mcreq_dispatch_response( mc_PIPELINE *pipeline, mc_PACKET *req, packet_info *res, lcb_error_t immerr) { record_metrics(pipeline, req, res); if (req->flags & MCREQ_F_UFWD) { dispatch_ufwd_error(pipeline, req, immerr); return 0; } #define INVOKE_OP(handler) \ handler(pipeline, req, res, immerr); \ return 0; \ break; switch (PACKET_OPCODE(res)) { case PROTOCOL_BINARY_CMD_GETQ: case PROTOCOL_BINARY_CMD_GATQ: case PROTOCOL_BINARY_CMD_GET: case PROTOCOL_BINARY_CMD_GAT: case PROTOCOL_BINARY_CMD_GET_LOCKED: INVOKE_OP(H_get); case PROTOCOL_BINARY_CMD_ADD: case PROTOCOL_BINARY_CMD_REPLACE: case PROTOCOL_BINARY_CMD_SET: case PROTOCOL_BINARY_CMD_APPEND: case PROTOCOL_BINARY_CMD_PREPEND: INVOKE_OP(H_store); case PROTOCOL_BINARY_CMD_INCREMENT: case PROTOCOL_BINARY_CMD_DECREMENT: INVOKE_OP(H_arithmetic); case PROTOCOL_BINARY_CMD_OBSERVE: INVOKE_OP(H_observe); case PROTOCOL_BINARY_CMD_GET_REPLICA: INVOKE_OP(H_getreplica); case PROTOCOL_BINARY_CMD_UNLOCK_KEY: INVOKE_OP(H_unlock); case PROTOCOL_BINARY_CMD_DELETE: INVOKE_OP(H_delete); case PROTOCOL_BINARY_CMD_TOUCH: INVOKE_OP(H_touch); case PROTOCOL_BINARY_CMD_OBSERVE_SEQNO: INVOKE_OP(H_observe_seqno); case PROTOCOL_BINARY_CMD_STAT: INVOKE_OP(H_stats); case PROTOCOL_BINARY_CMD_FLUSH: INVOKE_OP(H_flush); case PROTOCOL_BINARY_CMD_VERSION: INVOKE_OP(H_version); case PROTOCOL_BINARY_CMD_VERBOSITY: INVOKE_OP(H_verbosity); #if 0 case PROTOCOL_BINARY_CMD_NOOP: INVOKE_OP(H_noop); #endif case PROTOCOL_BINARY_CMD_GET_CLUSTER_CONFIG: INVOKE_OP(H_config); default: return -1; } }
int mcreq_dispatch_response( mc_PIPELINE *pipeline, mc_PACKET *req, packet_info *res, lcb_error_t immerr) { record_metrics(pipeline, req, res); if (req->flags & MCREQ_F_UFWD) { dispatch_ufwd_error(pipeline, req, immerr); return 0; } #define INVOKE_OP(handler) \ handler(pipeline, req, res, immerr); \ return 0; \ break; switch (PACKET_OPCODE(res)) { case PROTOCOL_BINARY_CMD_GETQ: case PROTOCOL_BINARY_CMD_GATQ: case PROTOCOL_BINARY_CMD_GET: case PROTOCOL_BINARY_CMD_GAT: case PROTOCOL_BINARY_CMD_GET_LOCKED: INVOKE_OP(H_get); case PROTOCOL_BINARY_CMD_ADD: case PROTOCOL_BINARY_CMD_REPLACE: case PROTOCOL_BINARY_CMD_SET: case PROTOCOL_BINARY_CMD_APPEND: case PROTOCOL_BINARY_CMD_PREPEND: INVOKE_OP(H_store); case PROTOCOL_BINARY_CMD_INCREMENT: case PROTOCOL_BINARY_CMD_DECREMENT: INVOKE_OP(H_arithmetic); case PROTOCOL_BINARY_CMD_SUBDOC_GET: case PROTOCOL_BINARY_CMD_SUBDOC_EXISTS: case PROTOCOL_BINARY_CMD_SUBDOC_ARRAY_ADD_UNIQUE: case PROTOCOL_BINARY_CMD_SUBDOC_ARRAY_PUSH_FIRST: case PROTOCOL_BINARY_CMD_SUBDOC_ARRAY_PUSH_LAST: case PROTOCOL_BINARY_CMD_SUBDOC_ARRAY_INSERT: case PROTOCOL_BINARY_CMD_SUBDOC_DICT_ADD: case PROTOCOL_BINARY_CMD_SUBDOC_DICT_UPSERT: case PROTOCOL_BINARY_CMD_SUBDOC_REPLACE: case PROTOCOL_BINARY_CMD_SUBDOC_DELETE: case PROTOCOL_BINARY_CMD_SUBDOC_COUNTER: case PROTOCOL_BINARY_CMD_SUBDOC_MULTI_LOOKUP: case PROTOCOL_BINARY_CMD_SUBDOC_MULTI_MUTATION: INVOKE_OP(H_subdoc); case PROTOCOL_BINARY_CMD_OBSERVE: INVOKE_OP(H_observe); case PROTOCOL_BINARY_CMD_GET_REPLICA: INVOKE_OP(H_getreplica); case PROTOCOL_BINARY_CMD_UNLOCK_KEY: INVOKE_OP(H_unlock); case PROTOCOL_BINARY_CMD_DELETE: INVOKE_OP(H_delete); case PROTOCOL_BINARY_CMD_TOUCH: INVOKE_OP(H_touch); case PROTOCOL_BINARY_CMD_OBSERVE_SEQNO: INVOKE_OP(H_observe_seqno); case PROTOCOL_BINARY_CMD_STAT: INVOKE_OP(H_stats); case PROTOCOL_BINARY_CMD_FLUSH: INVOKE_OP(H_flush); case PROTOCOL_BINARY_CMD_VERSION: INVOKE_OP(H_version); case PROTOCOL_BINARY_CMD_VERBOSITY: INVOKE_OP(H_verbosity); #if 0 case PROTOCOL_BINARY_CMD_NOOP: INVOKE_OP(H_noop); #endif case PROTOCOL_BINARY_CMD_GET_CLUSTER_CONFIG: INVOKE_OP(H_config); default: fprintf(stderr, "COUCHBASE: Received unknown opcode=0x%x\n", PACKET_OPCODE(res)); return -1; } }