X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=internal%2Fsdlgoredis%2Fsdlgoredis.go;h=4121bb9abe50ab371f8e3f7c6975ee70d2a20723;hb=refs%2Fchanges%2F50%2F9150%2F1;hp=20ed0bf18e94853fcc60b6466bcd29646a8b91bc;hpb=6ffe956f918e3fac2e939847268b2ae94684a738;p=ric-plt%2Fsdlgo.git diff --git a/internal/sdlgoredis/sdlgoredis.go b/internal/sdlgoredis/sdlgoredis.go index 20ed0bf..4121bb9 100644 --- a/internal/sdlgoredis/sdlgoredis.go +++ b/internal/sdlgoredis/sdlgoredis.go @@ -324,26 +324,25 @@ func (db *DB) CloseDB() error { return db.client.Close() } -func (db *DB) UnsubscribeChannelDB(channels ...string) { +func (db *DB) UnsubscribeChannelDB(channels ...string) error { for _, v := range channels { db.sCbMap.Remove(v) db.ch.removeChannel <- v + errStr := <-db.ch.removeChannel + if errStr != "" { + return fmt.Errorf("SDL Unsubscribe of channel %s failed: %s", v, errStr) + } if db.sCbMap.Count() == 0 { db.ch.exit <- true } } + return nil } -func (db *DB) SubscribeChannelDB(cb func(string, ...string), channels ...string) { +func (db *DB) SubscribeChannelDB(cb func(string, ...string), channels ...string) error { if db.sCbMap.Count() == 0 { - for _, v := range channels { - db.sCbMap.Add(v, cb) - } - - go func(sCbMap *sharedCbMap, - ch intChannels, - channels ...string) { - sub := db.subscribe(db.ctx, db.client, channels...) + go func(sCbMap *sharedCbMap, ch intChannels) { + sub := db.subscribe(db.ctx, db.client, "") rxChannel := sub.Channel() lCbMap := sCbMap.GetMapCopy() for { @@ -356,10 +355,18 @@ func (db *DB) SubscribeChannelDB(cb func(string, ...string), channels ...string) } case channel := <-ch.addChannel: lCbMap = sCbMap.GetMapCopy() - sub.Subscribe(db.ctx, channel) + if err := sub.Subscribe(db.ctx, channel); err != nil { + ch.addChannel <- err.Error() + } else { + ch.addChannel <- "" + } case channel := <-ch.removeChannel: lCbMap = sCbMap.GetMapCopy() - sub.Unsubscribe(db.ctx, channel) + if err := sub.Unsubscribe(db.ctx, channel); err != nil { + ch.removeChannel <- err.Error() + } else { + ch.removeChannel <- "" + } case exit := <-ch.exit: if exit { if err := sub.Close(); err != nil { @@ -369,14 +376,17 @@ func (db *DB) SubscribeChannelDB(cb func(string, ...string), channels ...string) } } } - }(db.sCbMap, db.ch, channels...) - - } else { - for _, v := range channels { - db.sCbMap.Add(v, cb) - db.ch.addChannel <- v + }(db.sCbMap, db.ch) + } + for _, v := range channels { + db.sCbMap.Add(v, cb) + db.ch.addChannel <- v + errStr := <-db.ch.addChannel + if errStr != "" { + return fmt.Errorf("SDL Subscribe of channel %s failed: %s", v, errStr) } } + return nil } func (db *DB) MSet(pairs ...interface{}) error { @@ -840,14 +850,21 @@ func (db *DB) fillDbStateFromDbInfo(info *DbInfo) (*DbState, error) { return &dbState, dbState.Err } -func createReplicaDbClient(host string) *DB { - addr, port, _ := net.SplitHostPort(host) - return createDbClient(addr, port, "", "", "", newRedisClient, subscribeNotifications, nil) +func createReplicaDbClient(host string) (*DB, error) { + addr, port, err := net.SplitHostPort(host) + if err != nil { + return nil, err + } + return createDbClient(addr, port, "", "", "", newRedisClient, subscribeNotifications, nil), err } func getStatisticsInfo(db *DB, host string) (*DbStatisticsInfo, error) { + var err error dbStatisticsInfo := new(DbStatisticsInfo) - dbStatisticsInfo.IPAddr, dbStatisticsInfo.Port, _ = net.SplitHostPort(host) + dbStatisticsInfo.IPAddr, dbStatisticsInfo.Port, err = net.SplitHostPort(host) + if err != nil { + return nil, err + } info, err := db.Info() if err != nil { @@ -874,9 +891,14 @@ func sentinelStatistics(db *DB) (*DbStatistics, error) { if dbState.ReplicasDbState != nil { for _, r := range dbState.ReplicasDbState.States { - replicaDb := createReplicaDbClient(r.GetAddress()) + replicaDb, err := createReplicaDbClient(r.GetAddress()) + if err != nil { + return nil, err + } dbStatisticsInfo, err = getStatisticsInfo(replicaDb, r.GetAddress()) - replicaDb.CloseDB() + if closeErr := replicaDb.CloseDB(); closeErr != nil { + return nil, closeErr + } if err != nil { return nil, err }