Merge remote-tracking branch 'upstream/master' into cares_buildin
This commit is contained in:
commit
830c32c4a1
|
|
@ -7,6 +7,7 @@
|
|||
"license": "BSD-3-Clause",
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"ext-grpc": "*",
|
||||
"google/protobuf": "v3.1.0-alpha-1"
|
||||
},
|
||||
"require-dev": {
|
||||
|
|
|
|||
|
|
@ -15,3 +15,5 @@ number:
|
|||
`include/grpc/impl/codegen/grpc_types.h` (commit `af00d8b`)
|
||||
- remove `ServerBuilder::SetMaxMessageSize()` method from
|
||||
`include/grpc++/server_builder.h` (commit `6980362`)
|
||||
- remove `GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY` macro from
|
||||
`include/grpc/impl/codegen/grpc_types.h` (commit `59c9f90`)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
There are times when we make changes that include a temporary shim for
|
||||
backward-compatibility (e.g., a macro or some other function to preserve
|
||||
the original API) to avoid having to bump the major version number in
|
||||
the next release. However, when we do eventually want to release a
|
||||
feature that does change the API in a non-backward-compatible way, we
|
||||
will wind up bumping the major version number anyway, at which point we
|
||||
can take the opportunity to clean up any pending backward-compatibility
|
||||
shims.
|
||||
|
||||
This file lists all pending backward-compatibility changes that should
|
||||
be cleaned up the next time we are going to bump the major version
|
||||
number:
|
||||
|
||||
- remove `ClientContext::set_fail_fast()` method from
|
||||
`include/grpc++/impl/codegen/client_context.h` (commit `9477724`)
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
"name": "grpc/grpc-demo",
|
||||
"description": "gRPC example for PHP",
|
||||
"require": {
|
||||
"ext-grpc": "*",
|
||||
"grpc/grpc": "v1.0.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -226,8 +226,14 @@ class ClientContext {
|
|||
/// EXPERIMENTAL: Set this request to be cacheable
|
||||
void set_cacheable(bool cacheable) { cacheable_ = cacheable; }
|
||||
|
||||
/// EXPERIMENTAL: Trigger fail-fast or not on this request
|
||||
void set_fail_fast(bool fail_fast) { fail_fast_ = fail_fast; }
|
||||
/// EXPERIMENTAL: Trigger wait-for-ready or not on this request
|
||||
void set_wait_for_ready(bool wait_for_ready) {
|
||||
wait_for_ready_ = wait_for_ready;
|
||||
wait_for_ready_explicitly_set_ = true;
|
||||
}
|
||||
|
||||
/// DEPRECATED: Use set_wait_for_ready() instead.
|
||||
void set_fail_fast(bool fail_fast) { set_wait_for_ready(!fail_fast); }
|
||||
|
||||
#ifndef GRPC_CXX0X_NO_CHRONO
|
||||
/// Return the deadline for the client call.
|
||||
|
|
@ -347,14 +353,18 @@ class ClientContext {
|
|||
|
||||
uint32_t initial_metadata_flags() const {
|
||||
return (idempotent_ ? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST : 0) |
|
||||
(fail_fast_ ? 0 : GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY) |
|
||||
(cacheable_ ? GRPC_INITIAL_METADATA_CACHEABLE_REQUEST : 0);
|
||||
(wait_for_ready_ ? GRPC_INITIAL_METADATA_WAIT_FOR_READY : 0) |
|
||||
(cacheable_ ? GRPC_INITIAL_METADATA_CACHEABLE_REQUEST : 0) |
|
||||
(wait_for_ready_explicitly_set_
|
||||
? GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET
|
||||
: 0);
|
||||
}
|
||||
|
||||
grpc::string authority() { return authority_; }
|
||||
|
||||
bool initial_metadata_received_;
|
||||
bool fail_fast_;
|
||||
bool wait_for_ready_;
|
||||
bool wait_for_ready_explicitly_set_;
|
||||
bool idempotent_;
|
||||
bool cacheable_;
|
||||
std::shared_ptr<Channel> channel_;
|
||||
|
|
|
|||
|
|
@ -257,15 +257,22 @@ typedef enum grpc_call_error {
|
|||
/** Signal that the call is idempotent */
|
||||
#define GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST (0x00000010u)
|
||||
/** Signal that the call should not return UNAVAILABLE before it has started */
|
||||
#define GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY (0x00000020u)
|
||||
#define GRPC_INITIAL_METADATA_WAIT_FOR_READY (0x00000020u)
|
||||
/** DEPRECATED: for backward compatibility */
|
||||
#define GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY \
|
||||
GRPC_INITIAL_METADATA_WAIT_FOR_READY
|
||||
/** Signal that the call is cacheable. GRPC is free to use GET verb */
|
||||
#define GRPC_INITIAL_METADATA_CACHEABLE_REQUEST (0x00000040u)
|
||||
/** Signal that GRPC_INITIAL_METADATA_WAIT_FOR_READY was explicitly set
|
||||
by the calling application. */
|
||||
#define GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET (0x00000080u)
|
||||
|
||||
/** Mask of all valid flags */
|
||||
#define GRPC_INITIAL_METADATA_USED_MASK \
|
||||
(GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST | \
|
||||
GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY | \
|
||||
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST)
|
||||
#define GRPC_INITIAL_METADATA_USED_MASK \
|
||||
(GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST | \
|
||||
GRPC_INITIAL_METADATA_WAIT_FOR_READY | \
|
||||
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST | \
|
||||
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)
|
||||
|
||||
/** A single metadata element */
|
||||
typedef struct grpc_metadata {
|
||||
|
|
|
|||
|
|
@ -111,10 +111,10 @@ static void set_channel_connectivity_state_locked(grpc_exec_ctx *exec_ctx,
|
|||
if ((state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
|
||||
state == GRPC_CHANNEL_SHUTDOWN) &&
|
||||
chand->lb_policy != NULL) {
|
||||
/* cancel fail-fast picks */
|
||||
/* cancel picks with wait_for_ready=false */
|
||||
grpc_lb_policy_cancel_picks(
|
||||
exec_ctx, chand->lb_policy,
|
||||
/* mask= */ GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY,
|
||||
/* mask= */ GRPC_INITIAL_METADATA_WAIT_FOR_READY,
|
||||
/* check= */ 0, GRPC_ERROR_REF(error));
|
||||
}
|
||||
grpc_connectivity_state_set(exec_ctx, &chand->state_tracker, state, error,
|
||||
|
|
|
|||
|
|
@ -142,15 +142,18 @@ void grpc_lb_policy_weak_unref(grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy);
|
|||
void grpc_lb_policy_init(grpc_lb_policy *policy,
|
||||
const grpc_lb_policy_vtable *vtable);
|
||||
|
||||
/** Find an appropriate target for this call, based on \a pick_args.
|
||||
Picking can be synchronous or asynchronous. In the synchronous case, when a
|
||||
pick is readily available, it'll be returned in \a target and a non-zero
|
||||
value will be returned.
|
||||
In the asynchronous case, zero is returned and \a on_complete will be called
|
||||
once \a target and \a user_data have been set. Any IO should be done under
|
||||
\a pick_args->pollent. The opaque \a user_data output argument corresponds
|
||||
to information that may need be propagated from the LB policy. It may be
|
||||
NULL. Errors are signaled by receiving a NULL \a *target. */
|
||||
/** Finds an appropriate subchannel for a call, based on \a pick_args.
|
||||
|
||||
\a target will be set to the selected subchannel, or NULL on failure.
|
||||
Upon success, \a user_data will be set to whatever opaque information
|
||||
may need to be propagated from the LB policy, or NULL if not needed.
|
||||
|
||||
If the pick succeeds and a result is known immediately, a non-zero
|
||||
value will be returned. Otherwise, \a on_complete will be invoked
|
||||
once the pick is complete with its error argument set to indicate
|
||||
success or failure.
|
||||
|
||||
Any I/O should be done under \a pick_args->pollent. */
|
||||
int grpc_lb_policy_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy,
|
||||
const grpc_lb_policy_pick_args *pick_args,
|
||||
grpc_connected_subchannel **target, void **user_data,
|
||||
|
|
|
|||
|
|
@ -761,7 +761,7 @@ static int glb_pick(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol,
|
|||
GRPC_ERROR_CREATE("No mdelem storage for the LB token. Load reporting "
|
||||
"won't work without it. Failing"),
|
||||
NULL);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
glb_lb_policy *glb_policy = (glb_lb_policy *)pol;
|
||||
|
|
|
|||
|
|
@ -543,7 +543,7 @@ static void create_grpc_frame(gpr_slice_buffer *write_slice_buffer,
|
|||
static void convert_metadata_to_cronet_headers(
|
||||
grpc_linked_mdelem *head, const char *host, char **pp_url,
|
||||
cronet_bidirectional_stream_header **pp_headers, size_t *p_num_headers,
|
||||
const char ** method) {
|
||||
const char **method) {
|
||||
grpc_linked_mdelem *curr = head;
|
||||
/* Walk the linked list and get number of header fields */
|
||||
size_t num_headers_available = 0;
|
||||
|
|
@ -780,8 +780,8 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
|
|||
s->cbs = cronet_bidirectional_stream_create(s->curr_ct.engine, s->curr_gs,
|
||||
&cronet_callbacks);
|
||||
CRONET_LOG(GPR_DEBUG, "%p = cronet_bidirectional_stream_create()", s->cbs);
|
||||
char *url;
|
||||
const char *method;
|
||||
char *url = NULL;
|
||||
const char *method = "POST";
|
||||
s->header_array.headers = NULL;
|
||||
convert_metadata_to_cronet_headers(
|
||||
stream_op->send_initial_metadata->list.head, s->curr_ct.host, &url,
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@
|
|||
#include <grpc/status.h>
|
||||
#include <grpc/support/time.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/// Opaque representation of an error.
|
||||
/// Errors are refcounted objects that represent the result of an operation.
|
||||
/// Ownership laws:
|
||||
|
|
@ -204,4 +208,8 @@ bool grpc_log_if_error(const char *what, grpc_error *error, const char *file,
|
|||
#define GRPC_LOG_IF_ERROR(what, error) \
|
||||
grpc_log_if_error((what), (error), __FILE__, __LINE__)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_CORE_LIB_IOMGR_ERROR_H */
|
||||
|
|
|
|||
|
|
@ -242,8 +242,17 @@ static grpc_security_status composite_channel_create_security_connector(
|
|||
return status;
|
||||
}
|
||||
|
||||
static grpc_channel_credentials *
|
||||
composite_channel_duplicate_without_call_credentials(
|
||||
grpc_channel_credentials *creds) {
|
||||
grpc_composite_channel_credentials *c =
|
||||
(grpc_composite_channel_credentials *)creds;
|
||||
return grpc_channel_credentials_ref(c->inner_creds);
|
||||
}
|
||||
|
||||
static grpc_channel_credentials_vtable composite_channel_credentials_vtable = {
|
||||
composite_channel_destruct, composite_channel_create_security_connector};
|
||||
composite_channel_destruct, composite_channel_create_security_connector,
|
||||
composite_channel_duplicate_without_call_credentials};
|
||||
|
||||
grpc_channel_credentials *grpc_composite_channel_credentials_create(
|
||||
grpc_channel_credentials *channel_creds, grpc_call_credentials *call_creds,
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ grpc_call_credentials *grpc_credentials_contains_type(
|
|||
grpc_call_credentials *creds, const char *type,
|
||||
grpc_call_credentials **composite_creds);
|
||||
|
||||
/* -- Channel composite credentials. -- */
|
||||
/* -- Composite channel credentials. -- */
|
||||
|
||||
typedef struct {
|
||||
grpc_channel_credentials base;
|
||||
|
|
@ -61,7 +61,7 @@ typedef struct {
|
|||
grpc_call_credentials *call_creds;
|
||||
} grpc_composite_channel_credentials;
|
||||
|
||||
/* -- Composite credentials. -- */
|
||||
/* -- Composite call credentials. -- */
|
||||
|
||||
typedef struct {
|
||||
grpc_call_credentials base;
|
||||
|
|
|
|||
|
|
@ -138,6 +138,18 @@ grpc_security_status grpc_channel_credentials_create_security_connector(
|
|||
channel_creds, NULL, target, args, sc, new_args);
|
||||
}
|
||||
|
||||
grpc_channel_credentials *
|
||||
grpc_channel_credentials_duplicate_without_call_credentials(
|
||||
grpc_channel_credentials *channel_creds) {
|
||||
if (channel_creds != NULL && channel_creds->vtable != NULL &&
|
||||
channel_creds->vtable->duplicate_without_call_credentials != NULL) {
|
||||
return channel_creds->vtable->duplicate_without_call_credentials(
|
||||
channel_creds);
|
||||
} else {
|
||||
return grpc_channel_credentials_ref(channel_creds);
|
||||
}
|
||||
}
|
||||
|
||||
grpc_server_credentials *grpc_server_credentials_ref(
|
||||
grpc_server_credentials *creds) {
|
||||
if (creds == NULL) return NULL;
|
||||
|
|
|
|||
|
|
@ -107,6 +107,9 @@ typedef struct {
|
|||
grpc_channel_credentials *c, grpc_call_credentials *call_creds,
|
||||
const char *target, const grpc_channel_args *args,
|
||||
grpc_channel_security_connector **sc, grpc_channel_args **new_args);
|
||||
|
||||
grpc_channel_credentials *(*duplicate_without_call_credentials)(
|
||||
grpc_channel_credentials *c);
|
||||
} grpc_channel_credentials_vtable;
|
||||
|
||||
struct grpc_channel_credentials {
|
||||
|
|
@ -128,6 +131,13 @@ grpc_security_status grpc_channel_credentials_create_security_connector(
|
|||
const grpc_channel_args *args, grpc_channel_security_connector **sc,
|
||||
grpc_channel_args **new_args);
|
||||
|
||||
/* Creates a version of the channel credentials without any attached call
|
||||
credentials. This can be used in order to open a channel to a non-trusted
|
||||
gRPC load balancer. */
|
||||
grpc_channel_credentials *
|
||||
grpc_channel_credentials_duplicate_without_call_credentials(
|
||||
grpc_channel_credentials *creds);
|
||||
|
||||
/* --- grpc_credentials_md. --- */
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ fake_transport_security_server_create_security_connector(
|
|||
|
||||
static grpc_channel_credentials_vtable
|
||||
fake_transport_security_credentials_vtable = {
|
||||
NULL, fake_transport_security_create_security_connector};
|
||||
NULL, fake_transport_security_create_security_connector, NULL};
|
||||
|
||||
static grpc_server_credentials_vtable
|
||||
fake_transport_security_server_credentials_vtable = {
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ static grpc_security_status ssl_create_security_connector(
|
|||
}
|
||||
|
||||
static grpc_channel_credentials_vtable ssl_vtable = {
|
||||
ssl_destruct, ssl_create_security_connector};
|
||||
ssl_destruct, ssl_create_security_connector, NULL};
|
||||
|
||||
static void ssl_build_config(const char *pem_root_certs,
|
||||
grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
|
||||
|
|
|
|||
|
|
@ -59,7 +59,8 @@ static ClientContext::GlobalCallbacks* g_client_callbacks =
|
|||
|
||||
ClientContext::ClientContext()
|
||||
: initial_metadata_received_(false),
|
||||
fail_fast_(true),
|
||||
wait_for_ready_(false),
|
||||
wait_for_ready_explicitly_set_(false),
|
||||
idempotent_(false),
|
||||
cacheable_(false),
|
||||
call_(nullptr),
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
#include <vector>
|
||||
|
||||
#include "src/core/lib/channel/channel_stack.h"
|
||||
#include "src/core/lib/security/context/security_context.h"
|
||||
#include "src/core/lib/surface/channel_init.h"
|
||||
#include "src/core/lib/transport/metadata_batch.h"
|
||||
|
||||
|
|
@ -54,11 +55,6 @@
|
|||
/// "name-of-filter", GRPC_SERVER_CHANNEL, INT_MAX, nullptr);
|
||||
/// \endcode
|
||||
|
||||
/// Forward declaration to avoid including the file
|
||||
/// "src/core/lib/security/context/security_context.h"
|
||||
struct grpc_client_security_context;
|
||||
struct grpc_server_security_context;
|
||||
|
||||
namespace grpc {
|
||||
|
||||
/// A C++ wrapper for the \c grpc_metadata_batch struct.
|
||||
|
|
|
|||
|
|
@ -17,17 +17,17 @@
|
|||
</metadata>
|
||||
<files>
|
||||
<!-- forward slashes in src path enable building on Linux -->
|
||||
<file src="protoc_plugins/windows_x86/protoc.exe" target="tools\windows_x86\protoc.exe" />
|
||||
<file src="protoc_plugins/windows_x86/grpc_csharp_plugin.exe" target="tools\windows_x86\grpc_csharp_plugin.exe" />
|
||||
<file src="protoc_plugins/windows_x64/protoc.exe" target="tools\windows_x64\protoc.exe" />
|
||||
<file src="protoc_plugins/windows_x64/grpc_csharp_plugin.exe" target="tools\windows_x64\grpc_csharp_plugin.exe" />
|
||||
<file src="protoc_plugins/linux_x86/protoc" target="tools\linux_x86\protoc" />
|
||||
<file src="protoc_plugins/linux_x86/grpc_csharp_plugin" target="tools\linux_x86\grpc_csharp_plugin" />
|
||||
<file src="protoc_plugins/linux_x64/protoc" target="tools\linux_x64\protoc" />
|
||||
<file src="protoc_plugins/linux_x64/grpc_csharp_plugin" target="tools\linux_x64\grpc_csharp_plugin" />
|
||||
<file src="protoc_plugins/macosx_x86/protoc" target="tools\macosx_x86\protoc" />
|
||||
<file src="protoc_plugins/macosx_x86/grpc_csharp_plugin" target="tools\macosx_x86\grpc_csharp_plugin" />
|
||||
<file src="protoc_plugins/macosx_x64/protoc" target="tools\macosx_x64\protoc" />
|
||||
<file src="protoc_plugins/macosx_x64/grpc_csharp_plugin" target="tools\macosx_x64\grpc_csharp_plugin" />
|
||||
<file src="protoc_plugins/windows_x86/protoc.exe" target="tools/windows_x86/protoc.exe" />
|
||||
<file src="protoc_plugins/windows_x86/grpc_csharp_plugin.exe" target="tools/windows_x86/grpc_csharp_plugin.exe" />
|
||||
<file src="protoc_plugins/windows_x64/protoc.exe" target="tools/windows_x64/protoc.exe" />
|
||||
<file src="protoc_plugins/windows_x64/grpc_csharp_plugin.exe" target="tools/windows_x64/grpc_csharp_plugin.exe" />
|
||||
<file src="protoc_plugins/linux_x86/protoc" target="tools/linux_x86/protoc" />
|
||||
<file src="protoc_plugins/linux_x86/grpc_csharp_plugin" target="tools/linux_x86/grpc_csharp_plugin" />
|
||||
<file src="protoc_plugins/linux_x64/protoc" target="tools/linux_x64/protoc" />
|
||||
<file src="protoc_plugins/linux_x64/grpc_csharp_plugin" target="tools/linux_x64/grpc_csharp_plugin" />
|
||||
<file src="protoc_plugins/macosx_x86/protoc" target="tools/macosx_x86/protoc" />
|
||||
<file src="protoc_plugins/macosx_x86/grpc_csharp_plugin" target="tools/macosx_x86/grpc_csharp_plugin" />
|
||||
<file src="protoc_plugins/macosx_x64/protoc" target="tools/macosx_x64/protoc" />
|
||||
<file src="protoc_plugins/macosx_x64/grpc_csharp_plugin" target="tools/macosx_x64/grpc_csharp_plugin" />
|
||||
</files>
|
||||
</package>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
"version": "1.1.0",
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"ext-grpc": "*",
|
||||
"google/protobuf": "v3.1.0-alpha-1"
|
||||
},
|
||||
"require-dev": {
|
||||
|
|
|
|||
|
|
@ -462,7 +462,6 @@ def _unary_response_in_pool(
|
|||
rpc_event, state, response, response_serializer)
|
||||
if serialized_response is not None:
|
||||
_status(rpc_event, state, serialized_response)
|
||||
return
|
||||
|
||||
|
||||
def _stream_response_in_pool(
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
"license": "BSD-3-Clause",
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"ext-grpc": "*",
|
||||
"google/protobuf": "v3.1.0-alpha-1"
|
||||
},
|
||||
"require-dev": {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
"version": "${settings.php_version.php_composer()}",
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"ext-grpc": "*",
|
||||
"google/protobuf": "v3.1.0-alpha-1"
|
||||
},
|
||||
"require-dev": {
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ static void run_test(const char *target, size_t nops) {
|
|||
op = ops;
|
||||
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
||||
op->data.send_initial_metadata.count = 0;
|
||||
op->flags = GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY;
|
||||
op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY;
|
||||
op->reserved = NULL;
|
||||
op++;
|
||||
op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
|
||||
static void *tag(intptr_t i) { return (void *)i; }
|
||||
|
||||
static void run_test(bool fail_fast) {
|
||||
static void run_test(bool wait_for_ready) {
|
||||
grpc_channel *chan;
|
||||
grpc_call *call;
|
||||
gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(2);
|
||||
|
|
@ -57,7 +57,7 @@ static void run_test(bool fail_fast) {
|
|||
char *details = NULL;
|
||||
size_t details_capacity = 0;
|
||||
|
||||
gpr_log(GPR_INFO, "TEST: fail_fast=%d", fail_fast);
|
||||
gpr_log(GPR_INFO, "TEST: wait_for_ready=%d", wait_for_ready);
|
||||
|
||||
grpc_init();
|
||||
|
||||
|
|
@ -81,7 +81,7 @@ static void run_test(bool fail_fast) {
|
|||
op = ops;
|
||||
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
||||
op->data.send_initial_metadata.count = 0;
|
||||
op->flags = fail_fast ? 0 : GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY;
|
||||
op->flags = wait_for_ready ? GRPC_INITIAL_METADATA_WAIT_FOR_READY : 0;
|
||||
op->reserved = NULL;
|
||||
op++;
|
||||
op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
|
||||
|
|
@ -98,10 +98,10 @@ static void run_test(bool fail_fast) {
|
|||
CQ_EXPECT_COMPLETION(cqv, tag(1), 1);
|
||||
cq_verify(cqv);
|
||||
|
||||
if (fail_fast) {
|
||||
GPR_ASSERT(status == GRPC_STATUS_UNAVAILABLE);
|
||||
} else {
|
||||
if (wait_for_ready) {
|
||||
GPR_ASSERT(status == GRPC_STATUS_DEADLINE_EXCEEDED);
|
||||
} else {
|
||||
GPR_ASSERT(status == GRPC_STATUS_UNAVAILABLE);
|
||||
}
|
||||
|
||||
grpc_completion_queue_shutdown(cq);
|
||||
|
|
@ -122,7 +122,7 @@ static void run_test(bool fail_fast) {
|
|||
|
||||
int main(int argc, char **argv) {
|
||||
grpc_test_init(argc, argv);
|
||||
run_test(true);
|
||||
run_test(false);
|
||||
run_test(true);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ void test_connect(const char *server_host, const char *client_host, int port,
|
|||
op = ops;
|
||||
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
||||
op->data.send_initial_metadata.count = 0;
|
||||
op->flags = expect_ok ? GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY : 0;
|
||||
op->flags = expect_ok ? GRPC_INITIAL_METADATA_WAIT_FOR_READY : 0;
|
||||
op->reserved = NULL;
|
||||
op++;
|
||||
op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ static void simple_delayed_request_body(grpc_end2end_test_config config,
|
|||
op = ops;
|
||||
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
||||
op->data.send_initial_metadata.count = 0;
|
||||
op->flags = GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY;
|
||||
op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY;
|
||||
op->reserved = NULL;
|
||||
op++;
|
||||
op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@
|
|||
|
||||
#include "src/core/lib/http/httpcli.h"
|
||||
#include "src/core/lib/security/credentials/composite/composite_credentials.h"
|
||||
#include "src/core/lib/security/credentials/fake/fake_credentials.h"
|
||||
#include "src/core/lib/security/credentials/google_default/google_default_credentials.h"
|
||||
#include "src/core/lib/security/credentials/jwt/jwt_credentials.h"
|
||||
#include "src/core/lib/security/credentials/oauth2/oauth2_credentials.h"
|
||||
|
|
@ -411,7 +412,7 @@ static grpc_security_status check_channel_oauth2_create_security_connector(
|
|||
static void test_channel_oauth2_composite_creds(void) {
|
||||
grpc_channel_args *new_args;
|
||||
grpc_channel_credentials_vtable vtable = {
|
||||
NULL, check_channel_oauth2_create_security_connector};
|
||||
NULL, check_channel_oauth2_create_security_connector, NULL};
|
||||
grpc_channel_credentials *channel_creds =
|
||||
grpc_mock_channel_credentials_create(&vtable);
|
||||
grpc_call_credentials *oauth2_creds =
|
||||
|
|
@ -495,7 +496,7 @@ check_channel_oauth2_google_iam_create_security_connector(
|
|||
static void test_channel_oauth2_google_iam_composite_creds(void) {
|
||||
grpc_channel_args *new_args;
|
||||
grpc_channel_credentials_vtable vtable = {
|
||||
NULL, check_channel_oauth2_google_iam_create_security_connector};
|
||||
NULL, check_channel_oauth2_google_iam_create_security_connector, NULL};
|
||||
grpc_channel_credentials *channel_creds =
|
||||
grpc_mock_channel_credentials_create(&vtable);
|
||||
grpc_call_credentials *oauth2_creds =
|
||||
|
|
@ -1148,6 +1149,31 @@ static void test_get_well_known_google_credentials_file_path(void) {
|
|||
#endif
|
||||
}
|
||||
|
||||
static void test_channel_creds_duplicate_without_call_creds(void) {
|
||||
grpc_channel_credentials *channel_creds =
|
||||
grpc_fake_transport_security_credentials_create();
|
||||
|
||||
grpc_channel_credentials *dup =
|
||||
grpc_channel_credentials_duplicate_without_call_credentials(
|
||||
channel_creds);
|
||||
GPR_ASSERT(dup == channel_creds);
|
||||
grpc_channel_credentials_unref(dup);
|
||||
|
||||
grpc_call_credentials *call_creds =
|
||||
grpc_access_token_credentials_create("blah", NULL);
|
||||
grpc_channel_credentials *composite_creds =
|
||||
grpc_composite_channel_credentials_create(channel_creds, call_creds,
|
||||
NULL);
|
||||
grpc_call_credentials_unref(call_creds);
|
||||
dup = grpc_channel_credentials_duplicate_without_call_credentials(
|
||||
composite_creds);
|
||||
GPR_ASSERT(dup == channel_creds);
|
||||
grpc_channel_credentials_unref(dup);
|
||||
|
||||
grpc_channel_credentials_unref(channel_creds);
|
||||
grpc_channel_credentials_unref(composite_creds);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
grpc_test_init(argc, argv);
|
||||
grpc_init();
|
||||
|
|
@ -1182,6 +1208,7 @@ int main(int argc, char **argv) {
|
|||
test_metadata_plugin_success();
|
||||
test_metadata_plugin_failure();
|
||||
test_get_well_known_google_credentials_file_path();
|
||||
test_channel_creds_duplicate_without_call_creds();
|
||||
grpc_shutdown();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ TEST_F(CrashTest, KillBeforeWrite) {
|
|||
EchoRequest request;
|
||||
EchoResponse response;
|
||||
ClientContext context;
|
||||
context.set_fail_fast(false);
|
||||
context.set_wait_for_ready(true);
|
||||
|
||||
auto stream = stub->BidiStream(&context);
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ TEST_F(CrashTest, KillAfterWrite) {
|
|||
EchoRequest request;
|
||||
EchoResponse response;
|
||||
ClientContext context;
|
||||
context.set_fail_fast(false);
|
||||
context.set_wait_for_ready(true);
|
||||
|
||||
auto stream = stub->BidiStream(&context);
|
||||
|
||||
|
|
|
|||
|
|
@ -261,7 +261,7 @@ class HybridEnd2endTest : public ::testing::Test {
|
|||
EchoRequest send_request;
|
||||
EchoResponse recv_response;
|
||||
ClientContext cli_ctx;
|
||||
cli_ctx.set_fail_fast(false);
|
||||
cli_ctx.set_wait_for_ready(true);
|
||||
send_request.set_message("Hello");
|
||||
Status recv_status = stub_->Echo(&cli_ctx, send_request, &recv_response);
|
||||
EXPECT_EQ(send_request.message(), recv_response.message());
|
||||
|
|
@ -275,7 +275,7 @@ class HybridEnd2endTest : public ::testing::Test {
|
|||
EchoRequest send_request;
|
||||
EchoResponse recv_response;
|
||||
ClientContext cli_ctx;
|
||||
cli_ctx.set_fail_fast(false);
|
||||
cli_ctx.set_wait_for_ready(true);
|
||||
send_request.set_message("Hello");
|
||||
Status recv_status = stub->Echo(&cli_ctx, send_request, &recv_response);
|
||||
EXPECT_EQ(send_request.message() + "_dup", recv_response.message());
|
||||
|
|
@ -287,7 +287,7 @@ class HybridEnd2endTest : public ::testing::Test {
|
|||
EchoResponse recv_response;
|
||||
grpc::string expected_message;
|
||||
ClientContext cli_ctx;
|
||||
cli_ctx.set_fail_fast(false);
|
||||
cli_ctx.set_wait_for_ready(true);
|
||||
send_request.set_message("Hello");
|
||||
auto stream = stub_->RequestStream(&cli_ctx, &recv_response);
|
||||
for (int i = 0; i < 5; i++) {
|
||||
|
|
@ -304,7 +304,7 @@ class HybridEnd2endTest : public ::testing::Test {
|
|||
EchoRequest request;
|
||||
EchoResponse response;
|
||||
ClientContext context;
|
||||
context.set_fail_fast(false);
|
||||
context.set_wait_for_ready(true);
|
||||
request.set_message("hello");
|
||||
|
||||
auto stream = stub_->ResponseStream(&context, request);
|
||||
|
|
@ -324,7 +324,7 @@ class HybridEnd2endTest : public ::testing::Test {
|
|||
EchoRequest request;
|
||||
EchoResponse response;
|
||||
ClientContext context;
|
||||
context.set_fail_fast(false);
|
||||
context.set_wait_for_ready(true);
|
||||
grpc::string msg("hello");
|
||||
|
||||
auto stream = stub_->BidiStream(&context);
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ int main(int argc, char** argv) {
|
|||
EchoRequest request;
|
||||
EchoResponse response;
|
||||
grpc::ClientContext context;
|
||||
context.set_fail_fast(false);
|
||||
context.set_wait_for_ready(true);
|
||||
|
||||
if (FLAGS_mode == "bidi") {
|
||||
auto stream = stub->BidiStream(&context);
|
||||
|
|
|
|||
|
|
@ -243,6 +243,7 @@ class AsyncClient : public ClientImpl<StubType, RequestType> {
|
|||
// this thread isn't supposed to shut down
|
||||
std::lock_guard<std::mutex> l(shutdown_state_[thread_idx]->mutex);
|
||||
if (shutdown_state_[thread_idx]->shutdown) {
|
||||
delete ctx;
|
||||
return true;
|
||||
} else if (!ctx->RunNextState(ok, entry)) {
|
||||
// The RPC and callback are done, so clone the ctx
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ static std::unordered_map<string, std::deque<int>> get_hosts_and_cores(
|
|||
auto stub = WorkerService::NewStub(
|
||||
CreateChannel(*it, InsecureChannelCredentials()));
|
||||
grpc::ClientContext ctx;
|
||||
ctx.set_fail_fast(false);
|
||||
ctx.set_wait_for_ready(true);
|
||||
CoreRequest dummy;
|
||||
CoreResponse cores;
|
||||
grpc::Status s = stub->CoreCount(&ctx, dummy, &cores);
|
||||
|
|
@ -167,7 +167,7 @@ namespace runsc {
|
|||
static ClientContext* AllocContext(list<ClientContext>* contexts) {
|
||||
contexts->emplace_back();
|
||||
auto context = &contexts->back();
|
||||
context->set_fail_fast(false);
|
||||
context->set_wait_for_ready(true);
|
||||
return context;
|
||||
}
|
||||
|
||||
|
|
@ -527,7 +527,7 @@ bool RunQuit() {
|
|||
CreateChannel(workers[i], InsecureChannelCredentials()));
|
||||
Void dummy;
|
||||
grpc::ClientContext ctx;
|
||||
ctx.set_fail_fast(false);
|
||||
ctx.set_wait_for_ready(true);
|
||||
Status s = stub->QuitWorker(&ctx, dummy, &dummy);
|
||||
if (!s.ok()) {
|
||||
gpr_log(GPR_ERROR, "Worker %zu could not be properly quit because %s", i,
|
||||
|
|
|
|||
|
|
@ -46,6 +46,6 @@ make install
|
|||
|
||||
(cd third_party/protobuf && make install)
|
||||
|
||||
(cd src/php && composer install)
|
||||
(cd src/php && php -d extension=ext/grpc/modules/grpc.so /usr/local/bin/composer install)
|
||||
|
||||
(cd src/php && ./bin/generate_proto_php.sh)
|
||||
|
|
|
|||
|
|
@ -46,6 +46,6 @@ make install
|
|||
|
||||
(cd third_party/protobuf && make install)
|
||||
|
||||
(cd src/php && composer install)
|
||||
(cd src/php && php -d extension=ext/grpc/modules/grpc.so /usr/local/bin/composer install)
|
||||
|
||||
(cd src/php && ./bin/generate_proto_php.sh)
|
||||
|
|
|
|||
|
|
@ -48,6 +48,6 @@ make install
|
|||
|
||||
(cd third_party/protobuf && make install)
|
||||
|
||||
(cd src/php && composer install)
|
||||
(cd src/php && php -d extension=ext/grpc/modules/grpc.so /usr/local/bin/composer install)
|
||||
|
||||
(cd src/php && ./bin/generate_proto_php.sh)
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ CONTAINER_NAME="run_tests_$(uuidgen)"
|
|||
docker_instance_git_root=/var/local/jenkins/grpc
|
||||
|
||||
# Run tests inside docker
|
||||
DOCKER_EXIT_CODE=0
|
||||
docker run \
|
||||
-e "RUN_TESTS_COMMAND=$RUN_TESTS_COMMAND" \
|
||||
-e "config=$config" \
|
||||
|
|
@ -81,7 +82,7 @@ docker run \
|
|||
-w /var/local/git/grpc \
|
||||
--name=$CONTAINER_NAME \
|
||||
$DOCKER_IMAGE_NAME \
|
||||
bash -l "/var/local/jenkins/grpc/$DOCKER_RUN_SCRIPT" || DOCKER_FAILED="true"
|
||||
bash -l "/var/local/jenkins/grpc/$DOCKER_RUN_SCRIPT" || DOCKER_EXIT_CODE=$?
|
||||
|
||||
# use unique name for reports.zip to prevent clash between concurrent
|
||||
# run_tests.py runs
|
||||
|
|
@ -93,7 +94,4 @@ rm -f ${TEMP_REPORTS_ZIP}
|
|||
# remove the container, possibly killing it first
|
||||
docker rm -f $CONTAINER_NAME || true
|
||||
|
||||
if [ "$DOCKER_FAILED" != "" ] && [ "$XML_REPORT" == "" ]
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
exit $DOCKER_EXIT_CODE
|
||||
|
|
|
|||
|
|
@ -1423,7 +1423,7 @@ else:
|
|||
exit_code = 0
|
||||
if BuildAndRunError.BUILD in errors:
|
||||
exit_code |= 1
|
||||
if BuildAndRunError.TEST in errors and not args.travis:
|
||||
if BuildAndRunError.TEST in errors:
|
||||
exit_code |= 2
|
||||
if BuildAndRunError.POST_TEST in errors:
|
||||
exit_code |= 4
|
||||
|
|
|
|||
Loading…
Reference in New Issue