Changes to byte_buffer based on comments.

pull/1963/head
David Garcia Quintas 10 years ago
parent 237443faa4
commit 59f905d79a
  1. 2
      BUILD
  2. 2
      Makefile
  3. 1
      build.json
  4. 1
      include/grpc++/byte_buffer.h
  5. 51
      include/grpc/byte_buffer.h
  6. 8
      include/grpc/byte_buffer_reader.h
  7. 8
      include/grpc/census.h
  8. 4
      include/grpc/grpc_security.h
  9. 3
      include/grpc/support/tls_pthread.h
  10. 2
      src/core/compression/algorithm.c
  11. 49
      src/core/compression/algorithm.h
  12. 2
      src/core/compression/message_compress.h
  13. 44
      src/core/surface/byte_buffer.c
  14. 65
      src/core/surface/byte_buffer_reader.c
  15. 11
      src/core/surface/call.c
  16. 44
      src/core/transport/chttp2_transport.c
  17. 4
      src/cpp/proto/proto_utils.cc
  18. 2
      src/cpp/util/byte_buffer.cc
  19. 2
      src/csharp/ext/grpc_csharp_ext.c
  20. 2
      src/node/ext/byte_buffer.cc
  21. 4
      src/objective-c/GRPCClient/private/NSData+GRPC.m
  22. 2
      src/php/ext/grpc/byte_buffer.c
  23. 2
      src/python/src/grpc/_adapter/_c/utility.c
  24. 2
      src/ruby/ext/grpc/rb_byte_buffer.c
  25. 3
      test/core/end2end/cq_verifier.c
  26. 4
      test/core/end2end/tests/cancel_after_accept.c
  27. 4
      test/core/end2end/tests/cancel_after_accept_and_writes_closed.c
  28. 2
      test/core/end2end/tests/cancel_after_invoke.c
  29. 2
      test/core/end2end/tests/cancel_before_invoke.c
  30. 4
      test/core/end2end/tests/invoke_large_request.c
  31. 2
      test/core/end2end/tests/max_message_length.c
  32. 4
      test/core/end2end/tests/ping_pong_streaming.c
  33. 4
      test/core/end2end/tests/request_response_with_binary_metadata_and_payload.c
  34. 4
      test/core/end2end/tests/request_response_with_metadata_and_payload.c
  35. 4
      test/core/end2end/tests/request_response_with_payload.c
  36. 4
      test/core/end2end/tests/request_response_with_payload_and_call_creds.c
  37. 4
      test/core/end2end/tests/request_response_with_trailing_metadata_and_payload.c
  38. 2
      test/core/end2end/tests/request_with_large_metadata.c
  39. 2
      test/core/end2end/tests/request_with_payload.c
  40. 2
      test/core/fling/client.c
  41. 10
      test/core/surface/byte_buffer_reader_test.c
  42. 2
      test/cpp/qps/qps_driver.cc
  43. 2
      test/cpp/qps/qps_test.cc
  44. 3
      test/cpp/qps/server_async.cc
  45. 2
      tools/doxygen/Doxyfile.core
  46. 2
      tools/doxygen/Doxyfile.core.internal
  47. 1
      vsprojects/grpc/grpc.vcxproj
  48. 3
      vsprojects/grpc/grpc.vcxproj.filters
  49. 1
      vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
  50. 3
      vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters

