Skip to content

Latest commit

 

History

History
62 lines (49 loc) · 2.61 KB

A15-promote-reflection.md

File metadata and controls

62 lines (49 loc) · 2.61 KB

Promote Reflection

Abstract

Promote the Reflection Service from v1alpha to v1

Background

Reflection is a means by which a server can describe what messages it supports. Both the protocol and the description of the reflection service have not changed for a long time.

Proposal

It is proposed that the package name (and corresponding directory structure) for reflection.proto be changed from grpc.reflection.v1alpha to grpc.reflection.v1. The C++ reflection implementation will be copied with the new package path, while the old one will be deprecated. C# will also be copied with the new package path, deprecating the old version. Java and Go implementations of the gRPC reflection service should also be updated to match. Additionally, the canonical proto definition should be created in the grpc-proto repository to serve as a source of truth.

To facilitate the package name change, the new location and package of the proto will be created. This will involve copying the existing proto file to the new destination. All clients will be adapted to prefer the new service name. All servers will dual support both services for a release. Lastly, the old service will be deprecated and marked for removal in the near future.

As of this writing, the only known users of refle

Rationale

It is unlikely that the reflection proto service will change in backwards-incompatible ways. The service has been implemented in each language implementation of gRPC and has not changed in two years.

Implementation

  1. Copy grpc/reflection/v1alpha/reflection.proto to grpc/reflection/v1/reflection.proto and update package name.
  2. Update existing service implementations in each repo to support the new location in addition to the old location.
  3. The old reflection.proto will be marked deprecated and for removal.
  4. Clients (such as grpc_cli) will be updated to dual request reflection information, preferring the new location first.
  5. In an upcoming release (e.g. v1.15.x), the new proto will be announced and the old proto will be declared for removal.
  6. In the subsequent release (e.g. 1.16.x), the old implementations will be removed, clients updated to not dual request, and the old proto removed.