From 2e858aa26b976eea95d8628492bf62702e5721d5 Mon Sep 17 00:00:00 2001 From: lampayan Date: Tue, 7 Jun 2016 15:37:09 +0200 Subject: [PATCH] preparation for merge --- etcd/DeleteRpcResponse.h | 2 +- etcd/Response.hpp | 32 ++++++++++++++++++++++++ src/Client.cpp | 53 ++++++++++++++++++++-------------------- 3 files changed, 60 insertions(+), 27 deletions(-) diff --git a/etcd/DeleteRpcResponse.h b/etcd/DeleteRpcResponse.h index a6a2e39..bcd0be1 100644 --- a/etcd/DeleteRpcResponse.h +++ b/etcd/DeleteRpcResponse.h @@ -21,7 +21,7 @@ public: etcdserverpb::DeleteRangeResponse deleteResponse; grpc::Status status; grpc::ClientContext context; - grpc::CompletionQueue completionQueue; + grpc::CompletionQueue cq_; std::unique_ptr> rpcInstance; }; } diff --git a/etcd/Response.hpp b/etcd/Response.hpp index 818b5a4..d31f32a 100644 --- a/etcd/Response.hpp +++ b/etcd/Response.hpp @@ -6,6 +6,7 @@ #include #include "etcd/Value.hpp" +#include namespace etcd { @@ -19,6 +20,37 @@ namespace etcd public: static pplx::task create(pplx::task response_task); + //parang mas magandang ilagay ito sa baseclass imbis na here ooorrr + //talagang response v2 lang talaga dito + templatestatic pplx::task create(T call) + { + return pplx::task([call]() + { + void* got_tag; + bool ok = false; + etcd::Response resp; + + //blocking + call->cq_.Next(&got_tag, &ok); + GPR_ASSERT(got_tag == (void*)call); + GPR_ASSERT(ok); + + T call = static_cast(got_tag); + if(call->status.ok()) + { +// auto v3resp = call->ParseResponse(); + resp = *call;// stripping off instead of creating a new response class + } + else + { + throw std::runtime_error(call->status.error_message()); + } + + delete call; //todo:make this a smart pointer + return resp; + }); + }; + Response(); /** diff --git a/src/Client.cpp b/src/Client.cpp index 720b418..f151643 100644 --- a/src/Client.cpp +++ b/src/Client.cpp @@ -118,40 +118,41 @@ pplx::task etcd::Client::removeEntry(std::string const & entryKe } - //then delete - std::cout << "removing etcd v3 entry naman" << std::endl; + std::cout << "removing etcd v3 entry naman with template na" << std::endl; etcdserverpb::DeleteRangeRequest deleteRangeRequest; deleteRangeRequest.set_key(entryKey); - drp->rpcInstance = stub_->AsyncDeleteRange(&drp->context, deleteRangeRequest, &drp->completionQueue); + drp->rpcInstance = stub_->AsyncDeleteRange(&drp->context, deleteRangeRequest, &drp->cq_); drp->rpcInstance->Finish(&drp->deleteResponse, &drp->status, (void*)drp); - return pplx::task([drp]() - { - std::cout << "doing delete v3 entry task" << std::endl; - void* got_tag; - bool ok = false; - etcd::Response resp; + return Response::create(drp); - drp->completionQueue.Next(&got_tag, &ok); - GPR_ASSERT(got_tag == (void*)drp); - GPR_ASSERT(ok); - - etcd::DeleteRpcResponse* deleteResponse = static_cast(got_tag); - - if (deleteResponse->status.ok()){ - std::cout << "doing delete v3 entry task OK" << std::endl; - resp = *drp; //simply stripping off the response part - } - else - std::cout << "doing delete v3 entry task NOK" << std::endl; - delete deleteResponse; - std::cout << "delete done, returning" << std::endl; - return resp; - } - ); +// return pplx::task([drp]() +// { +// std::cout << "doing delete v3 entry task" << std::endl; +// void* got_tag; +// bool ok = false; +// etcd::Response resp; +// +// drp->completionQueue.Next(&got_tag, &ok); +// GPR_ASSERT(got_tag == (void*)drp); +// GPR_ASSERT(ok); +// +// etcd::DeleteRpcResponse* deleteResponse = static_cast(got_tag); +// +// if (deleteResponse->status.ok()){ +// std::cout << "doing delete v3 entry task OK" << std::endl; +// resp = *drp; //simply stripping off the response part +// } +// else +// std::cout << "doing delete v3 entry task NOK" << std::endl; +// delete deleteResponse; +// std::cout << "delete done, returning" << std::endl; +// return resp; +// } +// ); }