Merge branch 'master' into cq_mpsc_based

pull/10662/head
Sree Kuchibhotla 8 years ago
commit abc24c5317
  1. 2
      BUILD
  2. 2
      build.yaml
  3. 1
      doc/g_stands_for.md
  4. 2
      include/grpc++/impl/codegen/proto_utils.h
  5. 15
      src/core/ext/filters/client_channel/subchannel.c
  6. 4
      src/core/lib/channel/connected_channel.c
  7. 10
      src/core/lib/security/transport/client_auth_filter.c
  8. 28
      src/core/lib/support/avl.c
  9. 2
      src/core/lib/surface/version.c
  10. 2
      src/python/grpcio/README.rst
  11. BIN
      test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-minimized-5175380371570688
  12. 8
      test/core/end2end/tests/resource_quota_server.c
  13. 2
      tools/profiling/microbenchmarks/bm_diff.py
  14. 23
      tools/run_tests/generated/tests.json

@ -39,7 +39,7 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_library",
"grpc_proto_plugin", "grpc_cc_libraries") "grpc_proto_plugin", "grpc_cc_libraries")
# This should be updated along with build.yaml # This should be updated along with build.yaml
g_stands_for = "gentle" g_stands_for = "gregarious"
core_version = "3.0.0-dev" core_version = "3.0.0-dev"

@ -13,7 +13,7 @@ settings:
'#09': Per-language overrides are possible with (eg) ruby_version tag here '#09': Per-language overrides are possible with (eg) ruby_version tag here
'#10': See the expand_version.py for all the quirks here '#10': See the expand_version.py for all the quirks here
core_version: 4.0.0-dev core_version: 4.0.0-dev
g_stands_for: gentle g_stands_for: gregarious
version: 1.4.0-dev version: 1.4.0-dev
filegroups: filegroups:
- name: census - name: census

@ -8,3 +8,4 @@ future), and the corresponding version numbers that used them:
- 1.1 'g' stands for 'good' - 1.1 'g' stands for 'good'
- 1.2 'g' stands for 'green' - 1.2 'g' stands for 'green'
- 1.3 'g' stands for 'gentle' - 1.3 'g' stands for 'gentle'
- 1.4 'g' stands for 'gregarious'

