Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Okstad <pokstad@gitlab.com>2019-05-22 23:27:52 +0300
committerPaul Okstad <pokstad@gitlab.com>2019-05-22 23:27:52 +0300
commit657be3edad17b180726f1c234c3014cc879b0f2b (patch)
treef80e854aad499f447a91b580af4392b327d49dac
parent353e4fa87035d8daaa3751ef6be25e2e08210815 (diff)
refactor protoregistry interface
-rw-r--r--internal/praefect/protoregistry/protoregistry.go31
-rw-r--r--internal/praefect/protoregistry/protoregistry_test.go3
-rw-r--r--internal/praefect/protoregistry/targetrepo_test.go2
3 files changed, 18 insertions, 18 deletions
diff --git a/internal/praefect/protoregistry/protoregistry.go b/internal/praefect/protoregistry/protoregistry.go
index 83f8a16bd..eed1b38d1 100644
--- a/internal/praefect/protoregistry/protoregistry.go
+++ b/internal/praefect/protoregistry/protoregistry.go
@@ -66,33 +66,35 @@ func (mi MethodInfo) TargetRepo(msg proto.Message) (*gitalypb.Repository, error)
// Registry contains info about RPC methods
type Registry struct {
sync.RWMutex
- protos map[string]map[string]MethodInfo
+ protos map[string]MethodInfo
}
// New creates a new ProtoRegistry
func New() *Registry {
return &Registry{
- protos: make(map[string]map[string]MethodInfo),
+ protos: make(map[string]MethodInfo),
}
}
-// RegisterFiles takes one or more descriptor.FileDescriptorProto and populates the registry with its info
+// RegisterFiles takes one or more descriptor.FileDescriptorProto and populates
+// the registry with its info
func (pr *Registry) RegisterFiles(protos ...*descriptor.FileDescriptorProto) error {
pr.Lock()
defer pr.Unlock()
for _, p := range protos {
- for _, serviceDescriptorProto := range p.GetService() {
- for _, methodDescriptorProto := range serviceDescriptorProto.GetMethod() {
- mi, err := parseMethodInfo(methodDescriptorProto)
+ for _, svc := range p.GetService() {
+ for _, method := range svc.GetMethod() {
+ mi, err := parseMethodInfo(method)
if err != nil {
return err
}
- if _, ok := pr.protos[serviceDescriptorProto.GetName()]; !ok {
- pr.protos[serviceDescriptorProto.GetName()] = make(map[string]MethodInfo)
- }
- pr.protos[serviceDescriptorProto.GetName()][methodDescriptorProto.GetName()] = mi
+ fullMethodName := fmt.Sprintf(
+ "/%s.%s/%s",
+ p.GetPackage(), svc.GetName(), method.GetName(),
+ )
+ pr.protos[fullMethodName] = mi
}
}
}
@@ -189,16 +191,13 @@ func parseOID(rawFieldOID string) ([]int, error) {
}
// LookupMethod looks up an MethodInfo by service and method name
-func (pr *Registry) LookupMethod(service, method string) (MethodInfo, error) {
+func (pr *Registry) LookupMethod(fullMethodName string) (MethodInfo, error) {
pr.RLock()
defer pr.RUnlock()
- if _, ok := pr.protos[service]; !ok {
- return MethodInfo{}, fmt.Errorf("service not found: %v", service)
- }
- methodInfo, ok := pr.protos[service][method]
+ methodInfo, ok := pr.protos[fullMethodName]
if !ok {
- return MethodInfo{}, fmt.Errorf("method not found: %v", method)
+ return MethodInfo{}, fmt.Errorf("Full method name not found: %v", fullMethodName)
}
return methodInfo, nil
}
diff --git a/internal/praefect/protoregistry/protoregistry_test.go b/internal/praefect/protoregistry/protoregistry_test.go
index 56cffe255..3d896d6d7 100644
--- a/internal/praefect/protoregistry/protoregistry_test.go
+++ b/internal/praefect/protoregistry/protoregistry_test.go
@@ -1,6 +1,7 @@
package protoregistry_test
import (
+ "fmt"
"testing"
"github.com/stretchr/testify/assert"
@@ -187,7 +188,7 @@ func TestPopulatesProtoRegistry(t *testing.T) {
for serviceName, methods := range expectedResults {
for methodName, opType := range methods {
- methodInfo, err := r.LookupMethod(serviceName, methodName)
+ methodInfo, err := r.LookupMethod(fmt.Sprintf("/gitaly.%s/%s", serviceName, methodName))
require.NoError(t, err)
assert.Equalf(t, opType, methodInfo.Operation, "expect %s:%s to have the correct op type", serviceName, methodName)
}
diff --git a/internal/praefect/protoregistry/targetrepo_test.go b/internal/praefect/protoregistry/targetrepo_test.go
index fc016807d..f2c1f394e 100644
--- a/internal/praefect/protoregistry/targetrepo_test.go
+++ b/internal/praefect/protoregistry/targetrepo_test.go
@@ -63,7 +63,7 @@ func TestProtoRegistryTargetRepo(t *testing.T) {
for _, tc := range testcases {
desc := fmt.Sprintf("%s:%s %s", tc.svc, tc.method, tc.desc)
t.Run(desc, func(t *testing.T) {
- info, err := r.LookupMethod(tc.svc, tc.method)
+ info, err := r.LookupMethod(fmt.Sprintf("/gitaly.%s/%s", tc.svc, tc.method))
require.NoError(t, err)
actualTarget, actualErr := info.TargetRepo(tc.pbMsg)