Skip to content

Commit e597821

Browse files
committed
CNS to Unix domain socket capability
1 parent 2bd7076 commit e597821

File tree

3 files changed

+46
-21
lines changed

3 files changed

+46
-21
lines changed

cns/configuration/configuration.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,10 @@ type KeyVaultSettings struct {
112112
}
113113

114114
type GRPCSettings struct {
115-
Enable bool
116-
IPAddress string
117-
Port uint16
115+
Enable bool
116+
IPAddress string
117+
Port uint16
118+
DomainSocketPath string
118119
}
119120

120121
func getConfigFilePath(cmdPath string) (string, error) {

cns/grpc/server.go

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ type Server struct {
2222

2323
// GrpcServerSettings holds the gRPC server settings.
2424
type ServerSettings struct {
25-
IPAddress string
26-
Port uint16
25+
IPAddress string
26+
Port uint16
27+
DomainSocketPath string
2728
}
2829

2930
// NewServer initializes a new gRPC server instance.
@@ -43,24 +44,46 @@ func NewServer(settings ServerSettings, cnsService pb.CNSServer, logger *zap.Log
4344
}
4445

4546
// Start starts the gRPC server.
47+
// Now this has the capability of listening over both TCP and Unix Domain Sockets.
48+
// If both IPAddress and DomainSocketPath are provided, it will prioritize TCP.
4649
func (s *Server) Start() error {
47-
address := net.JoinHostPort(s.Settings.IPAddress, strconv.FormatUint(uint64(s.Settings.Port), 10))
48-
lis, err := net.Listen("tcp", address)
49-
if err != nil {
50-
log.Printf("[Listener] Failed to listen on gRPC endpoint: %+v", err)
51-
return fmt.Errorf("failed to listen on address %s: %w", address, err)
52-
}
53-
log.Printf("[Listener] Started listening on gRPC endpoint %s.", address)
50+
if s.Settings.IPAddress != "" || s.Settings.Port != 0 {
51+
address := net.JoinHostPort(s.Settings.IPAddress, strconv.FormatUint(uint64(s.Settings.Port), 10))
52+
lis, err := net.Listen("tcp", address)
53+
if err != nil {
54+
log.Printf("[Listener] Failed to listen on gRPC endpoint: %+v", err)
55+
return fmt.Errorf("failed to listen on address %s: %w", address, err)
56+
}
57+
log.Printf("[Listener] Started listening on gRPC endpoint %s.", address)
5458

55-
grpcServer := grpc.NewServer()
56-
pb.RegisterCNSServer(grpcServer, s.CnsService)
59+
grpcServer := grpc.NewServer()
60+
pb.RegisterCNSServer(grpcServer, s.CnsService)
5761

58-
// Register reflection service on gRPC server.
59-
reflection.Register(grpcServer)
62+
// Register reflection service on gRPC server.
63+
reflection.Register(grpcServer)
6064

61-
if err := grpcServer.Serve(lis); err != nil {
62-
return fmt.Errorf("failed to serve gRPC server: %w", err)
63-
}
65+
if err := grpcServer.Serve(lis); err != nil {
66+
return fmt.Errorf("failed to serve gRPC server: %w", err)
67+
}
68+
} else if s.Settings.DomainSocketPath != "" {
69+
lis, err := net.Listen("unix", s.Settings.DomainSocketPath)
70+
if err != nil {
71+
log.Printf("[Listener] Failed to listen on gRPC Unix Domain Socket: %+v", err)
72+
return fmt.Errorf("failed to listen on Unix Domain Socket %s: %w", s.Settings.DomainSocketPath, err)
73+
}
74+
log.Printf("[Listener] Started listening on gRPC Unix Domain Socket %s.", s.Settings.DomainSocketPath)
75+
76+
grpcServer := grpc.NewServer()
77+
pb.RegisterCNSServer(grpcServer, s.CnsService)
6478

79+
// Register reflection service on gRPC server.
80+
reflection.Register(grpcServer)
81+
82+
if err := grpcServer.Serve(lis); err != nil {
83+
return fmt.Errorf("failed to serve gRPC server: %w", err)
84+
}
85+
} else {
86+
return fmt.Errorf("no valid gRPC server settings provided: IP address or domain socket path must be specified")
87+
}
6588
return nil
6689
}

cns/service/main.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -974,8 +974,9 @@ func main() {
974974
if cnsconfig.GRPCSettings.Enable {
975975
// Define gRPC server settings
976976
settings := grpc.ServerSettings{
977-
IPAddress: cnsconfig.GRPCSettings.IPAddress,
978-
Port: cnsconfig.GRPCSettings.Port,
977+
IPAddress: cnsconfig.GRPCSettings.IPAddress,
978+
Port: cnsconfig.GRPCSettings.Port,
979+
DomainSocketPath: cnsconfig.GRPCSettings.DomainSocketPath,
979980
}
980981

981982
// Initialize CNS service

0 commit comments

Comments
 (0)