void DBServer::handle(const byte_vec& input, byte_vec* output) { // unpack incoming data msgpack::unpacked result; std::string str_input(input.begin(), input.end()); msgpack::unpack(result, str_input.data(), input.size()); msgpack::object request(result.get()); // prepare reply object msgpack::sbuffer header_buf; msgpack::sbuffer data_buf; Packer reply_header(&header_buf); Packer reply_data(&data_buf); // identify endpoint function based on request data endpoint_fn endpoint; try { endpoint = identify_endpoint(request); } catch (invalid_request& e) { set_status(status_codes::INVALID_REQUEST, e.what(), "", &reply_header); } // get reply from endpoint function (this->*endpoint)(request, &reply_header, &reply_data); // write serialized reply data into output buffer output->insert(output->end(), header_buf.data(), header_buf.data() + header_buf.size()); output->insert(output->end(), data_buf.data(), data_buf.data() + data_buf.size()); }
ModelCommons::ReadyFlags TrackerContentModule::processResults(TrackerQueryResult const &queryResult) { QVector<QStringList> reply_data(queryResult.selectResult()); if(RowStoreModel *m = model()) { PERF_EVENT("before_transitionrows %d", query_id_); m->transitionRowsImpl (0, model()->row_store.size(), RowStore(reply_data)); PERF_EVENT("after_transitionrows %d", query_id_); debug(2, service_.data()) << "done modeling query (id =" << query_id_ << "):"; debug(4, service_.data()) << " query was:\n" << getQueryText() << "\n"; debug(5, service_.data()) << " raw data:\n" << reply_data; debug(3, service_.data()) << " results:\n" << *m; } else { debug(2, service_.data()) << "finalized detached model query (id =" << query_id_ << "):"; debug(4, service_.data()) << " query was:\n" << getQueryText() << "\n"; debug(3, service_.data()) << " raw data:\n" << reply_data; } sharedFromThis(), Q_EMIT sequencedSuccess(); return AllReady; }
void iterate_node(Ctx &ctx, const dnet_addr &node) { std::cout << "Iterating node: " << dnet_addr_string(&node) << ":" << node.family << std::endl; std::vector<dnet_iterator_range> ranges; if (ctx.iflags & DNET_IFLAGS_KEY_RANGE) ranges.push_back(ctx.key_range); dnet_id id; memset(&id, 0, sizeof(id)); bool found = false; for (auto it = ctx.routes.begin(), end = ctx.routes.end(); it != end; ++it) { if (dnet_addr_equal(&it->addr, &node)) { dnet_setup_id(&id, it->group_id, it->id.id); found = true; break; } } if (!found) { std::cerr << "Node was not found in the route list" << std::endl; return; } ctx.session->set_groups(std::vector<int>(1, id.group_id)); auto res = ctx.session->start_iterator(ioremap::elliptics::key(id), ranges, DNET_ITYPE_NETWORK, ctx.iflags, ctx.time_begin, ctx.time_end); char buffer[2*DNET_ID_SIZE + 1] = {0}; for (auto it = res.begin(), end = res.end(); it != end; ++it) { std::cout << "node: " << dnet_addr_string(&node) << node.family << ", key: " << dnet_dump_id_len_raw(it->reply()->key.id, DNET_ID_SIZE, buffer) << ", flags: " << it->reply()->user_flags << ", ts: " << it->reply()->timestamp.tsec << "/" << it->reply()->timestamp.tnsec << ", keys: " << it->reply()->iterated_keys << "/" << it->reply()->total_keys << ", status: " << it->reply()->status << ", size: " << it->reply_data().size() << ", data: " << it->reply_data().to_string() << std::endl; } }