@ -52,7 +52,7 @@ namespace internal {
class GrpcBufferWriterPeer; class GrpcBufferWriterPeer;
const int kGrpcBufferWriterMaxBufferLength = 8192; const int kGrpcBufferWriterMaxBufferLength = 1024 * 1024;
class GrpcBufferWriter final class GrpcBufferWriter final
: public ::grpc::protobuf::io::ZeroCopyOutputStream { : public ::grpc::protobuf::io::ZeroCopyOutputStream {

@ -615,7 +615,7 @@ void grpc_connected_subchannel_ping(grpc_exec_ctx *exec_ctx,
elem->filter->start_transport_op(exec_ctx, elem, op); elem->filter->start_transport_op(exec_ctx, elem, op);
} }
static void publish_transport_locked(grpc_exec_ctx *exec_ctx, static bool publish_transport_locked(grpc_exec_ctx *exec_ctx,
grpc_subchannel *c) { grpc_subchannel *c) {
grpc_connected_subchannel *con; grpc_connected_subchannel *con;
grpc_channel_stack *stk; grpc_channel_stack *stk;
@ -631,15 +631,16 @@ static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
if (!grpc_channel_init_create_stack(exec_ctx, builder, if (!grpc_channel_init_create_stack(exec_ctx, builder,
GRPC_CLIENT_SUBCHANNEL)) { GRPC_CLIENT_SUBCHANNEL)) {
grpc_channel_stack_builder_destroy(exec_ctx, builder); grpc_channel_stack_builder_destroy(exec_ctx, builder);
abort(); /* TODO(ctiller): what to do here (previously we just crashed) */ return false;
} }
grpc_error *error = grpc_channel_stack_builder_finish( grpc_error *error = grpc_channel_stack_builder_finish(
exec_ctx, builder, 0, 1, connection_destroy, NULL, (void **)&con); exec_ctx, builder, 0, 1, connection_destroy, NULL, (void **)&con);
if (error != GRPC_ERROR_NONE) { if (error != GRPC_ERROR_NONE) {
grpc_transport_destroy(exec_ctx, c->connecting_result.transport);
gpr_log(GPR_ERROR, "error initializing subchannel stack: %s", gpr_log(GPR_ERROR, "error initializing subchannel stack: %s",
grpc_error_string(error)); grpc_error_string(error));
GRPC_ERROR_UNREF(error); GRPC_ERROR_UNREF(error);
abort(); /* TODO(ctiller): what to do here? */ return false;
} }
stk = CHANNEL_STACK_FROM_CONNECTION(con); stk = CHANNEL_STACK_FROM_CONNECTION(con);
memset(&c->connecting_result, 0, sizeof(c->connecting_result)); memset(&c->connecting_result, 0, sizeof(c->connecting_result));
@ -656,7 +657,7 @@ static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
grpc_channel_stack_destroy(exec_ctx, stk); grpc_channel_stack_destroy(exec_ctx, stk);
gpr_free(con); gpr_free(con);
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting"); GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
return; return false;
} }
/* publish */ /* publish */
@ -678,6 +679,7 @@ static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
/* signal completion */ /* signal completion */
grpc_connectivity_state_set(exec_ctx, &c->state_tracker, GRPC_CHANNEL_READY, grpc_connectivity_state_set(exec_ctx, &c->state_tracker, GRPC_CHANNEL_READY,
GRPC_ERROR_NONE, "connected"); GRPC_ERROR_NONE, "connected");
return true;
} }
static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg, static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg,
@ -688,8 +690,9 @@ static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg,
GRPC_SUBCHANNEL_WEAK_REF(c, "connected"); GRPC_SUBCHANNEL_WEAK_REF(c, "connected");
gpr_mu_lock(&c->mu); gpr_mu_lock(&c->mu);
c->connecting = false; c->connecting = false;
if (c->connecting_result.transport != NULL) { if (c->connecting_result.transport != NULL &&
publish_transport_locked(exec_ctx, c); publish_transport_locked(exec_ctx, c)) {
/* do nothing, transport was published */
} else if (c->disconnected) { } else if (c->disconnected) {
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting"); GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
} else { } else {

@ -128,7 +128,9 @@ static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
static void destroy_channel_elem(grpc_exec_ctx *exec_ctx, static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
grpc_channel_element *elem) { grpc_channel_element *elem) {
channel_data *cd = (channel_data *)elem->channel_data; channel_data *cd = (channel_data *)elem->channel_data;
grpc_transport_destroy(exec_ctx, cd->transport); if (cd->transport) {
grpc_transport_destroy(exec_ctx, cd->transport);
}
} }
static char *con_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) { static char *con_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {

@ -343,8 +343,16 @@ static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
grpc_channel_element_args *args) { grpc_channel_element_args *args) {
grpc_security_connector *sc = grpc_security_connector *sc =
grpc_security_connector_find_in_args(args->channel_args); grpc_security_connector_find_in_args(args->channel_args);
if (sc == NULL) {
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"Security connector missing from client auth filter args");
}
grpc_auth_context *auth_context = grpc_auth_context *auth_context =
grpc_find_auth_context_in_args(args->channel_args); grpc_find_auth_context_in_args(args->channel_args);
if (auth_context == NULL) {
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"Auth context missing from client auth filter args");
}
/* grab pointers to our data from the channel element */ /* grab pointers to our data from the channel element */
channel_data *chand = elem->channel_data; channel_data *chand = elem->channel_data;
@ -353,8 +361,6 @@ static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
handle the case that there's no 'next' filter to call on the up or down handle the case that there's no 'next' filter to call on the up or down
path */ path */
GPR_ASSERT(!args->is_last); GPR_ASSERT(!args->is_last);
GPR_ASSERT(sc != NULL);
GPR_ASSERT(auth_context != NULL);
/* initialize members */ /* initialize members */
chand->security_connector = chand->security_connector =