@ -347,6 +347,7 @@ cc_library(
"include/grpc/grpc_security.h", "include/grpc/grpc_security.h",
"include/grpc/byte_buffer.h", "include/grpc/byte_buffer.h",
"include/grpc/byte_buffer_reader.h", "include/grpc/byte_buffer_reader.h",
"include/grpc/compression.h",
"include/grpc/grpc.h", "include/grpc/grpc.h",
"include/grpc/status.h", "include/grpc/status.h",
"include/grpc/census.h", "include/grpc/census.h",
@ -545,6 +546,7 @@ cc_library(
hdrs = [ hdrs = [
"include/grpc/byte_buffer.h", "include/grpc/byte_buffer.h",
"include/grpc/byte_buffer_reader.h", "include/grpc/byte_buffer_reader.h",
"include/grpc/compression.h",
"include/grpc/grpc.h", "include/grpc/grpc.h",
"include/grpc/status.h", "include/grpc/status.h",
"include/grpc/census.h", "include/grpc/census.h",

@ -3038,6 +3038,7 @@ PUBLIC_HEADERS_C += \
include/grpc/grpc_security.h \ include/grpc/grpc_security.h \
include/grpc/byte_buffer.h \ include/grpc/byte_buffer.h \
include/grpc/byte_buffer_reader.h \ include/grpc/byte_buffer_reader.h \
include/grpc/compression.h \
include/grpc/grpc.h \ include/grpc/grpc.h \
include/grpc/status.h \ include/grpc/status.h \
include/grpc/census.h \ include/grpc/census.h \
@ -3280,6 +3281,7 @@ LIBGRPC_UNSECURE_SRC = \
PUBLIC_HEADERS_C += \ PUBLIC_HEADERS_C += \
include/grpc/byte_buffer.h \ include/grpc/byte_buffer.h \
include/grpc/byte_buffer_reader.h \ include/grpc/byte_buffer_reader.h \
include/grpc/compression.h \
include/grpc/grpc.h \ include/grpc/grpc.h \
include/grpc/status.h \ include/grpc/status.h \
include/grpc/census.h \ include/grpc/census.h \

@ -101,6 +101,7 @@
"public_headers": [ "public_headers": [
"include/grpc/byte_buffer.h", "include/grpc/byte_buffer.h",
"include/grpc/byte_buffer_reader.h", "include/grpc/byte_buffer_reader.h",
"include/grpc/compression.h",
"include/grpc/grpc.h", "include/grpc/grpc.h",
"include/grpc/status.h" "include/grpc/status.h"
], ],

@ -35,6 +35,7 @@
#define GRPCXX_BYTE_BUFFER_H #define GRPCXX_BYTE_BUFFER_H
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include <grpc/byte_buffer.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc++/config.h> #include <grpc++/config.h>
#include <grpc++/slice.h> #include <grpc++/slice.h>

@ -34,45 +34,44 @@
#ifndef GRPC_BYTE_BUFFER_H #ifndef GRPC_BYTE_BUFFER_H
#define GRPC_BYTE_BUFFER_H #define GRPC_BYTE_BUFFER_H
#include <grpc/compression.h>
#include <grpc/support/slice_buffer.h> #include <grpc/support/slice_buffer.h>
typedef enum { #ifdef __cplusplus
GRPC_BB_SLICE_BUFFER, extern "C" {
#endif
/* Keep the GRPC_BB_COMPRESSED_* entries in the same order as the typedef enum {
* grpc_compression_algorithm enum entries. */ GRPC_BB_RAW
GRPC_BB_COMPRESSED_NONE, /* for overriding otherwise compressed channels */ /* Future types may include GRPC_BB_PROTOBUF, etc. */
GRPC_BB_COMPRESSED_DEFLATE,
GRPC_BB_COMPRESSED_GZIP
} grpc_byte_buffer_type; } grpc_byte_buffer_type;
/* byte buffers are containers for messages passed in from the public api's */
struct grpc_byte_buffer { struct grpc_byte_buffer {
grpc_byte_buffer_type type; grpc_byte_buffer_type type;
union { union {
struct {
grpc_compression_algorithm compression;
gpr_slice_buffer slice_buffer; gpr_slice_buffer slice_buffer;
} raw;
} data; } data;
}; };
typedef struct grpc_byte_buffer grpc_byte_buffer; typedef struct grpc_byte_buffer grpc_byte_buffer;
/** Returns the grpc_compression_algorithm enum value for a /** Returns a RAW byte buffer instance over the given slices (up to \a nslices).
* grpc_byte_buffer_type GRPC_BB_COMPRESSED_* value. */
#define GRPC_COMPRESS_ALGORITHM_FROM_BB_TYPE(bb_type) \
(bb_type - GRPC_BB_COMPRESSED_NONE)
/** Returns a byte buffer instance over the given slices (up to \a nslices) of
* \a type type.
* *
* Increases the reference count for all \a slices processed. * Increases the reference count for all \a slices processed. The user is
* responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
grpc_byte_buffer *grpc_raw_byte_buffer_create(gpr_slice *slices,
size_t nslices);
/** Returns a *compressed* RAW byte buffer instance over the given slices (up to
* \a nslices). The \a compression argument defines the compression algorithm
* used to generate the data in \a slices.
* *
* The user is responsible for invoking grpc_byte_buffer_destroy on * Increases the reference count for all \a slices processed. The user is
* the returned instance. */ * responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
grpc_byte_buffer *grpc_byte_buffer_typed_create(gpr_slice *slices, grpc_byte_buffer *grpc_raw_compressed_byte_buffer_create(
size_t nslices, gpr_slice *slices, size_t nslices, grpc_compression_algorithm compression);
grpc_byte_buffer_type type);
/** Convenience method for creating GRPC_BB_SLICE_BUFFER byte buffers. \sa
* grpc_byte_buffer_typed_create */
grpc_byte_buffer *grpc_byte_buffer_create(gpr_slice *slices, size_t nslices);
/** Copies input byte buffer \a bb. /** Copies input byte buffer \a bb.
* *
@ -104,4 +103,8 @@ void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader);
int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader, int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
gpr_slice *slice); gpr_slice *slice);
#ifdef __cplusplus
}
#endif
#endif /* GRPC_BYTE_BUFFER_H */ #endif /* GRPC_BYTE_BUFFER_H */

@ -37,6 +37,10 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include <grpc/byte_buffer.h> #include <grpc/byte_buffer.h>
#ifdef __cplusplus
extern "C" {
#endif
struct grpc_byte_buffer_reader { struct grpc_byte_buffer_reader {
grpc_byte_buffer *buffer_in; grpc_byte_buffer *buffer_in;
grpc_byte_buffer *buffer_out; grpc_byte_buffer *buffer_out;
@ -47,4 +51,8 @@ struct grpc_byte_buffer_reader {
} current; } current;
}; };
#ifdef __cplusplus
}
#endif
#endif /* GRPC_BYTE_BUFFER_READER_H */ #endif /* GRPC_BYTE_BUFFER_READER_H */

@ -40,6 +40,10 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Identify census functionality that can be enabled via census_initialize(). */ /* Identify census functionality that can be enabled via census_initialize(). */
enum census_functions { enum census_functions {
CENSUS_NONE = 0, /* Do not enable census. */ CENSUS_NONE = 0, /* Do not enable census. */
@ -92,4 +96,8 @@ int census_context_deserialize(const char *buffer, census_context **context);
* future census calls will result in undefined behavior. */ * future census calls will result in undefined behavior. */
void census_context_destroy(census_context *context); void census_context_destroy(census_context *context);
#ifdef __cplusplus
}
#endif
#endif /* CENSUS_CENSUS_H */ #endif /* CENSUS_CENSUS_H */

@ -34,8 +34,8 @@
#ifndef GRPC_GRPC_SECURITY_H #ifndef GRPC_GRPC_SECURITY_H
#define GRPC_GRPC_SECURITY_H #define GRPC_GRPC_SECURITY_H
#include "grpc.h" #include <grpc/grpc.h>
#include "status.h" #include <grpc/status.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {

@ -49,6 +49,9 @@ struct gpr_pthread_thread_local {
#define gpr_tls_init(tls) GPR_ASSERT(0 == pthread_key_create(&(tls)->key, NULL)) #define gpr_tls_init(tls) GPR_ASSERT(0 == pthread_key_create(&(tls)->key, NULL))
#define gpr_tls_destroy(tls) pthread_key_delete((tls)->key) #define gpr_tls_destroy(tls) pthread_key_delete((tls)->key)
#ifdef __cplusplus
extern "C"
#endif
gpr_intptr gpr_tls_set(struct gpr_pthread_thread_local *tls, gpr_intptr value); gpr_intptr gpr_tls_set(struct gpr_pthread_thread_local *tls, gpr_intptr value);
#define gpr_tls_get(tls) ((gpr_intptr)pthread_getspecific((tls)->key)) #define gpr_tls_get(tls) ((gpr_intptr)pthread_getspecific((tls)->key))

@ -31,7 +31,7 @@
* *
*/ */
#include "src/core/compression/algorithm.h" #include <grpc/compression.h>
const char *grpc_compression_algorithm_name( const char *grpc_compression_algorithm_name(
grpc_compression_algorithm algorithm) { grpc_compression_algorithm algorithm) {

@ -1,49 +0,0 @@
/*
*
* Copyright 2015, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef GRPC_INTERNAL_CORE_COMPRESSION_ALGORITHM_H
#define GRPC_INTERNAL_CORE_COMPRESSION_ALGORITHM_H
/* The various compression algorithms supported by GRPC */
typedef enum {
GRPC_COMPRESS_NONE = 0,
GRPC_COMPRESS_DEFLATE,
GRPC_COMPRESS_GZIP,
/* TODO(ctiller): snappy */
GRPC_COMPRESS_ALGORITHMS_COUNT
} grpc_compression_algorithm;
const char *grpc_compression_algorithm_name(
grpc_compression_algorithm algorithm);
#endif /* GRPC_INTERNAL_CORE_COMPRESSION_ALGORITHM_H */

@ -34,7 +34,7 @@
#ifndef GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H #ifndef GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H
#define GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H #define GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H
#include "src/core/compression/algorithm.h" #include <grpc/compression.h>
#include <grpc/support/slice_buffer.h> #include <grpc/support/slice_buffer.h>
/* compress 'input' to 'output' using 'algorithm'. /* compress 'input' to 'output' using 'algorithm'.

@ -35,35 +35,31 @@
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
grpc_byte_buffer *grpc_byte_buffer_create(gpr_slice *slices, size_t nslices) { grpc_byte_buffer *grpc_raw_byte_buffer_create(gpr_slice *slices,
return grpc_byte_buffer_typed_create(slices, nslices, GRPC_BB_SLICE_BUFFER); size_t nslices) {
return grpc_raw_compressed_byte_buffer_create(slices, nslices,
GRPC_COMPRESS_NONE);
} }
grpc_byte_buffer *grpc_byte_buffer_typed_create(gpr_slice *slices, grpc_byte_buffer *grpc_raw_compressed_byte_buffer_create(
size_t nslices, gpr_slice *slices, size_t nslices, grpc_compression_algorithm compression) {
grpc_byte_buffer_type type) {
size_t i; size_t i;
grpc_byte_buffer *bb = malloc(sizeof(grpc_byte_buffer)); grpc_byte_buffer *bb = malloc(sizeof(grpc_byte_buffer));
bb->type = GRPC_BB_RAW;
bb->type = type; bb->data.raw.compression = compression;
gpr_slice_buffer_init(&bb->data.slice_buffer); gpr_slice_buffer_init(&bb->data.raw.slice_buffer);
for (i = 0; i < nslices; i++) { for (i = 0; i < nslices; i++) {
gpr_slice_ref(slices[i]); gpr_slice_ref(slices[i]);
gpr_slice_buffer_add(&bb->data.slice_buffer, slices[i]); gpr_slice_buffer_add(&bb->data.raw.slice_buffer, slices[i]);
} }
return bb; return bb;
} }
grpc_byte_buffer *grpc_byte_buffer_copy(grpc_byte_buffer *bb) { grpc_byte_buffer *grpc_byte_buffer_copy(grpc_byte_buffer *bb) {
switch (bb->type) { switch (bb->type) {
case GRPC_BB_SLICE_BUFFER: case GRPC_BB_RAW:
case GRPC_BB_COMPRESSED_NONE: return grpc_raw_byte_buffer_create(bb->data.raw.slice_buffer.slices,
case GRPC_BB_COMPRESSED_DEFLATE: bb->data.raw.slice_buffer.count);
case GRPC_BB_COMPRESSED_GZIP:
return grpc_byte_buffer_create(bb->data.slice_buffer.slices,
bb->data.slice_buffer.count);
} }
gpr_log(GPR_INFO, "should never get here"); gpr_log(GPR_INFO, "should never get here");
abort(); abort();
@ -73,11 +69,8 @@ grpc_byte_buffer *grpc_byte_buffer_copy(grpc_byte_buffer *bb) {
void grpc_byte_buffer_destroy(grpc_byte_buffer *bb) { void grpc_byte_buffer_destroy(grpc_byte_buffer *bb) {
if (!bb) return; if (!bb) return;
switch (bb->type) { switch (bb->type) {
case GRPC_BB_SLICE_BUFFER: case GRPC_BB_RAW:
case GRPC_BB_COMPRESSED_NONE: gpr_slice_buffer_destroy(&bb->data.raw.slice_buffer);
case GRPC_BB_COMPRESSED_DEFLATE:
case GRPC_BB_COMPRESSED_GZIP:
gpr_slice_buffer_destroy(&bb->data.slice_buffer);
break; break;
} }
free(bb); free(bb);
@ -85,11 +78,8 @@ void grpc_byte_buffer_destroy(grpc_byte_buffer *bb) {
size_t grpc_byte_buffer_length(grpc_byte_buffer *bb) { size_t grpc_byte_buffer_length(grpc_byte_buffer *bb) {
switch (bb->type) { switch (bb->type) {
case GRPC_BB_SLICE_BUFFER: case GRPC_BB_RAW:
case GRPC_BB_COMPRESSED_NONE: return bb->data.raw.slice_buffer.length;
case GRPC_BB_COMPRESSED_DEFLATE:
case GRPC_BB_COMPRESSED_GZIP:
return bb->data.slice_buffer.length;
} }
gpr_log(GPR_ERROR, "should never reach here"); gpr_log(GPR_ERROR, "should never reach here");
abort(); abort();

@ -33,74 +33,73 @@
#include <grpc/byte_buffer_reader.h> #include <grpc/byte_buffer_reader.h>
#include <grpc/compression.h>
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/slice_buffer.h> #include <grpc/support/slice_buffer.h>
#include <grpc/byte_buffer.h> #include <grpc/byte_buffer.h>
#include "src/core/compression/algorithm.h"
#include "src/core/compression/message_compress.h" #include "src/core/compression/message_compress.h"
static int is_compressed(grpc_byte_buffer *buffer) {
switch (buffer->type) {
case GRPC_BB_RAW:
if (buffer->data.raw.compression == GRPC_COMPRESS_NONE) {
return 0 /* GPR_FALSE */;
}
break;
}
return 1 /* GPR_TRUE */;
}
void grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader, void grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader,
grpc_byte_buffer *buffer) { grpc_byte_buffer *buffer) {
grpc_compression_algorithm compress_algo;
gpr_slice_buffer decompressed_slices_buffer; gpr_slice_buffer decompressed_slices_buffer;
reader->buffer_in = buffer; reader->buffer_in = buffer;
switch (buffer->type) { switch (reader->buffer_in->type) {
case GRPC_BB_COMPRESSED_DEFLATE: case GRPC_BB_RAW:
case GRPC_BB_COMPRESSED_GZIP:
compress_algo =
GRPC_COMPRESS_ALGORITHM_FROM_BB_TYPE(reader->buffer_in->type);
gpr_slice_buffer_init(&decompressed_slices_buffer); gpr_slice_buffer_init(&decompressed_slices_buffer);
grpc_msg_decompress(compress_algo, &reader->buffer_in->data.slice_buffer, if (is_compressed(reader->buffer_in)) {
grpc_msg_decompress(reader->buffer_in->data.raw.compression,
&reader->buffer_in->data.raw.slice_buffer,
&decompressed_slices_buffer); &decompressed_slices_buffer);
/* the output buffer is a regular GRPC_BB_SLICE_BUFFER */ reader->buffer_out = grpc_raw_byte_buffer_create(
reader->buffer_out = grpc_byte_buffer_create(
decompressed_slices_buffer.slices, decompressed_slices_buffer.slices,
decompressed_slices_buffer.count); decompressed_slices_buffer.count);
gpr_slice_buffer_destroy(&decompressed_slices_buffer); gpr_slice_buffer_destroy(&decompressed_slices_buffer);
/* fallthrough */ } else { /* not compressed, use the input buffer as output */
case GRPC_BB_SLICE_BUFFER: reader->buffer_out = reader->buffer_in;
case GRPC_BB_COMPRESSED_NONE: }
reader->current.index = 0; reader->current.index = 0;
break;
} }
} }
void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader) { void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader) {
switch (reader->buffer_in->type) { switch (reader->buffer_in->type) {
case GRPC_BB_COMPRESSED_DEFLATE: case GRPC_BB_RAW:
case GRPC_BB_COMPRESSED_GZIP: /* keeping the same if-else structure as in the init function */
if (is_compressed(reader->buffer_in)) {
grpc_byte_buffer_destroy(reader->buffer_out); grpc_byte_buffer_destroy(reader->buffer_out);
}
break; break;
case GRPC_BB_SLICE_BUFFER:
case GRPC_BB_COMPRESSED_NONE:
; /* no-op */
} }
} }
int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader, int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
gpr_slice *slice) { gpr_slice *slice) {
gpr_slice_buffer *slice_buffer;
grpc_byte_buffer *buffer = NULL;
/* Pick the right buffer based on the input type */
switch (reader->buffer_in->type) { switch (reader->buffer_in->type) {
case GRPC_BB_SLICE_BUFFER: case GRPC_BB_RAW: {
case GRPC_BB_COMPRESSED_NONE: gpr_slice_buffer *slice_buffer;
buffer = reader->buffer_in; slice_buffer = &reader->buffer_out->data.raw.slice_buffer;
break;
case GRPC_BB_COMPRESSED_DEFLATE:
case GRPC_BB_COMPRESSED_GZIP:
buffer = reader->buffer_out;
break;
}
GPR_ASSERT(buffer);
slice_buffer = &buffer->data.slice_buffer;
if (reader->current.index < slice_buffer->count) { if (reader->current.index < slice_buffer->count) {
*slice = gpr_slice_ref(slice_buffer->slices[reader->current.index]); *slice = gpr_slice_ref(slice_buffer->slices[reader->current.index]);
reader->current.index += 1; reader->current.index += 1;
return 1; return 1;
} }
break;
}
}
return 0; return 0;
} }

