WIP. Setting md_index to 0 on grpc_linked_mdelem creation

reviewable/pr16488/r2
Hope Casey-Allen 7 years ago
parent 4181c8cd37
commit 97cbec1c98
  1. 1
      src/core/lib/surface/call.cc
  2. 24
      src/core/lib/transport/metadata_batch.cc
  3. 2
      test/core/transport/chttp2/hpack_encoder_test.cc

@ -374,6 +374,7 @@ grpc_error* grpc_call_create(const grpc_call_create_args* args,
MAX_SEND_EXTRA_METADATA_COUNT);
for (i = 0; i < args->add_initial_metadata_count; i++) {
call->send_extra_metadata[i].md = args->add_initial_metadata[i];
call->send_extra_metadata[i].md_index = 0;
if (grpc_slice_eq(GRPC_MDKEY(args->add_initial_metadata[i]),
GRPC_MDSTR_PATH)) {
path = grpc_slice_ref_internal(

@ -264,6 +264,7 @@ grpc_error* grpc_metadata_batch_add_head(grpc_metadata_batch* batch,
grpc_linked_mdelem* storage,
grpc_mdelem elem_to_add) {
GPR_ASSERT(!GRPC_MDISNULL(elem_to_add));
storage->md_index = 0;
storage->md = elem_to_add;
return grpc_metadata_batch_link_head(batch, storage);
}
@ -310,6 +311,7 @@ grpc_error* grpc_metadata_batch_add_tail(grpc_metadata_batch* batch,
grpc_mdelem elem_to_add) {
GPR_ASSERT(!GRPC_MDISNULL(elem_to_add));
storage->md = elem_to_add;
storage->md_index = 0;
return grpc_metadata_batch_link_tail(batch, storage);
}
@ -459,12 +461,15 @@ grpc_error* grpc_metadata_batch_filter(grpc_metadata_batch* batch,
grpc_error* error = GRPC_ERROR_NONE;
while (l) {
grpc_linked_mdelem* next = l->next;
grpc_filtered_mdelem new_mdelem = func(user_data, l->md);
add_error(&error, new_mdelem.error, composite_error_string);
if (GRPC_MDISNULL(new_mdelem.md)) {
grpc_metadata_batch_remove(batch, l);
} else if (new_mdelem.md.payload != l->md.payload) {
grpc_metadata_batch_substitute(batch, l, new_mdelem.md);
//TODO(hcaseyal): provide a mechanism to filter mdelems with indices
if (!is_mdelem_index_used(l->md_index)) {
grpc_filtered_mdelem new_mdelem = func(user_data, l->md);
add_error(&error, new_mdelem.error, composite_error_string);
if (GRPC_MDISNULL(new_mdelem.md)) {
grpc_metadata_batch_remove(batch, l);
} else if (new_mdelem.md.payload != l->md.payload) {
grpc_metadata_batch_substitute(batch, l, new_mdelem.md);
}
}
l = next;
}
@ -479,8 +484,13 @@ void grpc_metadata_batch_copy(grpc_metadata_batch* src,
size_t i = 0;
for (grpc_linked_mdelem* elem = src->list.head; elem != nullptr;
elem = elem->next) {
grpc_error* error = grpc_metadata_batch_add_tail(dst, &storage[i++],
grpc_error* error = nullptr;
if (is_mdelem_index_used(elem->md_index)) {
error = grpc_metadata_batch_add_tail_index(dst, &storage[i++], elem->md_index);
} else {
error = grpc_metadata_batch_add_tail(dst, &storage[i++],
GRPC_MDELEM_REF(elem->md));
}
// The only way that grpc_metadata_batch_add_tail() can fail is if
// there's a duplicate entry for a callout. However, that can't be
// the case here, because we would not have been allowed to create

@ -205,7 +205,7 @@ static void verify_table_size_change_match_elem_size(const char* key,
size_t elem_size = grpc_mdelem_get_size_in_hpack_table(elem, use_true_binary);
size_t initial_table_size = g_compressor.table_size;
grpc_linked_mdelem* e =
static_cast<grpc_linked_mdelem*>(gpr_malloc(sizeof(*e)));
static_cast<grpc_linked_mdelem*>(gpr_zalloc(sizeof(*e)));
grpc_metadata_batch b;
grpc_metadata_batch_init(&b);
e[0].md = elem;

Loading…
Cancel
Save