diff --git a/VERSION b/VERSION index ec802c66..26ca5946 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.1-dev +1.5.1 diff --git a/go.mod b/go.mod index 518f14c9..4f8e639d 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 github.com/omec-project/aper v1.2.1 - github.com/omec-project/config5g v1.5.1 + github.com/omec-project/config5g v1.5.4 github.com/omec-project/nas v1.4.1 github.com/omec-project/ngap v1.3.0 github.com/omec-project/openapi v1.3.1 diff --git a/go.sum b/go.sum index 46b39e4a..1b0147ad 100644 --- a/go.sum +++ b/go.sum @@ -163,8 +163,8 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/omec-project/aper v1.2.1 h1:A4KhlTMta5mUA1DX2njOjOn0SuFi5WoWnSqdbRnl9Q8= github.com/omec-project/aper v1.2.1/go.mod h1:CbCZ0uNmcD3XA4YM6wBwpqP1PYtGAaC3RqLL4B5gG2U= -github.com/omec-project/config5g v1.5.1 h1:JaVgr76tnjJIb7Uoesv5a9GI72NdOXtCvfukj0/ONio= -github.com/omec-project/config5g v1.5.1/go.mod h1:o04ZdwGcM7tbGjuT5t/WzYSKLXOSnFl6vH7b6BGAspU= +github.com/omec-project/config5g v1.5.4 h1:5JMw5Fsr5qyLZpQi3IZQaQPj78QJMFQXDVS3QDMOY9Y= +github.com/omec-project/config5g v1.5.4/go.mod h1:HOvQtmi79f8cw35AiFHWHDoCTuZbXfMjeFJWgtPbwaI= github.com/omec-project/nas v1.4.1 h1:Ui3k5TnOQ8IGt09qUboaZ05IuMuVSbjZ54Y7iy85iVs= github.com/omec-project/nas v1.4.1/go.mod h1:R0x9ehAHi/CUdsMWP+XmefjloEGwobkqz1/c8308yBo= github.com/omec-project/ngap v1.3.0 h1:NuAc6GZRup6E3jg+fGTy8aR4VkOlB1mnkaaYr6OGmMc= diff --git a/service/init.go b/service/init.go index 581cd1d7..601a2c6c 100644 --- a/service/init.go +++ b/service/init.go @@ -40,7 +40,7 @@ import ( "github.com/omec-project/amf/producer/callback" "github.com/omec-project/amf/util" aperLogger "github.com/omec-project/aper/logger" - gClient "github.com/omec-project/config5g/proto/client" + grpcClient "github.com/omec-project/config5g/proto/client" protos "github.com/omec-project/config5g/proto/sdcoreConfig" nasLogger "github.com/omec-project/nas/logger" ngapLogger "github.com/omec-project/ngap/logger" @@ -144,10 +144,8 @@ func (amf *AMF) Initialize(c *cli.Context) error { factory.AmfConfig.Configuration.ServedGumaiList = nil factory.AmfConfig.Configuration.SupportTAIList = nil factory.AmfConfig.Configuration.PlmnSupportList = nil - logger.InitLog.Infoln("reading Amf related configuration from ROC") - client := gClient.ConnectToConfigServer(factory.AmfConfig.Configuration.WebuiUri) - configChannel := client.PublishOnConfigChange(true) - go amf.UpdateConfig(configChannel) + logger.InitLog.Infoln("Reading Amf related configuration from ROC") + go manageGrpcClient(factory.AmfConfig.Configuration.WebuiUri, amf) } else { go func() { logger.GrpcLog.Infoln("reading Amf Configuration from Helm") @@ -159,6 +157,58 @@ func (amf *AMF) Initialize(c *cli.Context) error { return nil } +// manageGrpcClient connects the config pod GRPC server and subscribes the config changes. +// Then it updates AMF configuration. +func manageGrpcClient(webuiUri string, amf *AMF) { + var configChannel chan *protos.NetworkSliceResponse + var client grpcClient.ConfClient + var stream protos.ConfigService_NetworkSliceSubscribeClient + var err error + count := 0 + for { + if client != nil { + if client.CheckGrpcConnectivity() != "ready" { + time.Sleep(time.Second * 30) + count++ + if count > 5 { + err = client.GetConfigClientConn().Close() + if err != nil { + logger.InitLog.Infof("failing ConfigClient is not closed properly: %+v", err) + } + client = nil + count = 0 + } + logger.InitLog.Infoln("checking the connectivity readiness") + continue + } + + if stream == nil { + stream, err = client.SubscribeToConfigServer() + if err != nil { + logger.InitLog.Infof("failing SubscribeToConfigServer: %+v", err) + continue + } + } + + if configChannel == nil { + configChannel = client.PublishOnConfigChange(true, stream) + logger.InitLog.Infoln("PublishOnConfigChange is triggered") + go amf.UpdateConfig(configChannel) + logger.InitLog.Infoln("AMF updateConfig is triggered") + } + } else { + client, err = grpcClient.ConnectToConfigServer(webuiUri) + stream = nil + configChannel = nil + logger.InitLog.Infoln("connecting to config server") + if err != nil { + logger.InitLog.Errorf("%+v", err) + } + continue + } + } +} + func (amf *AMF) WatchConfig() { viper.WatchConfig() viper.OnConfigChange(func(e fsnotify.Event) {