@ -636,7 +636,7 @@ static void call_on_done_send(void *pc, int success) {
static void finish_message(grpc_call *call) { static void finish_message(grpc_call *call) {
/* TODO(ctiller): this could be a lot faster if coded directly */ /* TODO(ctiller): this could be a lot faster if coded directly */
grpc_byte_buffer *byte_buffer = grpc_byte_buffer_create( grpc_byte_buffer *byte_buffer = grpc_raw_byte_buffer_create(
call->incoming_message.slices, call->incoming_message.count); call->incoming_message.slices, call->incoming_message.count);
gpr_slice_buffer_reset_and_unref(&call->incoming_message); gpr_slice_buffer_reset_and_unref(&call->incoming_message);
@ -806,12 +806,9 @@ static void copy_byte_buffer_to_stream_ops(grpc_byte_buffer *byte_buffer,
size_t i; size_t i;
switch (byte_buffer->type) { switch (byte_buffer->type) {
case GRPC_BB_SLICE_BUFFER: case GRPC_BB_RAW:
case GRPC_BB_COMPRESSED_NONE: for (i = 0; i < byte_buffer->data.raw.slice_buffer.count; i++) {
case GRPC_BB_COMPRESSED_DEFLATE: gpr_slice slice = byte_buffer->data.raw.slice_buffer.slices[i];
case GRPC_BB_COMPRESSED_GZIP:
for (i = 0; i < byte_buffer->data.slice_buffer.count; i++) {
gpr_slice slice = byte_buffer->data.slice_buffer.slices[i];
gpr_slice_ref(slice); gpr_slice_ref(slice);
grpc_sopb_add_slice(sopb, slice); grpc_sopb_add_slice(sopb, slice);
} }

@ -230,7 +230,10 @@ struct transport {
/* basic state management - what are we doing at the moment? */ /* basic state management - what are we doing at the moment? */
gpr_uint8 reading; gpr_uint8 reading;
gpr_uint8 writing; gpr_uint8 writing;
gpr_uint8 calling_back; /** are we calling back (via cb) with a channel-level event */
gpr_uint8 calling_back_channel;
/** are we calling back any grpc_transport_op completion events */
gpr_uint8 calling_back_ops;
gpr_uint8 destroying; gpr_uint8 destroying;
gpr_uint8 closed; gpr_uint8 closed;
error_state error_state; error_state error_state;
@ -357,7 +360,7 @@ static void push_setting(transport *t, grpc_chttp2_setting_id id,
gpr_uint32 value); gpr_uint32 value);
static int prepare_callbacks(transport *t); static int prepare_callbacks(transport *t);
static void run_callbacks(transport *t, const grpc_transport_callbacks *cb); static void run_callbacks(transport *t);
static void call_cb_closed(transport *t, const grpc_transport_callbacks *cb); static void call_cb_closed(transport *t, const grpc_transport_callbacks *cb);
static int prepare_write(transport *t); static int prepare_write(transport *t);
@ -565,7 +568,7 @@ static void init_transport(transport *t, grpc_transport_setup_callback setup,
} }
gpr_mu_lock(&t->mu); gpr_mu_lock(&t->mu);
t->calling_back = 1; t->calling_back_channel = 1;
ref_transport(t); /* matches unref at end of this function */ ref_transport(t); /* matches unref at end of this function */
gpr_mu_unlock(&t->mu); gpr_mu_unlock(&t->mu);
@ -574,7 +577,7 @@ static void init_transport(transport *t, grpc_transport_setup_callback setup,
lock(t); lock(t);
t->cb = sr.callbacks; t->cb = sr.callbacks;
t->cb_user_data = sr.user_data; t->cb_user_data = sr.user_data;
t->calling_back = 0; t->calling_back_channel = 0;
if (t->destroying) gpr_cv_signal(&t->cv); if (t->destroying) gpr_cv_signal(&t->cv);
unlock(t); unlock(t);
@ -595,7 +598,7 @@ static void destroy_transport(grpc_transport *gt) {
We need to be not writing as cancellation finalization may produce some We need to be not writing as cancellation finalization may produce some
callbacks that NEED to be made to close out some streams when t->writing callbacks that NEED to be made to close out some streams when t->writing
becomes 0. */ becomes 0. */
while (t->calling_back || t->writing) { while (t->calling_back_channel || t->writing) {
gpr_cv_wait(&t->cv, &t->mu, gpr_inf_future); gpr_cv_wait(&t->cv, &t->mu, gpr_inf_future);
} }
drop_connection(t); drop_connection(t);
@ -830,12 +833,15 @@ static void unlock(transport *t) {
finish_reads(t); finish_reads(t);
/* gather any callbacks that need to be made */ /* gather any callbacks that need to be made */
if (!t->calling_back) { if (!t->calling_back_ops) {
t->calling_back = perform_callbacks = prepare_callbacks(t); t->calling_back_ops = perform_callbacks = prepare_callbacks(t);
if (cb) { if (perform_callbacks) ref_transport(t);
}
if (!t->calling_back_channel && cb) {
if (t->error_state == ERROR_STATE_SEEN && !t->writing) { if (t->error_state == ERROR_STATE_SEEN && !t->writing) {
call_closed = 1; call_closed = 1;
t->calling_back = 1; t->calling_back_channel = 1;
t->cb = NULL; /* no more callbacks */ t->cb = NULL; /* no more callbacks */
t->error_state = ERROR_STATE_NOTIFIED; t->error_state = ERROR_STATE_NOTIFIED;
} }
@ -845,14 +851,12 @@ static void unlock(transport *t) {
t->pending_goaways = NULL; t->pending_goaways = NULL;
t->num_pending_goaways = 0; t->num_pending_goaways = 0;
t->cap_pending_goaways = 0; t->cap_pending_goaways = 0;
t->calling_back = 1; t->calling_back_channel = 1;
}
} }
} if (call_closed || num_goaways) {
if (perform_callbacks || call_closed || num_goaways) {
ref_transport(t); ref_transport(t);
} }
}
/* finally unlock */ /* finally unlock */
gpr_mu_unlock(&t->mu); gpr_mu_unlock(&t->mu);
@ -865,7 +869,11 @@ static void unlock(transport *t) {
} }
if (perform_callbacks) { if (perform_callbacks) {
run_callbacks(t, cb); run_callbacks(t);
lock(t);
t->calling_back_ops = 0;
unlock(t);
unref_transport(t);
} }
if (call_closed) { if (call_closed) {
@ -878,9 +886,9 @@ static void unlock(transport *t) {
perform_write(t, ep); perform_write(t, ep);
} }
if (perform_callbacks || call_closed || num_goaways) { if (call_closed || num_goaways) {
lock(t); lock(t);
t->calling_back = 0; t->calling_back_channel = 0;
if (t->destroying) gpr_cv_signal(&t->cv); if (t->destroying) gpr_cv_signal(&t->cv);
unlock(t); unlock(t);
unref_transport(t); unref_transport(t);
@ -2101,7 +2109,7 @@ static int prepare_callbacks(transport *t) {
return t->executing_callbacks.count > 0; return t->executing_callbacks.count > 0;
} }
static void run_callbacks(transport *t, const grpc_transport_callbacks *cb) { static void run_callbacks(transport *t) {
size_t i; size_t i;
for (i = 0; i < t->executing_callbacks.count; i++) { for (i = 0; i < t->executing_callbacks.count; i++) {
op_closure c = t->executing_callbacks.callbacks[i]; op_closure c = t->executing_callbacks.callbacks[i];

@ -49,8 +49,8 @@ class GrpcBufferWriter GRPC_FINAL
explicit GrpcBufferWriter(grpc_byte_buffer** bp, explicit GrpcBufferWriter(grpc_byte_buffer** bp,
int block_size = kMaxBufferLength) int block_size = kMaxBufferLength)
: block_size_(block_size), byte_count_(0), have_backup_(false) { : block_size_(block_size), byte_count_(0), have_backup_(false) {
*bp = grpc_byte_buffer_create(NULL, 0); *bp = grpc_raw_byte_buffer_create(NULL, 0);
slice_buffer_ = &(*bp)->data.slice_buffer; slice_buffer_ = &(*bp)->data.raw.slice_buffer;
} }
~GrpcBufferWriter() GRPC_OVERRIDE { ~GrpcBufferWriter() GRPC_OVERRIDE {

@ -42,7 +42,7 @@ ByteBuffer::ByteBuffer(Slice* slices, size_t nslices) {
for (size_t i = 0; i < nslices; i++) { for (size_t i = 0; i < nslices; i++) {
c_slices[i] = slices[i].slice_; c_slices[i] = slices[i].slice_;
} }
buffer_ = grpc_byte_buffer_create(c_slices.data(), nslices); buffer_ = grpc_raw_byte_buffer_create(c_slices.data(), nslices);
} }
void ByteBuffer::Clear() { void ByteBuffer::Clear() {

@ -60,7 +60,7 @@
grpc_byte_buffer *string_to_byte_buffer(const char *buffer, size_t len) { grpc_byte_buffer *string_to_byte_buffer(const char *buffer, size_t len) {
gpr_slice slice = gpr_slice_from_copied_buffer(buffer, len); gpr_slice slice = gpr_slice_from_copied_buffer(buffer, len);
grpc_byte_buffer *bb = grpc_byte_buffer_create(&slice, 1); grpc_byte_buffer *bb = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice); gpr_slice_unref(slice);
return bb; return bb;
} }

@ -57,7 +57,7 @@ grpc_byte_buffer *BufferToByteBuffer(Handle<Value> buffer) {
char *data = ::node::Buffer::Data(buffer); char *data = ::node::Buffer::Data(buffer);
gpr_slice slice = gpr_slice_malloc(length); gpr_slice slice = gpr_slice_malloc(length);
memcpy(GPR_SLICE_START_PTR(slice), data, length); memcpy(GPR_SLICE_START_PTR(slice), data, length);
grpc_byte_buffer *byte_buffer(grpc_byte_buffer_create(&slice, 1)); grpc_byte_buffer *byte_buffer(grpc_raw_byte_buffer_create(&slice, 1));
gpr_slice_unref(slice); gpr_slice_unref(slice);
return byte_buffer; return byte_buffer;
} }

@ -55,7 +55,7 @@ static void CopyByteBufferToCharArray(grpc_byte_buffer *buffer, char *array) {
static grpc_byte_buffer *CopyCharArrayToNewByteBuffer(const char *array, static grpc_byte_buffer *CopyCharArrayToNewByteBuffer(const char *array,
size_t length) { size_t length) {
gpr_slice slice = gpr_slice_from_copied_buffer(array, length); gpr_slice slice = gpr_slice_from_copied_buffer(array, length);
grpc_byte_buffer *buffer = grpc_byte_buffer_create(&slice, 1); grpc_byte_buffer *buffer = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice); gpr_slice_unref(slice);
return buffer; return buffer;
} }
@ -85,7 +85,7 @@ static grpc_byte_buffer *CopyCharArrayToNewByteBuffer(const char *array,
// The following implementation is thus not optimal, sometimes requiring two // The following implementation is thus not optimal, sometimes requiring two
// copies (one by self.bytes and another by gpr_slice_from_copied_buffer). // copies (one by self.bytes and another by gpr_slice_from_copied_buffer).
// If it turns out to be an issue, we can use enumerateByteRangesUsingblock: // If it turns out to be an issue, we can use enumerateByteRangesUsingblock:
// to create an array of gpr_slice objects to pass to grpc_byte_buffer_create. // to create an array of gpr_slice objects to pass to grpc_raw_byte_buffer_create.
// That would make it do exactly one copy, always. // That would make it do exactly one copy, always.
return CopyCharArrayToNewByteBuffer((const char *)self.bytes, (size_t)self.length); return CopyCharArrayToNewByteBuffer((const char *)self.bytes, (size_t)self.length);
} }

@ -51,7 +51,7 @@
grpc_byte_buffer *string_to_byte_buffer(char *string, size_t length) { grpc_byte_buffer *string_to_byte_buffer(char *string, size_t length) {
gpr_slice slice = gpr_slice_from_copied_buffer(string, length); gpr_slice slice = gpr_slice_from_copied_buffer(string, length);
grpc_byte_buffer *buffer = grpc_byte_buffer_create(&slice, 1); grpc_byte_buffer *buffer = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice); gpr_slice_unref(slice);
return buffer; return buffer;
} }

@ -179,7 +179,7 @@ int pygrpc_produce_op(PyObject *op, grpc_op *result) {
PyString_AsStringAndSize( PyString_AsStringAndSize(
PyTuple_GET_ITEM(op, MESSAGE_INDEX), &message, &message_size); PyTuple_GET_ITEM(op, MESSAGE_INDEX), &message, &message_size);
message_slice = gpr_slice_from_copied_buffer(message, message_size); message_slice = gpr_slice_from_copied_buffer(message, message_size);
c_op.data.send_message = grpc_byte_buffer_create(&message_slice, 1); c_op.data.send_message = grpc_raw_byte_buffer_create(&message_slice, 1);
gpr_slice_unref(message_slice); gpr_slice_unref(message_slice);
break; break;
case GRPC_OP_SEND_CLOSE_FROM_CLIENT: case GRPC_OP_SEND_CLOSE_FROM_CLIENT:

@ -42,7 +42,7 @@
grpc_byte_buffer* grpc_rb_s_to_byte_buffer(char *string, size_t length) { grpc_byte_buffer* grpc_rb_s_to_byte_buffer(char *string, size_t length) {
gpr_slice slice = gpr_slice_from_copied_buffer(string, length); gpr_slice slice = gpr_slice_from_copied_buffer(string, length);
grpc_byte_buffer *buffer = grpc_byte_buffer_create(&slice, 1); grpc_byte_buffer *buffer = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice); gpr_slice_unref(slice);
return buffer; return buffer;
} }

@ -133,7 +133,8 @@ static int byte_buffer_eq_slice(grpc_byte_buffer *bb, gpr_slice b) {
if (!bb) return 0; if (!bb) return 0;
a = merge_slices(bb->data.slice_buffer.slices, bb->data.slice_buffer.count); a = merge_slices(bb->data.raw.slice_buffer.slices,
bb->data.raw.slice_buffer.count);
ok = GPR_SLICE_LENGTH(a) == GPR_SLICE_LENGTH(b) && ok = GPR_SLICE_LENGTH(a) == GPR_SLICE_LENGTH(b) &&
0 == memcmp(GPR_SLICE_START_PTR(a), GPR_SLICE_START_PTR(b), 0 == memcmp(GPR_SLICE_START_PTR(a), GPR_SLICE_START_PTR(b),
GPR_SLICE_LENGTH(a)); GPR_SLICE_LENGTH(a));

@ -121,9 +121,9 @@ static void test_cancel_after_accept(grpc_end2end_test_config config,
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you"); gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_byte_buffer *response_payload = grpc_byte_buffer *response_payload =
grpc_byte_buffer_create(&response_payload_slice, 1); grpc_raw_byte_buffer_create(&response_payload_slice, 1);
int was_cancelled = 2; int was_cancelled = 2;
c = grpc_channel_create_call(f.client, f.client_cq, "/foo", c = grpc_channel_create_call(f.client, f.client_cq, "/foo",

@ -121,9 +121,9 @@ static void test_cancel_after_accept_and_writes_closed(
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you"); gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_byte_buffer *response_payload = grpc_byte_buffer *response_payload =
grpc_byte_buffer_create(&response_payload_slice, 1); grpc_raw_byte_buffer_create(&response_payload_slice, 1);
int was_cancelled = 2; int was_cancelled = 2;
c = grpc_channel_create_call(f.client, f.client_cq, "/foo", c = grpc_channel_create_call(f.client, f.client_cq, "/foo",

@ -119,7 +119,7 @@ static void test_cancel_after_invoke(grpc_end2end_test_config config,
grpc_byte_buffer *response_payload_recv = NULL; grpc_byte_buffer *response_payload_recv = NULL;
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
c = grpc_channel_create_call(f.client, f.client_cq, "/foo", c = grpc_channel_create_call(f.client, f.client_cq, "/foo",
"foo.test.google.fr", deadline); "foo.test.google.fr", deadline);

@ -116,7 +116,7 @@ static void test_cancel_before_invoke(grpc_end2end_test_config config,
grpc_byte_buffer *response_payload_recv = NULL; grpc_byte_buffer *response_payload_recv = NULL;
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
c = grpc_channel_create_call(f.client, f.client_cq, "/foo", c = grpc_channel_create_call(f.client, f.client_cq, "/foo",
"foo.test.google.fr", deadline); "foo.test.google.fr", deadline);

@ -109,9 +109,9 @@ static void test_invoke_large_request(grpc_end2end_test_config config) {
grpc_call *c; grpc_call *c;
grpc_call *s; grpc_call *s;
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_byte_buffer *response_payload = grpc_byte_buffer *response_payload =
grpc_byte_buffer_create(&response_payload_slice, 1); grpc_raw_byte_buffer_create(&response_payload_slice, 1);
gpr_timespec deadline = n_seconds_time(30); gpr_timespec deadline = n_seconds_time(30);
cq_verifier *v_client = cq_verifier_create(f.client_cq); cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq); cq_verifier *v_server = cq_verifier_create(f.server_cq);

@ -109,7 +109,7 @@ static void test_max_message_length(grpc_end2end_test_config config) {
grpc_op *op; grpc_op *op;
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_metadata_array initial_metadata_recv; grpc_metadata_array initial_metadata_recv;
grpc_metadata_array trailing_metadata_recv; grpc_metadata_array trailing_metadata_recv;
grpc_metadata_array request_metadata_recv; grpc_metadata_array request_metadata_recv;

@ -165,8 +165,8 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(101))); GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(101)));
for (i = 0; i < messages; i++) { for (i = 0; i < messages; i++) {
request_payload = grpc_byte_buffer_create(&request_payload_slice, 1); request_payload = grpc_raw_byte_buffer_create(&request_payload_slice, 1);
response_payload = grpc_byte_buffer_create(&response_payload_slice, 1); response_payload = grpc_raw_byte_buffer_create(&response_payload_slice, 1);
op = ops; op = ops;
op->op = GRPC_OP_SEND_MESSAGE; op->op = GRPC_OP_SEND_MESSAGE;

@ -105,9 +105,9 @@ static void test_request_response_with_metadata_and_payload(
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you"); gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_byte_buffer *response_payload = grpc_byte_buffer *response_payload =
grpc_byte_buffer_create(&response_payload_slice, 1); grpc_raw_byte_buffer_create(&response_payload_slice, 1);
gpr_timespec deadline = five_seconds_time(); gpr_timespec deadline = five_seconds_time();
grpc_metadata meta_c[2] = { grpc_metadata meta_c[2] = {
{"key1-bin", {"key1-bin",

@ -105,9 +105,9 @@ static void test_request_response_with_metadata_and_payload(
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you"); gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_byte_buffer *response_payload = grpc_byte_buffer *response_payload =
grpc_byte_buffer_create(&response_payload_slice, 1); grpc_raw_byte_buffer_create(&response_payload_slice, 1);
gpr_timespec deadline = five_seconds_time(); gpr_timespec deadline = five_seconds_time();
grpc_metadata meta_c[2] = {{"key1", "val1", 4, {{NULL, NULL, NULL}}}, grpc_metadata meta_c[2] = {{"key1", "val1", 4, {{NULL, NULL, NULL}}},
{"key2", "val2", 4, {{NULL, NULL, NULL}}}}; {"key2", "val2", 4, {{NULL, NULL, NULL}}}};

@ -103,9 +103,9 @@ static void request_response_with_payload(grpc_end2end_test_fixture f) {
grpc_call *c; grpc_call *c;
grpc_call *s; grpc_call *s;
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_byte_buffer *response_payload = grpc_byte_buffer *response_payload =
grpc_byte_buffer_create(&response_payload_slice, 1); grpc_raw_byte_buffer_create(&response_payload_slice, 1);
gpr_timespec deadline = five_seconds_time(); gpr_timespec deadline = five_seconds_time();
cq_verifier *v_client = cq_verifier_create(f.client_cq); cq_verifier *v_client = cq_verifier_create(f.client_cq);
cq_verifier *v_server = cq_verifier_create(f.server_cq); cq_verifier *v_server = cq_verifier_create(f.server_cq);

@ -156,9 +156,9 @@ static void request_response_with_payload_and_call_creds(
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you"); gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_byte_buffer *response_payload = grpc_byte_buffer *response_payload =
grpc_byte_buffer_create(&response_payload_slice, 1); grpc_raw_byte_buffer_create(&response_payload_slice, 1);
gpr_timespec deadline = five_seconds_time(); gpr_timespec deadline = five_seconds_time();
grpc_end2end_test_fixture f = begin_test(config, test_name, NULL, NULL); grpc_end2end_test_fixture f = begin_test(config, test_name, NULL, NULL);

@ -105,9 +105,9 @@ static void test_request_response_with_metadata_and_payload(
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you"); gpr_slice response_payload_slice = gpr_slice_from_copied_string("hello you");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
grpc_byte_buffer *response_payload = grpc_byte_buffer *response_payload =
grpc_byte_buffer_create(&response_payload_slice, 1); grpc_raw_byte_buffer_create(&response_payload_slice, 1);
gpr_timespec deadline = five_seconds_time(); gpr_timespec deadline = five_seconds_time();
grpc_metadata meta_c[2] = {{"key1", "val1", 4, {{NULL, NULL, NULL}}}, {"key2", "val2", 4, {{NULL, NULL, NULL}}}}; grpc_metadata meta_c[2] = {{"key1", "val1", 4, {{NULL, NULL, NULL}}}, {"key2", "val2", 4, {{NULL, NULL, NULL}}}};
grpc_metadata meta_s[2] = {{"key3", "val3", 4, {{NULL, NULL, NULL}}}, {"key4", "val4", 4, {{NULL, NULL, NULL}}}}; grpc_metadata meta_s[2] = {{"key3", "val3", 4, {{NULL, NULL, NULL}}}, {"key4", "val4", 4, {{NULL, NULL, NULL}}}};

@ -103,7 +103,7 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
grpc_call *s; grpc_call *s;
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
gpr_timespec deadline = five_seconds_time(); gpr_timespec deadline = five_seconds_time();
grpc_metadata meta; grpc_metadata meta;
grpc_end2end_test_fixture f = begin_test(config, "test_request_with_large_metadata", NULL, NULL); grpc_end2end_test_fixture f = begin_test(config, "test_request_with_large_metadata", NULL, NULL);

@ -103,7 +103,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
grpc_call *s; grpc_call *s;
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world");
grpc_byte_buffer *request_payload = grpc_byte_buffer *request_payload =
grpc_byte_buffer_create(&request_payload_slice, 1); grpc_raw_byte_buffer_create(&request_payload_slice, 1);
gpr_timespec deadline = five_seconds_time(); gpr_timespec deadline = five_seconds_time();
grpc_end2end_test_fixture f = begin_test(config, "test_invoke_request_with_payload", NULL, NULL); grpc_end2end_test_fixture f = begin_test(config, "test_invoke_request_with_payload", NULL, NULL);
cq_verifier *v_client = cq_verifier_create(f.client_cq); cq_verifier *v_client = cq_verifier_create(f.client_cq);

@ -183,7 +183,7 @@ int main(int argc, char **argv) {
channel = grpc_channel_create(target, NULL); channel = grpc_channel_create(target, NULL);
cq = grpc_completion_queue_create(); cq = grpc_completion_queue_create();
the_buffer = grpc_byte_buffer_create(&slice, payload_size); the_buffer = grpc_raw_byte_buffer_create(&slice, payload_size);
histogram = gpr_histogram_create(0.01, 60e9); histogram = gpr_histogram_create(0.01, 60e9);
sc.init(); sc.init();

@ -57,7 +57,7 @@ static void test_read_one_slice(void) {
LOG_TEST("test_read_one_slice"); LOG_TEST("test_read_one_slice");
slice = gpr_slice_from_copied_string("test"); slice = gpr_slice_from_copied_string("test");
buffer = grpc_byte_buffer_create(&slice, 1); buffer = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice); gpr_slice_unref(slice);
grpc_byte_buffer_reader_init(&reader, buffer); grpc_byte_buffer_reader_init(&reader, buffer);
first_code = grpc_byte_buffer_reader_next(&reader, &first_slice); first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
@ -79,7 +79,7 @@ static void test_read_one_slice_malloc(void) {
LOG_TEST("test_read_one_slice_malloc"); LOG_TEST("test_read_one_slice_malloc");
slice = gpr_slice_malloc(4); slice = gpr_slice_malloc(4);
memcpy(GPR_SLICE_START_PTR(slice), "test", 4); memcpy(GPR_SLICE_START_PTR(slice), "test", 4);
buffer = grpc_byte_buffer_create(&slice, 1); buffer = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice); gpr_slice_unref(slice);
grpc_byte_buffer_reader_init(&reader, buffer); grpc_byte_buffer_reader_init(&reader, buffer);
first_code = grpc_byte_buffer_reader_next(&reader, &first_slice); first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
@ -100,7 +100,7 @@ static void test_read_none_compressed_slice(void) {
LOG_TEST("test_read_none_compressed_slice"); LOG_TEST("test_read_none_compressed_slice");
slice = gpr_slice_from_copied_string("test"); slice = gpr_slice_from_copied_string("test");
buffer = grpc_byte_buffer_typed_create(&slice, 1, GRPC_BB_COMPRESSED_NONE); buffer = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice); gpr_slice_unref(slice);
grpc_byte_buffer_reader_init(&reader, buffer); grpc_byte_buffer_reader_init(&reader, buffer);
first_code = grpc_byte_buffer_reader_next(&reader, &first_slice); first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
@ -130,8 +130,8 @@ static void read_compressed_slice(grpc_compression_algorithm algorithm,
gpr_slice_buffer_add(&sliceb_in, input_slice); /* takes ownership */ gpr_slice_buffer_add(&sliceb_in, input_slice); /* takes ownership */
GPR_ASSERT(grpc_msg_compress(algorithm, &sliceb_in, &sliceb_out)); GPR_ASSERT(grpc_msg_compress(algorithm, &sliceb_in, &sliceb_out));
buffer = grpc_byte_buffer_typed_create(sliceb_out.slices, sliceb_out.count, buffer = grpc_raw_compressed_byte_buffer_create(
GRPC_BB_COMPRESSED_NONE + algorithm); sliceb_out.slices, sliceb_out.count, algorithm);
grpc_byte_buffer_reader_init(&reader, buffer); grpc_byte_buffer_reader_init(&reader, buffer);
while (grpc_byte_buffer_reader_next(&reader, &read_slice)) { while (grpc_byte_buffer_reader_next(&reader, &read_slice)) {

@ -112,7 +112,7 @@ static void QpsDriver() {
FLAGS_warmup_seconds, FLAGS_benchmark_seconds, FLAGS_local_workers); FLAGS_warmup_seconds, FLAGS_benchmark_seconds, FLAGS_local_workers);
GetReporter()->ReportQPS(*result); GetReporter()->ReportQPS(*result);
GetReporter()->ReportQPSPerCore(*result, server_config); GetReporter()->ReportQPSPerCore(*result);
GetReporter()->ReportLatency(*result); GetReporter()->ReportLatency(*result);
GetReporter()->ReportTimes(*result); GetReporter()->ReportTimes(*result);
} }

@ -67,7 +67,7 @@ static void RunQPS() {
const auto result = const auto result =
RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2); RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2);
GetReporter()->ReportQPSPerCore(*result, server_config); GetReporter()->ReportQPSPerCore(*result);
GetReporter()->ReportLatency(*result); GetReporter()->ReportLatency(*result);
} }

@ -101,10 +101,11 @@ class AsyncQpsServerTest : public Server {
ServerRpcContext *ctx = detag(got_tag); ServerRpcContext *ctx = detag(got_tag);
// The tag is a pointer to an RPC context to invoke // The tag is a pointer to an RPC context to invoke
bool still_going = ctx->RunNextState(ok); bool still_going = ctx->RunNextState(ok);
std::lock_guard<std::mutex> g(shutdown_mutex_); std::unique_lock<std::mutex> g(shutdown_mutex_);
if (!shutdown_) { if (!shutdown_) {
// this RPC context is done, so refresh it // this RPC context is done, so refresh it
if (!still_going) { if (!still_going) {
g.unlock();
ctx->Reset(); ctx->Reset();
} }
} else { } else {

@ -760,7 +760,7 @@ WARN_LOGFILE =
# spaces. # spaces.
# Note: If this tag is empty the current directory is searched. # Note: If this tag is empty the current directory is searched.
INPUT = include/grpc/grpc_security.h include/grpc/byte_buffer.h include/grpc/byte_buffer_reader.h include/grpc/grpc.h include/grpc/status.h include/grpc/census.h include/grpc/support/alloc.h include/grpc/support/atm.h include/grpc/support/atm_gcc_atomic.h include/grpc/support/atm_gcc_sync.h include/grpc/support/atm_win32.h include/grpc/support/cancellable_platform.h include/grpc/support/cmdline.h include/grpc/support/cpu.h include/grpc/support/histogram.h include/grpc/support/host_port.h include/grpc/support/log.h include/grpc/support/log_win32.h include/grpc/support/port_platform.h include/grpc/support/slice.h include/grpc/support/slice_buffer.h include/grpc/support/string_util.h include/grpc/support/subprocess.h include/grpc/support/sync.h include/grpc/support/sync_generic.h include/grpc/support/sync_posix.h include/grpc/support/sync_win32.h include/grpc/support/thd.h include/grpc/support/time.h include/grpc/support/tls.h include/grpc/support/tls_gcc.h include/grpc/support/tls_msvc.h include/grpc/support/tls_pthread.h include/grpc/support/useful.h INPUT = include/grpc/grpc_security.h include/grpc/byte_buffer.h include/grpc/byte_buffer_reader.h include/grpc/compression.h include/grpc/grpc.h include/grpc/status.h include/grpc/census.h include/grpc/support/alloc.h include/grpc/support/atm.h include/grpc/support/atm_gcc_atomic.h include/grpc/support/atm_gcc_sync.h include/grpc/support/atm_win32.h include/grpc/support/cancellable_platform.h include/grpc/support/cmdline.h include/grpc/support/cpu.h include/grpc/support/histogram.h include/grpc/support/host_port.h include/grpc/support/log.h include/grpc/support/log_win32.h include/grpc/support/port_platform.h include/grpc/support/slice.h include/grpc/support/slice_buffer.h include/grpc/support/string_util.h include/grpc/support/subprocess.h include/grpc/support/sync.h include/grpc/support/sync_generic.h include/grpc/support/sync_posix.h include/grpc/support/sync_win32.h include/grpc/support/thd.h include/grpc/support/time.h include/grpc/support/tls.h include/grpc/support/tls_gcc.h include/grpc/support/tls_msvc.h include/grpc/support/tls_pthread.h include/grpc/support/useful.h
# This tag can be used to specify the character encoding of the source files # This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses

File diff suppressed because one or more lines are too long

@ -150,6 +150,7 @@
<ClInclude Include="..\..\include\grpc\grpc_security.h" /> <ClInclude Include="..\..\include\grpc\grpc_security.h" />
<ClInclude Include="..\..\include\grpc\byte_buffer.h" /> <ClInclude Include="..\..\include\grpc\byte_buffer.h" />
<ClInclude Include="..\..\include\grpc\byte_buffer_reader.h" /> <ClInclude Include="..\..\include\grpc\byte_buffer_reader.h" />
<ClInclude Include="..\..\include\grpc\compression.h" />
<ClInclude Include="..\..\include\grpc\grpc.h" /> <ClInclude Include="..\..\include\grpc\grpc.h" />
<ClInclude Include="..\..\include\grpc\status.h" /> <ClInclude Include="..\..\include\grpc\status.h" />
<ClInclude Include="..\..\include\grpc\census.h" /> <ClInclude Include="..\..\include\grpc\census.h" />

@ -360,6 +360,9 @@
<ClInclude Include="..\..\include\grpc\byte_buffer_reader.h"> <ClInclude Include="..\..\include\grpc\byte_buffer_reader.h">
<Filter>include\grpc</Filter> <Filter>include\grpc</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\include\grpc\compression.h">
<Filter>include\grpc</Filter>
</ClInclude>
<ClInclude Include="..\..\include\grpc\grpc.h"> <ClInclude Include="..\..\include\grpc\grpc.h">
<Filter>include\grpc</Filter> <Filter>include\grpc</Filter>
</ClInclude> </ClInclude>

@ -148,6 +148,7 @@
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\include\grpc\byte_buffer.h" /> <ClInclude Include="..\..\include\grpc\byte_buffer.h" />
<ClInclude Include="..\..\include\grpc\byte_buffer_reader.h" /> <ClInclude Include="..\..\include\grpc\byte_buffer_reader.h" />
<ClInclude Include="..\..\include\grpc\compression.h" />
<ClInclude Include="..\..\include\grpc\grpc.h" /> <ClInclude Include="..\..\include\grpc\grpc.h" />
<ClInclude Include="..\..\include\grpc\status.h" /> <ClInclude Include="..\..\include\grpc\status.h" />
<ClInclude Include="..\..\include\grpc\census.h" /> <ClInclude Include="..\..\include\grpc\census.h" />

@ -291,6 +291,9 @@
<ClInclude Include="..\..\include\grpc\byte_buffer_reader.h"> <ClInclude Include="..\..\include\grpc\byte_buffer_reader.h">
<Filter>include\grpc</Filter> <Filter>include\grpc</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\include\grpc\compression.h">
<Filter>include\grpc</Filter>
</ClInclude>
<ClInclude Include="..\..\include\grpc\grpc.h"> <ClInclude Include="..\..\include\grpc\grpc.h">
<Filter>include\grpc</Filter> <Filter>include\grpc</Filter>
</ClInclude> </ClInclude>

Loading…
Cancel
Save