[metadata] Move hooks into grpc_base, separate build some (#32781)
When using this internally, we noticed that it's impossible to use custom_metadata.h without creating a dependency cycle between :custom_metadata and :grpc_base. A full build refactoring is too large right now, so merge that header into :grpc_base for the time being. Also, separate `SimpleSliceBasedMetadata` into its own file, so that it can be reused in custom_metadata.h. <!-- If you know who should review your pull request, please assign it to that person, otherwise the pull request would get assigned randomly. If your pull request is for a specific language, please add the appropriate lang label. --> --------- Co-authored-by: ctiller <ctiller@users.noreply.github.com>
This commit is contained in:
parent
93b802d02e
commit
7fae3dec0c
10
BUILD
10
BUILD
|
|
@ -1394,9 +1394,11 @@ grpc_cc_library(
|
|||
"//src/core:lib/surface/server.h",
|
||||
"//src/core:lib/surface/validate_metadata.h",
|
||||
"//src/core:lib/transport/connectivity_state.h",
|
||||
"//src/core:lib/transport/custom_metadata.h",
|
||||
"//src/core:lib/transport/error_utils.h",
|
||||
"//src/core:lib/transport/metadata_batch.h",
|
||||
"//src/core:lib/transport/parsed_metadata.h",
|
||||
"//src/core:lib/transport/simple_slice_based_metadata.h",
|
||||
"//src/core:lib/transport/status_conversion.h",
|
||||
"//src/core:lib/transport/timeout_encoding.h",
|
||||
"//src/core:lib/transport/transport.h",
|
||||
|
|
@ -1445,7 +1447,6 @@ grpc_cc_library(
|
|||
"config",
|
||||
"config_vars",
|
||||
"cpp_impl_of",
|
||||
"custom_metadata",
|
||||
"debug_location",
|
||||
"exec_ctx",
|
||||
"gpr",
|
||||
|
|
@ -1539,13 +1540,6 @@ grpc_cc_library(
|
|||
],
|
||||
)
|
||||
|
||||
grpc_cc_library(
|
||||
name = "custom_metadata",
|
||||
hdrs = [
|
||||
"//src/core:lib/transport/custom_metadata.h",
|
||||
],
|
||||
)
|
||||
|
||||
grpc_cc_library(
|
||||
name = "lb_load_data_store",
|
||||
srcs = [
|
||||
|
|
|
|||
|
|
@ -1078,6 +1078,7 @@ libs:
|
|||
- src/core/lib/transport/metadata_batch.h
|
||||
- src/core/lib/transport/parsed_metadata.h
|
||||
- src/core/lib/transport/pid_controller.h
|
||||
- src/core/lib/transport/simple_slice_based_metadata.h
|
||||
- src/core/lib/transport/status_conversion.h
|
||||
- src/core/lib/transport/tcp_connect_handshaker.h
|
||||
- src/core/lib/transport/timeout_encoding.h
|
||||
|
|
@ -2395,6 +2396,7 @@ libs:
|
|||
- src/core/lib/transport/metadata_batch.h
|
||||
- src/core/lib/transport/parsed_metadata.h
|
||||
- src/core/lib/transport/pid_controller.h
|
||||
- src/core/lib/transport/simple_slice_based_metadata.h
|
||||
- src/core/lib/transport/status_conversion.h
|
||||
- src/core/lib/transport/tcp_connect_handshaker.h
|
||||
- src/core/lib/transport/timeout_encoding.h
|
||||
|
|
@ -3859,6 +3861,7 @@ libs:
|
|||
- src/core/lib/transport/http2_errors.h
|
||||
- src/core/lib/transport/metadata_batch.h
|
||||
- src/core/lib/transport/parsed_metadata.h
|
||||
- src/core/lib/transport/simple_slice_based_metadata.h
|
||||
- src/core/lib/transport/status_conversion.h
|
||||
- src/core/lib/transport/timeout_encoding.h
|
||||
- src/core/lib/transport/transport.h
|
||||
|
|
@ -7673,6 +7676,7 @@ targets:
|
|||
- src/core/lib/transport/http2_errors.h
|
||||
- src/core/lib/transport/metadata_batch.h
|
||||
- src/core/lib/transport/parsed_metadata.h
|
||||
- src/core/lib/transport/simple_slice_based_metadata.h
|
||||
- src/core/lib/transport/status_conversion.h
|
||||
- src/core/lib/transport/timeout_encoding.h
|
||||
- src/core/lib/transport/transport.h
|
||||
|
|
|
|||
|
|
@ -1045,6 +1045,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/transport/metadata_batch.h',
|
||||
'src/core/lib/transport/parsed_metadata.h',
|
||||
'src/core/lib/transport/pid_controller.h',
|
||||
'src/core/lib/transport/simple_slice_based_metadata.h',
|
||||
'src/core/lib/transport/status_conversion.h',
|
||||
'src/core/lib/transport/tcp_connect_handshaker.h',
|
||||
'src/core/lib/transport/timeout_encoding.h',
|
||||
|
|
@ -1985,6 +1986,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/transport/metadata_batch.h',
|
||||
'src/core/lib/transport/parsed_metadata.h',
|
||||
'src/core/lib/transport/pid_controller.h',
|
||||
'src/core/lib/transport/simple_slice_based_metadata.h',
|
||||
'src/core/lib/transport/status_conversion.h',
|
||||
'src/core/lib/transport/tcp_connect_handshaker.h',
|
||||
'src/core/lib/transport/timeout_encoding.h',
|
||||
|
|
|
|||
|
|
@ -1735,6 +1735,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/transport/parsed_metadata.h',
|
||||
'src/core/lib/transport/pid_controller.cc',
|
||||
'src/core/lib/transport/pid_controller.h',
|
||||
'src/core/lib/transport/simple_slice_based_metadata.h',
|
||||
'src/core/lib/transport/status_conversion.cc',
|
||||
'src/core/lib/transport/status_conversion.h',
|
||||
'src/core/lib/transport/tcp_connect_handshaker.cc',
|
||||
|
|
@ -2675,6 +2676,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/transport/metadata_batch.h',
|
||||
'src/core/lib/transport/parsed_metadata.h',
|
||||
'src/core/lib/transport/pid_controller.h',
|
||||
'src/core/lib/transport/simple_slice_based_metadata.h',
|
||||
'src/core/lib/transport/status_conversion.h',
|
||||
'src/core/lib/transport/tcp_connect_handshaker.h',
|
||||
'src/core/lib/transport/timeout_encoding.h',
|
||||
|
|
|
|||
|
|
@ -1642,6 +1642,7 @@ Gem::Specification.new do |s|
|
|||
s.files += %w( src/core/lib/transport/parsed_metadata.h )
|
||||
s.files += %w( src/core/lib/transport/pid_controller.cc )
|
||||
s.files += %w( src/core/lib/transport/pid_controller.h )
|
||||
s.files += %w( src/core/lib/transport/simple_slice_based_metadata.h )
|
||||
s.files += %w( src/core/lib/transport/status_conversion.cc )
|
||||
s.files += %w( src/core/lib/transport/status_conversion.h )
|
||||
s.files += %w( src/core/lib/transport/tcp_connect_handshaker.cc )
|
||||
|
|
|
|||
|
|
@ -1624,6 +1624,7 @@
|
|||
<file baseinstalldir="/" name="src/core/lib/transport/parsed_metadata.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/transport/pid_controller.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/transport/pid_controller.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/transport/simple_slice_based_metadata.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/transport/status_conversion.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/transport/status_conversion.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/transport/tcp_connect_handshaker.cc" role="src" />
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
#include "src/core/lib/slice/slice.h"
|
||||
#include "src/core/lib/transport/custom_metadata.h"
|
||||
#include "src/core/lib/transport/parsed_metadata.h"
|
||||
#include "src/core/lib/transport/simple_slice_based_metadata.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
|
|
@ -229,22 +230,6 @@ struct GrpcAcceptEncodingMetadata {
|
|||
}
|
||||
};
|
||||
|
||||
struct SimpleSliceBasedMetadata {
|
||||
using ValueType = Slice;
|
||||
using MementoType = Slice;
|
||||
static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
|
||||
return value.TakeOwned();
|
||||
}
|
||||
static ValueType MementoToValue(MementoType value) { return value; }
|
||||
static Slice Encode(const ValueType& x) { return x.Ref(); }
|
||||
static absl::string_view DisplayValue(const ValueType& value) {
|
||||
return value.as_string_view();
|
||||
}
|
||||
static absl::string_view DisplayMemento(const MementoType& value) {
|
||||
return value.as_string_view();
|
||||
}
|
||||
};
|
||||
|
||||
// user-agent metadata trait.
|
||||
struct UserAgentMetadata : public SimpleSliceBasedMetadata {
|
||||
static constexpr bool kRepeatable = false;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
// Copyright 2023 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_SRC_CORE_LIB_TRANSPORT_SIMPLE_SLICE_BASED_METADATA_H
|
||||
#define GRPC_SRC_CORE_LIB_TRANSPORT_SIMPLE_SLICE_BASED_METADATA_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "absl/strings/string_view.h"
|
||||
|
||||
#include "src/core/lib/slice/slice.h"
|
||||
#include "src/core/lib/transport/parsed_metadata.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
// Models grpc metadata (as per the rules for MetadataMap) for a metadata
|
||||
// element that consists of a Slice.
|
||||
// Use by deriving from this class and adding `kRepeatable` and `key()`.
|
||||
struct SimpleSliceBasedMetadata {
|
||||
using ValueType = Slice;
|
||||
using MementoType = Slice;
|
||||
static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
|
||||
return value.TakeOwned();
|
||||
}
|
||||
static ValueType MementoToValue(MementoType value) { return value; }
|
||||
static Slice Encode(const ValueType& x) { return x.Ref(); }
|
||||
static absl::string_view DisplayValue(const ValueType& value) {
|
||||
return value.as_string_view();
|
||||
}
|
||||
static absl::string_view DisplayMemento(const MementoType& value) {
|
||||
return value.as_string_view();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_SRC_CORE_LIB_TRANSPORT_SIMPLE_SLICE_BASED_METADATA_H
|
||||
|
|
@ -2637,6 +2637,7 @@ src/core/lib/transport/parsed_metadata.cc \
|
|||
src/core/lib/transport/parsed_metadata.h \
|
||||
src/core/lib/transport/pid_controller.cc \
|
||||
src/core/lib/transport/pid_controller.h \
|
||||
src/core/lib/transport/simple_slice_based_metadata.h \
|
||||
src/core/lib/transport/status_conversion.cc \
|
||||
src/core/lib/transport/status_conversion.h \
|
||||
src/core/lib/transport/tcp_connect_handshaker.cc \
|
||||
|
|
|
|||
|
|
@ -2420,6 +2420,7 @@ src/core/lib/transport/parsed_metadata.cc \
|
|||
src/core/lib/transport/parsed_metadata.h \
|
||||
src/core/lib/transport/pid_controller.cc \
|
||||
src/core/lib/transport/pid_controller.h \
|
||||
src/core/lib/transport/simple_slice_based_metadata.h \
|
||||
src/core/lib/transport/status_conversion.cc \
|
||||
src/core/lib/transport/status_conversion.h \
|
||||
src/core/lib/transport/tcp_connect_handshaker.cc \
|
||||
|
|
|
|||
Loading…
Reference in New Issue