Switched to new grpc_call_invoke API

pull/87/head
murgatroid99 10 years ago
parent 0aa22c3ce1
commit 1d89452e11
  1. 38
      src/php/ext/grpc/call.c
  2. 7
      src/php/ext/grpc/php_grpc.c
  3. 3
      src/php/lib/Grpc/ActiveCall.php
  4. 6
      src/php/tests/unit_tests/CallTest.php
  5. 24
      src/php/tests/unit_tests/EndToEndTest.php
  6. 24
      src/php/tests/unit_tests/SecureEndToEndTest.php

@ -224,27 +224,25 @@ PHP_METHOD(Call, add_metadata) {
/** /**
* Invoke the RPC. Starts sending metadata and request headers over the wire * Invoke the RPC. Starts sending metadata and request headers over the wire
* @param CompletionQueue $queue The completion queue to use with this call * @param CompletionQueue $queue The completion queue to use with this call
* @param long $invoke_accepted_tag The tag to associate with this invocation
* @param long $metadata_tag The tag to associate with returned metadata * @param long $metadata_tag The tag to associate with returned metadata
* @param long $finished_tag The tag to associate with the finished event * @param long $finished_tag The tag to associate with the finished event
* @param long $flags A bitwise combination of the Grpc\WRITE_* constants * @param long $flags A bitwise combination of the Grpc\WRITE_* constants
* (optional) * (optional)
* @return Void * @return Void
*/ */
PHP_METHOD(Call, start_invoke) { PHP_METHOD(Call, invoke) {
grpc_call_error error_code; grpc_call_error error_code;
long tag1; long tag1;
long tag2; long tag2;
long tag3;
zval *queue_obj; zval *queue_obj;
long flags = 0; long flags = 0;
/* "Olll|l" == 1 Object, 3 mandatory longs, 1 optional long */ /* "Oll|l" == 1 Object, 3 mandatory longs, 1 optional long */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Olll|l", &queue_obj, if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Oll|l", &queue_obj,
grpc_ce_completion_queue, &tag1, &tag2, &tag3, grpc_ce_completion_queue, &tag1, &tag2,
&flags) == FAILURE) { &flags) == FAILURE) {
zend_throw_exception( zend_throw_exception(
spl_ce_InvalidArgumentException, spl_ce_InvalidArgumentException,
"start_invoke needs a CompletionQueue, 3 longs, and an optional long", "invoke needs a CompletionQueue, 2 longs, and an optional long",
1 TSRMLS_CC); 1 TSRMLS_CC);
return; return;
} }
@ -254,10 +252,9 @@ PHP_METHOD(Call, start_invoke) {
wrapped_grpc_completion_queue *queue = wrapped_grpc_completion_queue *queue =
(wrapped_grpc_completion_queue *)zend_object_store_get_object( (wrapped_grpc_completion_queue *)zend_object_store_get_object(
queue_obj TSRMLS_CC); queue_obj TSRMLS_CC);
error_code = error_code = grpc_call_invoke(call->wrapped, queue->wrapped, (void *)tag1,
grpc_call_start_invoke(call->wrapped, queue->wrapped, (void *)tag1, (void *)tag2, (gpr_uint32)flags);
(void *)tag2, (void *)tag3, (gpr_uint32)flags); MAYBE_THROW_CALL_ERROR(invoke, error_code);
MAYBE_THROW_CALL_ERROR(start_invoke, error_code);
} }
/** /**
@ -423,16 +420,15 @@ PHP_METHOD(Call, start_read) {
static zend_function_entry call_methods[] = { static zend_function_entry call_methods[] = {
PHP_ME(Call, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) PHP_ME(Call, __construct, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
PHP_ME(Call, server_accept, NULL, ZEND_ACC_PUBLIC) PHP_ME(Call, server_accept, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Call, server_end_initial_metadata, NULL, ZEND_ACC_PUBLIC) PHP_ME(Call, server_end_initial_metadata, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Call, add_metadata, NULL, ZEND_ACC_PUBLIC) PHP_ME( PHP_ME(Call, add_metadata, NULL, ZEND_ACC_PUBLIC)
Call, cancel, NULL, ZEND_ACC_PUBLIC) PHP_ME(Call, cancel, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Call, start_invoke, NULL, ZEND_ACC_PUBLIC) PHP_ME( PHP_ME(Call, invoke, NULL, ZEND_ACC_PUBLIC)
Call, start_read, NULL, ZEND_ACC_PUBLIC) PHP_ME(Call, start_read, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Call, start_write, NULL, ZEND_ACC_PUBLIC) PHP_ME( PHP_ME(Call, start_write, NULL, ZEND_ACC_PUBLIC)
Call, start_write_status, NULL, ZEND_ACC_PUBLIC) PHP_ME(Call, start_write_status, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Call, writes_done, NULL, ZEND_ACC_PUBLIC) PHP_ME(Call, writes_done, NULL, ZEND_ACC_PUBLIC) PHP_FE_END};
PHP_FE_END};
void grpc_init_call(TSRMLS_D) { void grpc_init_call(TSRMLS_D) {
zend_class_entry ce; zend_class_entry ce;

@ -33,7 +33,8 @@ zend_module_entry grpc_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901 #if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER, STANDARD_MODULE_HEADER,
#endif #endif
"grpc", grpc_functions, PHP_MINIT(grpc), PHP_MSHUTDOWN(grpc), NULL, NULL, "grpc", grpc_functions, PHP_MINIT(grpc),
PHP_MSHUTDOWN(grpc), NULL, NULL,
PHP_MINFO(grpc), PHP_MINFO(grpc),
#if ZEND_MODULE_API_NO >= 20010901 #if ZEND_MODULE_API_NO >= 20010901
PHP_GRPC_VERSION, PHP_GRPC_VERSION,
@ -106,11 +107,9 @@ PHP_MINIT_FUNCTION(grpc) {
/* Register completion type constants */ /* Register completion type constants */
REGISTER_LONG_CONSTANT("Grpc\\QUEUE_SHUTDOWN", GRPC_QUEUE_SHUTDOWN, CONST_CS); REGISTER_LONG_CONSTANT("Grpc\\QUEUE_SHUTDOWN", GRPC_QUEUE_SHUTDOWN, CONST_CS);
REGISTER_LONG_CONSTANT("Grpc\\READ", GRPC_READ, CONST_CS); REGISTER_LONG_CONSTANT("Grpc\\READ", GRPC_READ, CONST_CS);
REGISTER_LONG_CONSTANT("Grpc\\INVOKE_ACCEPTED", GRPC_INVOKE_ACCEPTED,
CONST_CS);
REGISTER_LONG_CONSTANT("Grpc\\WRITE_ACCEPTED", GRPC_WRITE_ACCEPTED, CONST_CS);
REGISTER_LONG_CONSTANT("Grpc\\FINISH_ACCEPTED", GRPC_FINISH_ACCEPTED, REGISTER_LONG_CONSTANT("Grpc\\FINISH_ACCEPTED", GRPC_FINISH_ACCEPTED,
CONST_CS); CONST_CS);
REGISTER_LONG_CONSTANT("Grpc\\WRITE_ACCEPTED", GRPC_WRITE_ACCEPTED, CONST_CS);
REGISTER_LONG_CONSTANT("Grpc\\CLIENT_METADATA_READ", REGISTER_LONG_CONSTANT("Grpc\\CLIENT_METADATA_READ",
GRPC_CLIENT_METADATA_READ, CONST_CS); GRPC_CLIENT_METADATA_READ, CONST_CS);
REGISTER_LONG_CONSTANT("Grpc\\FINISHED", GRPC_FINISHED, CONST_CS); REGISTER_LONG_CONSTANT("Grpc\\FINISHED", GRPC_FINISHED, CONST_CS);

