Praefect: extract repository destination from gRPC stream
In order for Praefect to correctly forward RPC's and correctly mark modified repositories for replication, the ability to identify the destination repository will be needed. This will be challenging since the location of the repository in an RPC message may vary.
For example, refer to the following excerpt from the repository service protobuf file:
message RepositoryExistsRequest {
option (op_type).op = ACCESSOR;
Repository repository = 1;
}
message RepackIncrementalRequest {
option (op_type).op = MUTATOR;
Repository repository = 1;
}
message RepackFullRequest {
option (op_type).op = MUTATOR;
Repository repository = 1;
bool create_bitmap = 2;
}
You can see that generally the request message is field 1 for this service.
There are also some requests that have more than one repo:
message FetchSourceBranchRequest {
option (op_type).op = MUTATOR;
Repository repository = 1;
Repository source_repository = 2;
bytes source_branch = 3;
bytes target_ref = 4;
}
Also, there may be some RPC's that contain no repositories (e.g. RPC's for configuring an entire Gitaly server).