Oops, you're right. I made a mistake in my test. I had two pieces of code
that iterate over metadata_batches and I only changed one of them to use
Log, but it was the other one that was actually getting used in the test.
Things are now working fine with Log; this solves all of my problems.

Thanks for your help, and sorry for my false alarm.

-John-

On Fri, Oct 13, 2023 at 12:47 AM Craig Tiller <ctil...@google.com> wrote:

> I just changed grpc_core::Call::ProcessIncomingInitialMetadata on my
> enlistment to add the line:
> gpr_log(GPR_ERROR, "%s", md.DebugString().c_str());
>
> (noting that DebugString calls Log to do its work)
>
> when I ran (the test I just happened to be debugging five minutes prior):
> bazel run test/core/end2end:disappearing_server_fuzzer
>
> I got:
> E0101 00:00:05.005000000  691479 call.cc:448]
>  PeerString: ipv4:127.0.0.1:2, user-agent: grpc-c/36.0.0 (linux; chttp2),
> :authority: localhost:1, grpc-timeout: @30005ms, GrpcRegisteredMethod:
> (nil), grpc-accept-encoding: identity, deflate, gzip, GrpcStatusFromWire:
> true, :method: POST
>
> So I think the docs there are up to date and there's something else at
> play.
>
>
> On Thu, Oct 12, 2023 at 10:02 PM John Ousterhout <
> john.ousterh...@gmail.com> wrote:
>
>> Thanks for the response. I tried MetadataMap<>::Log(), but it didn't
>> iterate over the peer string either (and I verified that the peer string is
>> present by calling batch.get_pointer(grpc_core::PeerString()). I then
>> thought perhaps MetadataMap<>::ForEach would do the trick, since its
>> comment says "Like Encode, but also visit the non-encodable fields". But,
>> then I noticed that Log uses ForEach, so the comment for ForEach must be
>> stale.
>>
>> Any other suggestions?
>>
>> -John-
>> On Thursday, October 12, 2023 at 4:22:34 PM UTC-7 Craig Tiller wrote:
>>
>>> (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 <cti...@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.ou...@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+u...@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/68277d44-9d1f-48df-b973-fff314e4feaen%40googlegroups.com
>> <https://groups.google.com/d/msgid/grpc-io/68277d44-9d1f-48df-b973-fff314e4feaen%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/CAGXJAmwOu%2Bx2s8pSjY9ogmUq_G9MsSyBYcqVsNcxMVkZ1R1JBA%40mail.gmail.com.

Reply via email to