@ -29,11 +29,8 @@ class ActiveCall {
// Invoke the call. // Invoke the call.
$this->call->start_invoke($this->completion_queue, $this->call->start_invoke($this->completion_queue,
INVOKE_ACCEPTED,
CLIENT_METADATA_READ, CLIENT_METADATA_READ,
FINISHED, 0); FINISHED, 0);
$this->completion_queue->pluck(INVOKE_ACCEPTED,
Timeval::inf_future());
$metadata_event = $this->completion_queue->pluck(CLIENT_METADATA_READ, $metadata_event = $this->completion_queue->pluck(CLIENT_METADATA_READ,
Timeval::inf_future()); Timeval::inf_future());
$this->metadata = $metadata_event->data; $this->metadata = $metadata_event->data;

@ -19,10 +19,10 @@ class CallTest extends PHPUnit_Framework_TestCase{
/** /**
* @expectedException LogicException * @expectedException LogicException
* @expectedExceptionCode Grpc\CALL_ERROR_INVALID_FLAGS * @expectedExceptionCode Grpc\CALL_ERROR_INVALID_FLAGS
* @expectedExceptionMessage start_invoke * @expectedExceptionMessage invoke
*/ */
public function testStartInvokeRejectsBadFlags() { public function testInvokeRejectsBadFlags() {
$this->call->start_invoke($this->cq, 0, 0, 0, 0xDEADBEEF); $this->call->invoke($this->cq, 0, 0, 0xDEADBEEF);
} }
/** /**

@ -25,18 +25,12 @@ class EndToEndTest extends PHPUnit_Framework_TestCase{
$deadline); $deadline);
$tag = 1; $tag = 1;
$this->assertEquals(Grpc\CALL_OK, $this->assertEquals(Grpc\CALL_OK,
$call->start_invoke($this->client_queue, $call->invoke($this->client_queue,
$tag, $tag,
$tag, $tag));
$tag));
$server_tag = 2; $server_tag = 2;
// the client invocation was accepted
$event = $this->client_queue->next($deadline);
$this->assertNotNull($event);
$this->assertEquals(Grpc\INVOKE_ACCEPTED, $event->type);
$call->writes_done($tag); $call->writes_done($tag);
$event = $this->client_queue->next($deadline); $event = $this->client_queue->next($deadline);
$this->assertNotNull($event); $this->assertNotNull($event);
@ -103,18 +97,12 @@ class EndToEndTest extends PHPUnit_Framework_TestCase{
$deadline); $deadline);
$tag = 1; $tag = 1;
$this->assertEquals(Grpc\CALL_OK, $this->assertEquals(Grpc\CALL_OK,
$call->start_invoke($this->client_queue, $call->invoke($this->client_queue,
$tag, $tag,
$tag, $tag));
$tag));
$server_tag = 2; $server_tag = 2;
// the client invocation was accepted
$event = $this->client_queue->next($deadline);
$this->assertNotNull($event);
$this->assertEquals(Grpc\INVOKE_ACCEPTED, $event->type);
// the client writes // the client writes
$call->start_write($req_text, $tag); $call->start_write($req_text, $tag);
$event = $this->client_queue->next($deadline); $event = $this->client_queue->next($deadline);

@ -37,17 +37,11 @@ class SecureEndToEndTest extends PHPUnit_Framework_TestCase{
$deadline); $deadline);
$tag = 1; $tag = 1;
$this->assertEquals(Grpc\CALL_OK, $this->assertEquals(Grpc\CALL_OK,
$call->start_invoke($this->client_queue, $call->invoke($this->client_queue,
$tag, $tag,
$tag, $tag));
$tag));
$server_tag = 2; $server_tag = 2;
// the client invocation was accepted
$event = $this->client_queue->next($deadline);
$this->assertNotNull($event);
$this->assertEquals(Grpc\INVOKE_ACCEPTED, $event->type);
$call->writes_done($tag); $call->writes_done($tag);
$event = $this->client_queue->next($deadline); $event = $this->client_queue->next($deadline);
$this->assertNotNull($event); $this->assertNotNull($event);
@ -113,18 +107,12 @@ class SecureEndToEndTest extends PHPUnit_Framework_TestCase{
$deadline); $deadline);
$tag = 1; $tag = 1;
$this->assertEquals(Grpc\CALL_OK, $this->assertEquals(Grpc\CALL_OK,
$call->start_invoke($this->client_queue, $call->invoke($this->client_queue,
$tag, $tag,
$tag, $tag));
$tag));
$server_tag = 2; $server_tag = 2;
// the client invocation was accepted
$event = $this->client_queue->next($deadline);
$this->assertNotNull($event);
$this->assertEquals(Grpc\INVOKE_ACCEPTED, $event->type);
// the client writes // the client writes
$call->start_write($req_text, $tag); $call->start_write($req_text, $tag);
$event = $this->client_queue->next($deadline); $event = $this->client_queue->next($deadline);

Loading…
Cancel
Save