Use the SDL library to replace direct use of Redis

Signed-off-by: jinwei.fan <jinwei.fan@samsung.com>
Change-Id: I8334c46e6f4faf2370826f9e422bba4cb608b7ff
This commit is contained in:
jinwei.fan 2021-01-29 13:42:38 +08:00
parent 3f2db5513a
commit 3682cf7263

View File

@ -9,9 +9,9 @@ import (
"strings"
"sync"
"time"
"gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
"github.com/go-redis/redis"
//"github.com/go-redis/redis"
)
type Control struct {
@ -19,11 +19,12 @@ type Control struct {
eventCreateExpired int32 //maximum time for the RIC Subscription Request event creation procedure in the E2 Node
eventDeleteExpired int32 //maximum time for the RIC Subscription Request event deletion procedure in the E2 Node
rcChan chan *xapp.RMRParams //channel for receiving rmr message
client *redis.Client //redis client
//client *redis.Client //redis client
eventCreateExpiredMap map[string]bool //map for recording the RIC Subscription Request event creation procedure is expired or not
eventDeleteExpiredMap map[string]bool //map for recording the RIC Subscription Request event deletion procedure is expired or not
eventCreateExpiredMu *sync.Mutex //mutex for eventCreateExpiredMap
eventDeleteExpiredMu *sync.Mutex //mutex for eventDeleteExpiredMap
sdl *sdlgo.SdlInstance
}
func init() {
@ -43,15 +44,16 @@ func NewControl() Control {
return Control{strings.Split(str, ","),
5, 5,
make(chan *xapp.RMRParams),
redis.NewClient(&redis.Options{
Addr: os.Getenv("DBAAS_SERVICE_HOST") + ":" + os.Getenv("DBAAS_SERVICE_PORT"), //"localhost:6379"
Password: "",
DB: 0,
}),
//redis.NewClient(&redis.Options{
// Addr: os.Getenv("DBAAS_SERVICE_HOST") + ":" + os.Getenv("DBAAS_SERVICE_PORT"), //"localhost:6379"
// Password: "",
// DB: 0,
//}),
make(map[string]bool),
make(map[string]bool),
&sync.Mutex{},
&sync.Mutex{}}
&sync.Mutex{},
sdlgo.NewSdlInstance("kpimon", sdlgo.NewDatabase())}
}
func ReadyCB(i interface{}) {
@ -62,11 +64,11 @@ func ReadyCB(i interface{}) {
}
func (c *Control) Run() {
_, err := c.client.Ping().Result()
if err != nil {
xapp.Logger.Error("Failed to connect to Redis DB with %v", err)
log.Printf("Failed to connect to Redis DB with %v", err)
}
//_, err := c.client.Ping().Result()
//if err != nil {
// xapp.Logger.Error("Failed to connect to Redis DB with %v", err)
// log.Printf("Failed to connect to Redis DB with %v", err)
//}
if len(c.ranList) > 0 {
xapp.SetReadyCB(ReadyCB, c)
xapp.Run(c)
@ -644,10 +646,23 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
}
var ueMetrics UeMetricsEntry
if isUeExist, _ := c.client.Exists("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result(); isUeExist == 1 {
ueJsonStr, _ := c.client.Get("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result()
retStr, err := c.sdl.Get([]string{"{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)})
if err != nil {
panic(err)
xapp.Logger.Error("Failed to get ueMetrics from Redis!")
log.Printf("Failed to get ueMetrics from Redis!")
} else {
if retStr["{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)] != nil {
ueJsonStr := retStr["{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)].(string)
json.Unmarshal([]byte(ueJsonStr), &ueMetrics)
}
}
//if isUeExist, _ := c.client.Exists("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result(); isUeExist == 1 {
// ueJsonStr, _ := c.client.Get("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result()
// json.Unmarshal([]byte(ueJsonStr), &ueMetrics)
//}
ueMetrics.UeID = ueID
log.Printf("UeID: %d", ueMetrics.UeID)
@ -678,12 +693,20 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
log.Printf("Failed to marshal UeMetrics with UE ID [%d]: %v", ueID, err)
continue
}
err = c.client.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr, 0).Err()
err = c.sdl.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr)
if err != nil {
xapp.Logger.Error("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
log.Printf("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
continue
}
//err = c.client.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr, 0).Err()
//if err != nil {
// xapp.Logger.Error("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
// log.Printf("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
// continue
//}
}
}
} else if containerType == 2 {
@ -717,10 +740,23 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
}
var ueMetrics UeMetricsEntry
if isUeExist, _ := c.client.Exists("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result(); isUeExist == 1 {
ueJsonStr, _ := c.client.Get("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result()
retStr, err := c.sdl.Get([]string{"{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)})
if err != nil {
panic(err)
xapp.Logger.Error("Failed to get ueMetrics from Redis!")
log.Printf("Failed to get ueMetrics from Redis!")
} else {
if retStr["{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)] != nil {
ueJsonStr := retStr["{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)].(string)
json.Unmarshal([]byte(ueJsonStr), &ueMetrics)
}
}
//if isUeExist, _ := c.client.Exists("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result(); isUeExist == 1 {
// ueJsonStr, _ := c.client.Get("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result()
// json.Unmarshal([]byte(ueJsonStr), &ueMetrics)
//}
ueMetrics.UeID = ueID
log.Printf("UeID: %d", ueMetrics.UeID)
@ -761,12 +797,20 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
log.Printf("Failed to marshal UeMetrics with UE ID [%d]: %v", ueID, err)
continue
}
err = c.client.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr, 0).Err()
err = c.sdl.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr)
if err != nil {
xapp.Logger.Error("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
log.Printf("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
continue
}
//err = c.client.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr, 0).Err()
//if err != nil {
// xapp.Logger.Error("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
// log.Printf("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
// continue
//}
}
}
} else if containerType == 3 {
@ -800,10 +844,23 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
}
var ueMetrics UeMetricsEntry
if isUeExist, _ := c.client.Exists("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result(); isUeExist == 1 {
ueJsonStr, _ := c.client.Get("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result()
retStr, err := c.sdl.Get([]string{"{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)})
if err != nil {
panic(err)
xapp.Logger.Error("Failed to get ueMetrics from Redis!")
log.Printf("Failed to get ueMetrics from Redis!")
} else {
if retStr["{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)] != nil {
ueJsonStr := retStr["{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)].(string)
json.Unmarshal([]byte(ueJsonStr), &ueMetrics)
}
}
//if isUeExist, _ := c.client.Exists("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result(); isUeExist == 1 {
// ueJsonStr, _ := c.client.Get("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10)).Result()
// json.Unmarshal([]byte(ueJsonStr), &ueMetrics)
//}
ueMetrics.UeID = ueID
log.Printf("UeID: %d", ueMetrics.UeID)
@ -841,12 +898,20 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
log.Printf("Failed to marshal UeMetrics with UE ID [%d]: %v", ueID, err)
continue
}
err = c.client.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr, 0).Err()
err = c.sdl.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr)
if err != nil {
xapp.Logger.Error("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
log.Printf("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
continue
}
//err = c.client.Set("{TS-UE-metrics}," + strconv.FormatInt(ueID, 10), newUeJsonStr, 0).Err()
//if err != nil {
// xapp.Logger.Error("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
// log.Printf("Failed to set UeMetrics into redis with UE ID [%d]: %v", ueID, err)
// continue
//}
}
}
} else {
@ -858,10 +923,23 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
if flag {
var cellMetrics CellMetricsEntry
if isCellExist, _ := c.client.Exists("{TS-cell-metrics}," + cellIDHdr).Result(); isCellExist == 1 {
cellJsonStr, _ := c.client.Get("{TS-cell-metrics}," + cellIDHdr).Result()
retStr, err := c.sdl.Get([]string{"{TS-cell-metrics}," + cellIDHdr})
if err != nil {
panic(err)
xapp.Logger.Error("Failed to get cellMetrics from Redis!")
log.Printf("Failed to get cellMetrics from Redis!")
} else {
if retStr["{TS-cell-metrics}," + cellIDHdr] != nil {
cellJsonStr := retStr["{TS-cell-metrics}," + cellIDHdr].(string)
json.Unmarshal([]byte(cellJsonStr), &cellMetrics)
}
}
//if isCellExist, _ := c.client.Exists("{TS-cell-metrics}," + cellIDHdr).Result(); isCellExist == 1 {
// cellJsonStr, _ := c.client.Get("{TS-cell-metrics}," + cellIDHdr).Result()
// json.Unmarshal([]byte(cellJsonStr), &cellMetrics)
//}
cellMetrics.MeasPeriodPDCP = 20
cellMetrics.MeasPeriodPRB = 20
@ -894,12 +972,21 @@ func (c *Control) handleIndication(params *xapp.RMRParams) (err error) {
log.Printf("Failed to marshal CellMetrics with CellID [%s]: %v", cellIDHdr, err)
continue
}
err = c.client.Set("{TS-cell-metrics}," + cellIDHdr, newCellJsonStr, 0).Err()
err = c.sdl.Set("{TS-cell-metrics}," + cellIDHdr, newCellJsonStr)
if err != nil {
xapp.Logger.Error("Failed to set CellMetrics into redis with CellID [%s]: %v", cellIDHdr, err)
log.Printf("Failed to set CellMetrics into redis with CellID [%s]: %v", cellIDHdr, err)
continue
}
//err = c.client.Set("{TS-cell-metrics}," + cellIDHdr, newCellJsonStr, 0).Err()
//if err != nil {
// xapp.Logger.Error("Failed to set CellMetrics into redis with CellID [%s]: %v", cellIDHdr, err)
// log.Printf("Failed to set CellMetrics into redis with CellID [%s]: %v", cellIDHdr, err)
// continue
//}
}
}
} else {
@ -1212,3 +1299,4 @@ func (c *Control) sendRicSubDelRequest(subID int, requestSN int, funcID int) (er
return nil
}