(take a look at MetdataMap<>::Log() for an API to get a textual
representation out of *all* the things)

On Thu, Oct 12, 2023 at 4:21 PM Craig Tiller <ctil...@google.com> wrote:

> `PeerString` (and some others) are Non-encodable metadata: they're getting
> carried around there because they make sense at the same times as metadata,
> but they don't go out on the wire.
> So... being non-encodable Encode() skips them.
>
> There's some logging helpers that will catch them, so they show up as
> debug text, but they're not directly iterable right now.
>
> On Thu, Oct 12, 2023 at 3:53 PM John Ousterhout <john.ousterh...@gmail.com>
> wrote:
>
>> In the Homa module for gRPC there are a few places where the code needs
>> to iterate over all of the values in a grpc_metadata_batch, but there are
>> currently cases where my code isn't seeing all of the values. Here is an
>> example from my code that attempts to log all of the values in a batch. The
>> code invokes the Encode method, passing it a MetataLogger object:
>>
>> grpc_metadata_batch *batch;
>> MetadataLogger logger(separator);
>> batch->Encode(&logger);
>>
>> Here is the definition of the logger object:
>>
>> class MetadataLogger {
>> public:
>>     MetadataLogger(const char *separator) : separator(separator) {}
>>
>>     void Encode(const grpc_core::Slice &key, const grpc_core::Slice
>> &value)
>>     {
>>         uint32_t keyLength = key.length();
>>         uint32_t valueLength = value.length();
>>         Mock::logPrintf(separator, "metadata %.*s: %.*s", keyLength,
>>                 key.data(), valueLength, value.data());
>>     }
>>
>>     template <typename MetadataTrait>
>>     void Encode(MetadataTrait, const grpc_core::Slice &value)
>>     {
>>         absl::string_view key = MetadataTrait::key();
>>         uint32_t keyLength = key.length();
>>         uint32_t valueLength = value.length();
>>         Mock::logPrintf(separator, "metadata %.*s: %.*s", keyLength,
>>                 key.data(), valueLength, value.data());
>>     }
>>
>>     template <typename MetadataTrait>
>>     void Encode(MetadataTrait, const typename MetadataTrait::ValueType&
>> value)
>>     {
>>         absl::string_view key = MetadataTrait::key();
>>         uint32_t keyLength = key.length();
>>         const grpc_core::Slice& slice =
>>                 grpc_core::MetadataValueAsSlice<MetadataTrait>(value);
>>         uint32_t valueLength = slice.length();
>>         Mock::logPrintf(separator, "metadata %.*s: %.*s", keyLength,
>>                 key.data(), valueLength, slice.data());
>>     }
>>
>>     const char *separator;
>> };
>>
>> The class has 3 different Encode methods, intended to catch all of the
>> different variants of metadata. However, it doesn't seem to be catching
>> absolutely all of them. In particular, if I set the PeerString value, where
>> the key is grpc_core::PeerString(), none of these methods gets invoked. Are
>> there other variants of Encode that I need to define to catch this key?
>> What do I need to do to be sure I'm catching absolutely all of the metadata
>> entries? Is there a better way I should be doing this?
>>
>> Thanks in advance for any help you can provide.
>>
>> -John-
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "grpc.io" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to grpc-io+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/grpc-io/f14fe33f-5f76-4f6a-9066-b9c920ed9835n%40googlegroups.com
>> <https://groups.google.com/d/msgid/grpc-io/f14fe33f-5f76-4f6a-9066-b9c920ed9835n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CAAvp3oNv7tz533qajQP35i93FcrHpRU1Xh-DH5SLQ3HFNMwZCg%40mail.gmail.com.

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to