forked from vladaionescu/leveros
/
internalrpc.go
34 lines (30 loc) · 911 Bytes
/
internalrpc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package scale
import (
"time"
"google.golang.org/grpc"
)
// InternalRPCConn creates a GRPC connection to an internal service.
func InternalRPCConn(
grpcPool *GRPCPool, service string) (conn *grpc.ClientConn, err error) {
target, _, err := DereferenceService(service)
if err != nil {
return nil, err
}
return grpcPool.Dial(target)
}
// InternalRPCConnResource creates a GRPC connection to an internal resource.
// If the resource does dot exist, it is assigned atomically to an instance in
// the service.
func InternalRPCConnResource(
grpcPool *GRPCPool, service string, resource string, ttl time.Duration) (
conn *grpc.ClientConn, sessionID string, err error) {
res, _, err := DereferenceOrRegisterResource(service, resource, ttl)
if err != nil {
return nil, "", err
}
conn, err = grpcPool.Dial(res.target)
if err != nil {
return nil, "", err
}
return conn, res.GetSessionID(), nil
}