Esempio n. 1
0
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;
			}
Esempio n. 3
0
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;
	}
}