@ -205,8 +205,8 @@ static gpr_avl_node *rebalance(const gpr_avl_vtable *vtable, void *key,
} }
} }
static gpr_avl_node *add(const gpr_avl_vtable *vtable, gpr_avl_node *node, static gpr_avl_node *add_key(const gpr_avl_vtable *vtable, gpr_avl_node *node,
void *key, void *value) { void *key, void *value) {
long cmp; long cmp;
if (node == NULL) { if (node == NULL) {
return new_node(key, value, NULL, NULL); return new_node(key, value, NULL, NULL);
@ -217,17 +217,17 @@ static gpr_avl_node *add(const gpr_avl_vtable *vtable, gpr_avl_node *node,
} else if (cmp > 0) { } else if (cmp > 0) {
return rebalance( return rebalance(
vtable, vtable->copy_key(node->key), vtable->copy_value(node->value), vtable, vtable->copy_key(node->key), vtable->copy_value(node->value),
add(vtable, node->left, key, value), ref_node(node->right)); add_key(vtable, node->left, key, value), ref_node(node->right));
} else { } else {
return rebalance(vtable, vtable->copy_key(node->key), return rebalance(vtable, vtable->copy_key(node->key),
vtable->copy_value(node->value), ref_node(node->left), vtable->copy_value(node->value), ref_node(node->left),
add(vtable, node->right, key, value)); add_key(vtable, node->right, key, value));
} }
} }
gpr_avl gpr_avl_add(gpr_avl avl, void *key, void *value) { gpr_avl gpr_avl_add(gpr_avl avl, void *key, void *value) {
gpr_avl_node *old_root = avl.root; gpr_avl_node *old_root = avl.root;
avl.root = add(avl.vtable, avl.root, key, value); avl.root = add_key(avl.vtable, avl.root, key, value);
assert_invariants(avl.root); assert_invariants(avl.root);
unref_node(avl.vtable, old_root); unref_node(avl.vtable, old_root);
return avl; return avl;
@ -247,8 +247,8 @@ static gpr_avl_node *in_order_tail(gpr_avl_node *node) {
return node; return node;
} }
static gpr_avl_node *remove(const gpr_avl_vtable *vtable, gpr_avl_node *node, static gpr_avl_node *remove_key(const gpr_avl_vtable *vtable,
void *key) { gpr_avl_node *node, void *key) {
long cmp; long cmp;
if (node == NULL) { if (node == NULL) {
return NULL; return NULL;
@ -263,27 +263,27 @@ static gpr_avl_node *remove(const gpr_avl_vtable *vtable, gpr_avl_node *node,
gpr_avl_node *h = in_order_head(node->right); gpr_avl_node *h = in_order_head(node->right);
return rebalance(vtable, vtable->copy_key(h->key), return rebalance(vtable, vtable->copy_key(h->key),
vtable->copy_value(h->value), ref_node(node->left), vtable->copy_value(h->value), ref_node(node->left),
remove(vtable, node->right, h->key)); remove_key(vtable, node->right, h->key));
} else { } else {
gpr_avl_node *h = in_order_tail(node->left); gpr_avl_node *h = in_order_tail(node->left);
return rebalance( return rebalance(
vtable, vtable->copy_key(h->key), vtable->copy_value(h->value), vtable, vtable->copy_key(h->key), vtable->copy_value(h->value),
remove(vtable, node->left, h->key), ref_node(node->right)); remove_key(vtable, node->left, h->key), ref_node(node->right));
} }
} else if (cmp > 0) { } else if (cmp > 0) {
return rebalance(vtable, vtable->copy_key(node->key), return rebalance(
vtable->copy_value(node->value), vtable, vtable->copy_key(node->key), vtable->copy_value(node->value),
remove(vtable, node->left, key), ref_node(node->right)); remove_key(vtable, node->left, key), ref_node(node->right));
} else { } else {
return rebalance(vtable, vtable->copy_key(node->key), return rebalance(vtable, vtable->copy_key(node->key),
vtable->copy_value(node->value), ref_node(node->left), vtable->copy_value(node->value), ref_node(node->left),
remove(vtable, node->right, key)); remove_key(vtable, node->right, key));
} }
} }
gpr_avl gpr_avl_remove(gpr_avl avl, void *key) { gpr_avl gpr_avl_remove(gpr_avl avl, void *key) {
gpr_avl_node *old_root = avl.root; gpr_avl_node *old_root = avl.root;
avl.root = remove(avl.vtable, avl.root, key); avl.root = remove_key(avl.vtable, avl.root, key);
assert_invariants(avl.root); assert_invariants(avl.root);
unref_node(avl.vtable, old_root); unref_node(avl.vtable, old_root);
return avl; return avl;

@ -38,4 +38,4 @@
const char *grpc_version_string(void) { return "4.0.0-dev"; } const char *grpc_version_string(void) { return "4.0.0-dev"; }
const char *grpc_g_stands_for(void) { return "gentle"; } const char *grpc_g_stands_for(void) { return "gregarious"; }

@ -6,7 +6,7 @@ Package for gRPC Python.
Installation Installation
------------ ------------
gRPC Python is available for Linux, Mac OS X, and Windows running Python 2.7. gRPC Python is available for Linux, macOS, and Windows.
From PyPI From PyPI
~~~~~~~~~ ~~~~~~~~~

@ -169,6 +169,7 @@ void resource_quota_server(grpc_end2end_test_config config) {
int cancelled_calls_on_client = 0; int cancelled_calls_on_client = 0;
int cancelled_calls_on_server = 0; int cancelled_calls_on_server = 0;
int deadline_exceeded = 0; int deadline_exceeded = 0;
int unavailable = 0;
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_raw_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
@ -260,6 +261,9 @@ void resource_quota_server(grpc_end2end_test_config config) {
case GRPC_STATUS_DEADLINE_EXCEEDED: case GRPC_STATUS_DEADLINE_EXCEEDED:
deadline_exceeded++; deadline_exceeded++;
break; break;
case GRPC_STATUS_UNAVAILABLE:
unavailable++;
break;
case GRPC_STATUS_OK: case GRPC_STATUS_OK:
break; break;
default: default:
@ -358,9 +362,9 @@ void resource_quota_server(grpc_end2end_test_config config) {
gpr_log(GPR_INFO, gpr_log(GPR_INFO,
"Done. %d total calls: %d cancelled at server, %d cancelled at " "Done. %d total calls: %d cancelled at server, %d cancelled at "
"client, %d timed out.", "client, %d timed out, %d unavailable.",
NUM_CALLS, cancelled_calls_on_server, cancelled_calls_on_client, NUM_CALLS, cancelled_calls_on_server, cancelled_calls_on_client,
deadline_exceeded); deadline_exceeded, unavailable);
grpc_byte_buffer_destroy(request_payload); grpc_byte_buffer_destroy(request_payload);
grpc_slice_unref(request_payload_slice); grpc_slice_unref(request_payload_slice);

@ -248,8 +248,8 @@ def finalize():
text = 'Performance differences noted:\n' + tabulate.tabulate(rows, headers=headers, floatfmt='+.2f') text = 'Performance differences noted:\n' + tabulate.tabulate(rows, headers=headers, floatfmt='+.2f')
else: else:
text = 'No significant performance differences' text = 'No significant performance differences'
comment_on_pr.comment_on_pr('```\n%s\n```' % text)
print text print text
comment_on_pr.comment_on_pr('```\n%s\n```' % text)
eintr_be_gone(finalize) eintr_be_gone(finalize)

@ -85302,6 +85302,29 @@
], ],
"uses_polling": false "uses_polling": false
}, },
{
"args": [
"test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-minimized-5175380371570688"
],
"ci_platforms": [
"linux"
],
"cpu_cost": 0.1,
"exclude_configs": [
"tsan"
],
"exclude_iomgrs": [
"uv"
],
"flaky": false,
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
"mac",
"linux"
],
"uses_polling": false
},
{ {
"args": [ "args": [
"test/core/end2end/fuzzers/api_fuzzer_corpus/crash-0597bbdd657fa4ed14443994c9147a1a7bbc205f" "test/core/end2end/fuzzers/api_fuzzer_corpus/crash-0597bbdd657fa4ed14443994c9147a1a7bbc205f"

Loading…
Cancel
Save