Merge github.com:grpc/grpc into rollfwd

pull/9444/head
Craig Tiller 8 years ago
commit 68bb6a8453
  1. 72
      include/grpc++/impl/codegen/call.h
  2. 8
      include/grpc++/impl/codegen/method_handler_impl.h
  3. 8
      include/grpc++/impl/codegen/proto_utils.h
  4. 9
      include/grpc++/impl/codegen/rpc_service_method.h
  5. 4
      include/grpc++/impl/codegen/server_interface.h
  6. 8
      include/grpc++/impl/codegen/sync_stream.h
  7. 3
      include/grpc++/support/byte_buffer.h
  8. 8
      src/cpp/server/server_cc.cc
  9. 15
      src/php/lib/Grpc/AbstractCall.php
  10. 24
      src/php/lib/Grpc/BaseStub.php
  11. 4
      src/php/lib/Grpc/BidiStreamingCall.php
  12. 4
      src/php/lib/Grpc/ClientStreamingCall.php
  13. 4
      src/php/lib/Grpc/ServerStreamingCall.php
  14. 4
      src/php/lib/Grpc/UnaryCall.php
  15. 2
      test/cpp/end2end/end2end_test.cc

@ -162,7 +162,7 @@ template <int I>
class CallNoOp {
protected:
void AddOp(grpc_op* ops, size_t* nops) {}
void FinishOp(bool* status, int max_receive_message_size) {}
void FinishOp(bool* status) {}
};
class CallOpSendInitialMetadata {
@ -200,7 +200,7 @@ class CallOpSendInitialMetadata {
op->data.send_initial_metadata.maybe_compression_level.level =
maybe_compression_level_.level;
}
void FinishOp(bool* status, int max_receive_message_size) {
void FinishOp(bool* status) {
if (!send_) return;
g_core_codegen_interface->gpr_free(initial_metadata_);
send_ = false;
@ -240,7 +240,7 @@ class CallOpSendMessage {
// Flags are per-message: clear them after use.
write_options_.Clear();
}
void FinishOp(bool* status, int max_receive_message_size) {
void FinishOp(bool* status) {
if (own_buf_) g_core_codegen_interface->grpc_byte_buffer_destroy(send_buf_);
send_buf_ = nullptr;
}
@ -288,14 +288,12 @@ class CallOpRecvMessage {
op->data.recv_message.recv_message = &recv_buf_;
}
void FinishOp(bool* status, int max_receive_message_size) {
void FinishOp(bool* status) {
if (message_ == nullptr) return;
if (recv_buf_) {
if (*status) {
got_message = *status =
SerializationTraits<R>::Deserialize(recv_buf_, message_,
max_receive_message_size)
.ok();
SerializationTraits<R>::Deserialize(recv_buf_, message_).ok();
} else {
got_message = false;
g_core_codegen_interface->grpc_byte_buffer_destroy(recv_buf_);
@ -318,8 +316,7 @@ class CallOpRecvMessage {
namespace CallOpGenericRecvMessageHelper {
class DeserializeFunc {
public:
virtual Status Deserialize(grpc_byte_buffer* buf,
int max_receive_message_size) = 0;
virtual Status Deserialize(grpc_byte_buffer* buf) = 0;
virtual ~DeserializeFunc() {}
};
@ -327,10 +324,8 @@ template <class R>
class DeserializeFuncType final : public DeserializeFunc {
public:
DeserializeFuncType(R* message) : message_(message) {}
Status Deserialize(grpc_byte_buffer* buf,
int max_receive_message_size) override {
return SerializationTraits<R>::Deserialize(buf, message_,
max_receive_message_size);
Status Deserialize(grpc_byte_buffer* buf) override {
return SerializationTraits<R>::Deserialize(buf, message_);
}
~DeserializeFuncType() override {}
@ -369,13 +364,12 @@ class CallOpGenericRecvMessage {
op->data.recv_message.recv_message = &recv_buf_;
}
void FinishOp(bool* status, int max_receive_message_size) {
void FinishOp(bool* status) {
if (!deserialize_) return;
if (recv_buf_) {
if (*status) {
got_message = true;
*status =
deserialize_->Deserialize(recv_buf_, max_receive_message_size).ok();
*status = deserialize_->Deserialize(recv_buf_).ok();
} else {
got_message = false;
g_core_codegen_interface->grpc_byte_buffer_destroy(recv_buf_);
@ -409,7 +403,7 @@ class CallOpClientSendClose {
op->flags = 0;
op->reserved = NULL;
}
void FinishOp(bool* status, int max_receive_message_size) { send_ = false; }
void FinishOp(bool* status) { send_ = false; }
private:
bool send_;
@ -445,7 +439,7 @@ class CallOpServerSendStatus {
op->reserved = NULL;
}
void FinishOp(bool* status, int max_receive_message_size) {
void FinishOp(bool* status) {
if (!send_status_available_) return;
g_core_codegen_interface->gpr_free(trailing_metadata_);
send_status_available_ = false;
@ -478,7 +472,8 @@ class CallOpRecvInitialMetadata {
op->flags = 0;
op->reserved = NULL;
}
void FinishOp(bool* status, int max_receive_message_size) {
void FinishOp(bool* status) {
if (metadata_map_ == nullptr) return;
metadata_map_->FillMap();
metadata_map_ = nullptr;
@ -509,7 +504,7 @@ class CallOpClientRecvStatus {
op->reserved = NULL;
}
void FinishOp(bool* status, int max_receive_message_size) {
void FinishOp(bool* status) {
if (recv_status_ == nullptr) return;
metadata_map_->FillMap();
*recv_status_ = Status(static_cast<StatusCode>(status_code_),
@ -544,22 +539,17 @@ class CallOpSetCollectionInterface
/// API.
class CallOpSetInterface : public CompletionQueueTag {
public:
CallOpSetInterface() : max_receive_message_size_(0) {}
CallOpSetInterface() {}
/// Fills in grpc_op, starting from ops[*nops] and moving
/// upwards.
virtual void FillOps(grpc_op* ops, size_t* nops) = 0;
void set_max_receive_message_size(int max_receive_message_size) {
max_receive_message_size_ = max_receive_message_size;
}
/// Mark this as belonging to a collection if needed
void SetCollection(std::shared_ptr<CallOpSetCollectionInterface> collection) {
collection_ = collection;
}
protected:
int max_receive_message_size_;
std::shared_ptr<CallOpSetCollectionInterface> collection_;
};
@ -591,12 +581,12 @@ class CallOpSet : public CallOpSetInterface,
}
bool FinalizeResult(void** tag, bool* status) override {
this->Op1::FinishOp(status, max_receive_message_size_);
this->Op2::FinishOp(status, max_receive_message_size_);
this->Op3::FinishOp(status, max_receive_message_size_);
this->Op4::FinishOp(status, max_receive_message_size_);
this->Op5::FinishOp(status, max_receive_message_size_);
this->Op6::FinishOp(status, max_receive_message_size_);
this->Op1::FinishOp(status);
this->Op2::FinishOp(status);
this->Op3::FinishOp(status);
this->Op4::FinishOp(status);
this->Op5::FinishOp(status);
this->Op6::FinishOp(status);
*tag = return_tag_;
collection_.reset(); // drop the ref at this point
return true;
@ -628,35 +618,19 @@ class Call final {
public:
/* call is owned by the caller */
Call(grpc_call* call, CallHook* call_hook, CompletionQueue* cq)
: call_hook_(call_hook),
cq_(cq),
call_(call),
max_receive_message_size_(-1) {}
Call(grpc_call* call, CallHook* call_hook, CompletionQueue* cq,
int max_receive_message_size)
: call_hook_(call_hook),
cq_(cq),
call_(call),
max_receive_message_size_(max_receive_message_size) {}
: call_hook_(call_hook), cq_(cq), call_(call) {}
void PerformOps(CallOpSetInterface* ops) {
if (max_receive_message_size_ > 0) {
ops->set_max_receive_message_size(max_receive_message_size_);
}
call_hook_->PerformOpsOnCall(ops, this);
}
grpc_call* call() const { return call_; }
CompletionQueue* cq() const { return cq_; }
int max_receive_message_size() { return max_receive_message_size_; }
private:
CallHook* call_hook_;
CompletionQueue* cq_;
grpc_call* call_;
int max_receive_message_size_;
};
} // namespace grpc

@ -52,8 +52,8 @@ class RpcMethodHandler : public MethodHandler {
void RunHandler(const HandlerParameter& param) final {
RequestType req;
Status status = SerializationTraits<RequestType>::Deserialize(
param.request, &req, param.max_receive_message_size);
Status status =
SerializationTraits<RequestType>::Deserialize(param.request, &req);
ResponseType rsp;
if (status.ok()) {
status = func_(service_, param.server_context, &req, &rsp);
@ -138,8 +138,8 @@ class ServerStreamingHandler : public MethodHandler {
void RunHandler(const HandlerParameter& param) final {
RequestType req;
Status status = SerializationTraits<RequestType>::Deserialize(
param.request, &req, param.max_receive_message_size);
Status status =
SerializationTraits<RequestType>::Deserialize(param.request, &req);
if (status.ok()) {
ServerWriter<ResponseType> writer(param.call, param.server_context);

@ -203,8 +203,7 @@ class SerializationTraits<T, typename std::enable_if<std::is_base_of<
}
static Status Deserialize(grpc_byte_buffer* buffer,
grpc::protobuf::Message* msg,
int max_receive_message_size) {
grpc::protobuf::Message* msg) {
if (buffer == nullptr) {
return Status(StatusCode::INTERNAL, "No payload");
}
@ -215,10 +214,7 @@ class SerializationTraits<T, typename std::enable_if<std::is_base_of<
return reader.status();
}
::grpc::protobuf::io::CodedInputStream decoder(&reader);
if (max_receive_message_size > 0) {
decoder.SetTotalBytesLimit(max_receive_message_size,
max_receive_message_size);
}
decoder.SetTotalBytesLimit(INT_MAX, INT_MAX);
if (!msg->ParseFromCodedStream(&decoder)) {
result = Status(StatusCode::INTERNAL, msg->InitializationErrorString());
}

@ -57,17 +57,12 @@ class MethodHandler {
public:
virtual ~MethodHandler() {}
struct HandlerParameter {
HandlerParameter(Call* c, ServerContext* context, grpc_byte_buffer* req,
int max_size)
: call(c),
server_context(context),
request(req),
max_receive_message_size(max_size) {}
HandlerParameter(Call* c, ServerContext* context, grpc_byte_buffer* req)
: call(c), server_context(context), request(req) {}
Call* call;
ServerContext* server_context;
// Handler required to grpc_byte_buffer_destroy this
grpc_byte_buffer* request;
int max_receive_message_size;
};
virtual void RunHandler(const HandlerParameter& param) = 0;
};

@ -198,9 +198,7 @@ class ServerInterface : public CallHook {
bool FinalizeResult(void** tag, bool* status) override {
bool serialization_status =
*status && payload_ &&
SerializationTraits<Message>::Deserialize(
payload_, request_, server_->max_receive_message_size())
.ok();
SerializationTraits<Message>::Deserialize(payload_, request_).ok();
bool ret = RegisteredAsyncRequest::FinalizeResult(tag, status);
*status = serialization_status && *status;
return ret;

@ -160,7 +160,7 @@ class ClientReader final : public ClientReaderInterface<R> {
}
bool NextMessageSize(uint32_t* sz) override {
*sz = call_.max_receive_message_size();
*sz = INT_MAX;
return true;
}
@ -310,7 +310,7 @@ class ClientReaderWriter final : public ClientReaderWriterInterface<W, R> {
}
bool NextMessageSize(uint32_t* sz) override {
*sz = call_.max_receive_message_size();
*sz = INT_MAX;
return true;
}
@ -382,7 +382,7 @@ class ServerReader final : public ServerReaderInterface<R> {
}
bool NextMessageSize(uint32_t* sz) override {
*sz = call_->max_receive_message_size();
*sz = INT_MAX;
return true;
}
@ -474,7 +474,7 @@ class ServerReaderWriterBody final {
}
bool NextMessageSize(uint32_t* sz) {
*sz = call_->max_receive_message_size();
*sz = INT_MAX;
return true;
}

@ -95,8 +95,7 @@ class ByteBuffer final {
template <>
class SerializationTraits<ByteBuffer, void> {
public:
static Status Deserialize(grpc_byte_buffer* byte_buffer, ByteBuffer* dest,
int max_receive_message_size) {
static Status Deserialize(grpc_byte_buffer* byte_buffer, ByteBuffer* dest) {
dest->set_buffer(byte_buffer);
return Status::OK;
}

@ -186,7 +186,7 @@ class Server::SyncRequest final : public CompletionQueueTag {
public:
explicit CallData(Server* server, SyncRequest* mrd)
: cq_(mrd->cq_),
call_(mrd->call_, server, &cq_, server->max_receive_message_size_),
call_(mrd->call_, server, &cq_),
ctx_(mrd->deadline_, mrd->request_metadata_.metadata,
mrd->request_metadata_.count),
has_request_payload_(mrd->has_request_payload_),
@ -208,8 +208,8 @@ class Server::SyncRequest final : public CompletionQueueTag {
void Run(std::shared_ptr<GlobalCallbacks> global_callbacks) {
ctx_.BeginCompletionOp(&call_);
global_callbacks->PreSynchronousRequest(&ctx_);
method_->handler()->RunHandler(MethodHandler::HandlerParameter(
&call_, &ctx_, request_payload_, call_.max_receive_message_size()));
method_->handler()->RunHandler(
MethodHandler::HandlerParameter(&call_, &ctx_, request_payload_));
global_callbacks->PostSynchronousRequest(&ctx_);
request_payload_ = nullptr;
void* ignored_tag;
@ -589,7 +589,7 @@ bool ServerInterface::BaseAsyncRequest::FinalizeResult(void** tag,
}
context_->set_call(call_);
context_->cq_ = call_cq_;
Call call(call_, server_, call_cq_, server_->max_receive_message_size());
Call call(call_, server_, call_cq_);
if (*status && call_) {
context_->BeginCompletionOp(&call);
}

@ -58,12 +58,11 @@ abstract class AbstractCall
* the response
* @param array $options Call options (optional)
*/
public function __construct(
Channel $channel,
$method,
$deserialize,
array $options = []
) {
public function __construct(Channel $channel,
$method,
$deserialize,
array $options = [])
{
if (array_key_exists('timeout', $options) &&
is_numeric($timeout = $options['timeout'])
) {
@ -127,7 +126,7 @@ abstract class AbstractCall
*
* @return string The protobuf binary format
*/
protected function serializeMessage($data)
protected function _serializeMessage($data)
{
// Proto3 implementation
if (method_exists($data, 'encode')) {
@ -145,7 +144,7 @@ abstract class AbstractCall
*
* @return mixed The deserialized value
*/
protected function deserializeResponse($value)
protected function _deserializeResponse($value)
{
if ($value === null) {
return;

@ -145,6 +145,14 @@ class BaseStub
return $this->_checkConnectivityState($new_state);
}
/**
* Close the communication channel associated with this stub.
*/
public function close()
{
$this->channel->close();
}
/**
* @param $new_state Connect state
*
@ -163,14 +171,6 @@ class BaseStub
return false;
}
/**
* Close the communication channel associated with this stub.
*/
public function close()
{
$this->channel->close();
}
/**
* constructs the auth uri for the jwt.
*
@ -235,7 +235,7 @@ class BaseStub
*
* @return SimpleSurfaceActiveCall The active call object
*/
public function _simpleRequest($method,
protected function _simpleRequest($method,
$argument,
$deserialize,
array $metadata = [],
@ -270,7 +270,7 @@ class BaseStub
*
* @return ClientStreamingSurfaceActiveCall The active call object
*/
public function _clientStreamRequest($method,
protected function _clientStreamRequest($method,
$deserialize,
array $metadata = [],
array $options = [])
@ -305,7 +305,7 @@ class BaseStub
*
* @return ServerStreamingSurfaceActiveCall The active call object
*/
public function _serverStreamRequest($method,
protected function _serverStreamRequest($method,
$argument,
$deserialize,
array $metadata = [],
@ -339,7 +339,7 @@ class BaseStub
*
* @return BidiStreamingSurfaceActiveCall The active call object
*/
public function _bidiRequest($method,
protected function _bidiRequest($method,
$deserialize,
array $metadata = [],
array $options = [])

@ -69,7 +69,7 @@ class BidiStreamingCall extends AbstractCall
$this->metadata = $read_event->metadata;
}
return $this->deserializeResponse($read_event->message);
return $this->_deserializeResponse($read_event->message);
}
/**
@ -82,7 +82,7 @@ class BidiStreamingCall extends AbstractCall
*/
public function write($data, array $options = [])
{
$message_array = ['message' => $this->serializeMessage($data)];
$message_array = ['message' => $this->_serializeMessage($data)];
if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags'];
}

@ -63,7 +63,7 @@ class ClientStreamingCall extends AbstractCall
*/
public function write($data, array $options = [])
{
$message_array = ['message' => $this->serializeMessage($data)];
$message_array = ['message' => $this->_serializeMessage($data)];
if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags'];
}
@ -90,6 +90,6 @@ class ClientStreamingCall extends AbstractCall
$status = $event->status;
$this->trailing_metadata = $status->metadata;
return [$this->deserializeResponse($event->message), $status];
return [$this->_deserializeResponse($event->message), $status];
}
}

@ -51,7 +51,7 @@ class ServerStreamingCall extends AbstractCall
*/
public function start($data, array $metadata = [], array $options = [])
{
$message_array = ['message' => $this->serializeMessage($data)];
$message_array = ['message' => $this->_serializeMessage($data)];
if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags'];
}
@ -73,7 +73,7 @@ class ServerStreamingCall extends AbstractCall
OP_RECV_MESSAGE => true,
])->message;
while ($response !== null) {
yield $this->deserializeResponse($response);
yield $this->_deserializeResponse($response);
$response = $this->call->startBatch([
OP_RECV_MESSAGE => true,
])->message;

@ -51,7 +51,7 @@ class UnaryCall extends AbstractCall
*/
public function start($data, array $metadata = [], array $options = [])
{
$message_array = ['message' => $this->serializeMessage($data)];
$message_array = ['message' => $this->_serializeMessage($data)];
if (isset($options['flags'])) {
$message_array['flags'] = $options['flags'];
}
@ -79,6 +79,6 @@ class UnaryCall extends AbstractCall
$status = $event->status;
$this->trailing_metadata = $status->metadata;
return [$this->deserializeResponse($event->message), $status];
return [$this->_deserializeResponse($event->message), $status];
}
}

@ -901,6 +901,8 @@ TEST_P(End2endTest, RpcMaxMessageSize) {
EchoRequest request;
EchoResponse response;
request.set_message(string(kMaxMessageSize_ * 2, 'a'));
// cancelled is not guaranteed to appear before the end of the service handler
request.mutable_param()->set_skip_cancelled_check(true);
ClientContext context;
Status s = stub_->Echo(&context, request, &response);

Loading…
Cancel
Save