mirror of https://github.com/grpc/grpc.git
Gcp Observability Logging: The Call ID should use a UUIDv4 format (#32699)
Earlier, we were simply using a 64 bit random number, but the spec actually calls for UUIDv4. <!-- 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. -->pull/32706/head
parent
62f3c448fe
commit
fcff4bd1d0
14 changed files with 239 additions and 15 deletions
@ -0,0 +1,39 @@ |
||||
//
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include "src/core/lib/gprpp/uuid_v4.h" |
||||
|
||||
#include <initializer_list> |
||||
|
||||
#include "absl/strings/str_format.h" |
||||
|
||||
namespace grpc_core { |
||||
|
||||
std::string GenerateUUIDv4(uint64_t hi, uint64_t lo) { |
||||
uint32_t time_low = hi >> 32; |
||||
uint16_t time_mid = hi >> 16; |
||||
uint16_t time_hi_and_version = (hi & 0x0fff) | 0x4000; |
||||
uint16_t clock_seq_hi_low = ((lo >> 48) & 0x3fff) | 0x8000; |
||||
uint64_t node = lo & 0xffffffffffff; |
||||
return absl::StrFormat("%08x-%04x-%04x-%04x-%012x", time_low, time_mid, |
||||
time_hi_and_version, clock_seq_hi_low, node); |
||||
} |
||||
|
||||
} // namespace grpc_core
|
@ -0,0 +1,36 @@ |
||||
//
|
||||
//
|
||||
// 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_GPRPP_UUID_V4_H |
||||
#define GRPC_SRC_CORE_LIB_GPRPP_UUID_V4_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include <string> |
||||
|
||||
namespace grpc_core { |
||||
|
||||
// Generates string in the UUIDv4 form. \a hi and \a lo are expected to be
|
||||
// random numbers.
|
||||
std::string GenerateUUIDv4(uint64_t hi, uint64_t lo); |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_SRC_CORE_LIB_GPRPP_UUID_V4_H
|
@ -0,0 +1,35 @@ |
||||
// 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.
|
||||
|
||||
#include "src/core/lib/gprpp/uuid_v4.h" |
||||
|
||||
#include "gtest/gtest.h" |
||||
|
||||
namespace grpc_core { |
||||
|
||||
namespace { |
||||
|
||||
TEST(UUIDv4Test, Basic) { |
||||
EXPECT_EQ(GenerateUUIDv4(0, 0), "00000000-0000-4000-8000-000000000000"); |
||||
EXPECT_EQ(GenerateUUIDv4(0x0123456789abcdef, 0x0123456789abcdef), |
||||
"01234567-89ab-4def-8123-456789abcdef"); |
||||
} |
||||
|
||||
} // namespace
|
||||
} // namespace grpc_core
|
||||
|
||||
int main(int argc, char** argv) { |
||||
::testing::InitGoogleTest(&argc, argv); |
||||
return RUN_ALL_TESTS(); |
||||
} |
Loading…
Reference in new issue