Skip to content

Commit b4d4256

Browse files
authored
fix: observe GRPC client (#135)
* fix: observe GRPC client Signed-off-by: gatici <[email protected]> * chore: add fmt and golint to `make` options Signed-off-by: gatici <[email protected]> * fix: rename and organize a method Signed-off-by: gatici <[email protected]> * chore: change config5g Signed-off-by: gatici <[email protected]> * adding gClient Signed-off-by: gatici <[email protected]> * do not return if message is not available Signed-off-by: gatici <[email protected]> * chore: change the orders Signed-off-by: gatici <[email protected]> * fix: get the new stream Signed-off-by: gatici <[email protected]> * fix: change method Signed-off-by: gatici <[email protected]> * modify subscribeToConfigPod Signed-off-by: gatici <[email protected]> * compare old response and new response Signed-off-by: gatici <[email protected]> * Trigger config updates in service Signed-off-by: gatici <[email protected]> * add log Signed-off-by: gatici <[email protected]> * get stream once Signed-off-by: gatici <[email protected]> * increasing timeout Signed-off-by: gatici <[email protected]> * check stream availability Signed-off-by: gatici <[email protected]> * create stream Signed-off-by: gatici <[email protected]> * use random client subscription id Signed-off-by: gatici <[email protected]> * refactoring methods Signed-off-by: gatici <[email protected]> * If config server restarted, reset the channel Signed-off-by: gatici <[email protected]> * Replacing config5g with local folder for testing Signed-off-by: gatici <[email protected]> * adding gclient again Signed-off-by: gatici <[email protected]> * arrranging sleep seconds Signed-off-by: gatici <[email protected]> * importing gclient from config5g Signed-off-by: gatici <[email protected]> * resolve merge conflicts Signed-off-by: gatici <[email protected]> * fix linting issues Signed-off-by: gatici <[email protected]> * chore: use updated config5g version Signed-off-by: gatici <[email protected]> * removing spots Signed-off-by: gatici <[email protected]> * move if clause to check MANAGED_BY_CONFIG_POD env value to service Signed-off-by: gatici <[email protected]> * Create UpdateDB channel in config.go init function Signed-off-by: gatici <[email protected]> --------- Signed-off-by: gatici <[email protected]>
1 parent 8392ac8 commit b4d4256

File tree

7 files changed

+78
-21
lines changed

7 files changed

+78
-21
lines changed

Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,8 @@ test: .coverage
9595
-v \
9696
./ ./...
9797

98+
fmt:
99+
@go fmt ./...
100+
101+
golint:
102+
@docker run --rm -v $(CURDIR):/app -w /app golangci/golangci-lint:latest golangci-lint run -v --config /app/.golangci.yml

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.1-dev
1+
1.6.1

factory/config.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ var (
8080

8181
func init() {
8282
ConfigPodTrigger = make(chan bool)
83+
ConfigUpdateDbTrigger = make(chan *UpdateDb, 10)
8384
}
8485

8586
func (c *Config) GetVersion() string {
@@ -106,7 +107,7 @@ func (c *Config) addSmPolicyInfo(nwSlice *protos.NetworkSlice, dbUpdateChannel c
106107
return nil
107108
}
108109

109-
func (c *Config) updateConfig(commChannel chan *protos.NetworkSliceResponse, dbUpdateChannel chan *UpdateDb) bool {
110+
func (c *Config) UpdateConfig(commChannel chan *protos.NetworkSliceResponse, dbUpdateChannel chan *UpdateDb) bool {
110111
var minConfig bool
111112
for rsp := range commChannel {
112113
logger.GrpcLog.Infoln("received updateConfig in the udr app:", rsp)

factory/factory.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"fmt"
1515
"os"
1616

17-
"github.com/omec-project/config5g/proto/client"
1817
protos "github.com/omec-project/config5g/proto/sdcoreConfig"
1918
"github.com/omec-project/udr/logger"
2019
"gopkg.in/yaml.v2"
@@ -52,18 +51,6 @@ func InitConfigFactory(f string) error {
5251
if UdrConfig.Configuration.WebuiUri == "" {
5352
UdrConfig.Configuration.WebuiUri = "webui:9876"
5453
}
55-
roc := os.Getenv("MANAGED_BY_CONFIG_POD")
56-
if roc == "true" {
57-
logger.InitLog.Infoln("MANAGED_BY_CONFIG_POD is true")
58-
commChannel := client.ConfigWatcher(UdrConfig.Configuration.WebuiUri)
59-
ConfigUpdateDbTrigger = make(chan *UpdateDb, 10)
60-
go UdrConfig.updateConfig(commChannel, ConfigUpdateDbTrigger)
61-
} else {
62-
go func() {
63-
logger.InitLog.Infoln("use helm chart config")
64-
ConfigPodTrigger <- true
65-
}()
66-
}
6754
}
6855

6956
return nil

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ require (
77
github.com/gin-gonic/gin v1.10.0
88
github.com/google/uuid v1.6.0
99
github.com/mitchellh/mapstructure v1.5.0
10-
github.com/omec-project/config5g v1.5.1
10+
github.com/omec-project/config5g v1.5.4
1111
github.com/omec-project/openapi v1.3.1
1212
github.com/omec-project/util v1.2.3
1313
github.com/prometheus/client_golang v1.20.5
@@ -70,7 +70,7 @@ require (
7070
golang.org/x/text v0.19.0 // indirect
7171
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
7272
google.golang.org/grpc v1.67.1 // indirect
73-
google.golang.org/protobuf v1.34.2 // indirect
73+
google.golang.org/protobuf v1.35.1 // indirect
7474
gopkg.in/h2non/gock.v1 v1.1.2 // indirect
7575
gopkg.in/yaml.v3 v3.0.1 // indirect
7676
)

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
8080
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
8181
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4=
8282
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
83-
github.com/omec-project/config5g v1.5.1 h1:JaVgr76tnjJIb7Uoesv5a9GI72NdOXtCvfukj0/ONio=
84-
github.com/omec-project/config5g v1.5.1/go.mod h1:o04ZdwGcM7tbGjuT5t/WzYSKLXOSnFl6vH7b6BGAspU=
83+
github.com/omec-project/config5g v1.5.4 h1:5JMw5Fsr5qyLZpQi3IZQaQPj78QJMFQXDVS3QDMOY9Y=
84+
github.com/omec-project/config5g v1.5.4/go.mod h1:HOvQtmi79f8cw35AiFHWHDoCTuZbXfMjeFJWgtPbwaI=
8585
github.com/omec-project/openapi v1.3.1 h1:NCteMRdMtWnMhf1CXYduuLgeu8fEhc/7XO1CiE7fN3Y=
8686
github.com/omec-project/openapi v1.3.1/go.mod h1:cR6Iharp2TLOzEmskQ/EdCVFZnpKh0zTvUSSuyXAYLE=
8787
github.com/omec-project/util v1.2.3 h1:h32ZYFT99+fB9VPp1CQUIKwrSP6RtX+PbFDcqmEHmn0=
@@ -183,8 +183,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:
183183
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
184184
google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
185185
google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
186-
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
187-
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
186+
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
187+
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
188188
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
189189
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
190190
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

service/init.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"syscall"
1919
"time"
2020

21+
grpcClient "github.com/omec-project/config5g/proto/client"
22+
protos "github.com/omec-project/config5g/proto/sdcoreConfig"
2123
"github.com/omec-project/openapi/models"
2224
"github.com/omec-project/udr/consumer"
2325
"github.com/omec-project/udr/context"
@@ -85,9 +87,71 @@ func (udr *UDR) Initialize(c *cli.Context) error {
8587
return err
8688
}
8789

90+
if os.Getenv("MANAGED_BY_CONFIG_POD") == "true" {
91+
logger.InitLog.Infoln("MANAGED_BY_CONFIG_POD is true")
92+
go manageGrpcClient(factory.UdrConfig.Configuration.WebuiUri)
93+
} else {
94+
go func() {
95+
logger.InitLog.Infoln("use helm chart config")
96+
factory.ConfigPodTrigger <- true
97+
}()
98+
}
99+
88100
return nil
89101
}
90102

103+
// manageGrpcClient connects the config pod GRPC server and subscribes the config changes.
104+
// Then it updates UDR configuration.
105+
func manageGrpcClient(webuiUri string) {
106+
var configChannel chan *protos.NetworkSliceResponse
107+
var client grpcClient.ConfClient
108+
var stream protos.ConfigService_NetworkSliceSubscribeClient
109+
var err error
110+
count := 0
111+
for {
112+
if client != nil {
113+
if client.CheckGrpcConnectivity() != "ready" {
114+
time.Sleep(time.Second * 30)
115+
count++
116+
if count > 5 {
117+
err = client.GetConfigClientConn().Close()
118+
if err != nil {
119+
logger.InitLog.Infof("failing ConfigClient is not closed properly: %+v", err)
120+
}
121+
client = nil
122+
count = 0
123+
}
124+
logger.InitLog.Infoln("checking the connectivity readiness")
125+
continue
126+
}
127+
128+
if stream == nil {
129+
stream, err = client.SubscribeToConfigServer()
130+
if err != nil {
131+
logger.InitLog.Infof("failing SubscribeToConfigServer: %+v", err)
132+
continue
133+
}
134+
}
135+
136+
if configChannel == nil {
137+
configChannel = client.PublishOnConfigChange(true, stream)
138+
logger.InitLog.Infoln("PublishOnConfigChange is triggered")
139+
go factory.UdrConfig.UpdateConfig(configChannel, factory.ConfigUpdateDbTrigger)
140+
logger.InitLog.Infoln("UDR updateConfig is triggered")
141+
}
142+
} else {
143+
client, err = grpcClient.ConnectToConfigServer(webuiUri)
144+
stream = nil
145+
configChannel = nil
146+
logger.InitLog.Infoln("connecting to config server")
147+
if err != nil {
148+
logger.InitLog.Errorf("%+v", err)
149+
}
150+
continue
151+
}
152+
}
153+
}
154+
91155
func (udr *UDR) setLogLevel() {
92156
if factory.UdrConfig.Logger == nil {
93157
logger.InitLog.Warnln("UDR config without log level setting")

0 commit comments

Comments
 (0)