From fc8ce6255a81875f22a63ccbc778444a30df0522 Mon Sep 17 00:00:00 2001 From: amrutasali Date: Mon, 14 Oct 2019 21:56:11 +0000 Subject: [PATCH 1/3] Handle Table transformer Get on list instance level --- src/translib/transformer/xlate_from_db.go | 10 +++++++--- src/translib/transformer/xlate_to_db.go | 1 + src/translib/transformer/xlate_utils.go | 5 ++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/translib/transformer/xlate_from_db.go b/src/translib/transformer/xlate_from_db.go index 1e07e3d83a..a38339f54b 100644 --- a/src/translib/transformer/xlate_from_db.go +++ b/src/translib/transformer/xlate_from_db.go @@ -415,12 +415,10 @@ func dbDataFromTblXfmrGet(tbl string, inParams XfmrParams, dbDataMap *map[db.DBN func yangListDataFill(dbs [db.MaxDB]*db.DB, ygRoot *ygot.GoStruct, uri string, xpath string, dbDataMap *map[db.DBNum]map[string]map[string]db.Value, resultMap map[string]interface{}, tbl string, tblKey string, cdb db.DBNum, validate bool) error { var tblList []string - tblXfmr := false if tbl == "" && xYangSpecMap[xpath].xfmrTbl != nil { xfmrTblFunc := *xYangSpecMap[xpath].xfmrTbl if len(xfmrTblFunc) > 0 { - tblXfmr = true inParams := formXfmrInputRequest(dbs[cdb], dbs, cdb, ygRoot, uri, GET, tblKey, dbDataMap, nil) tblList = xfmrTblHandlerFunc(xfmrTblFunc, inParams) if len(tblList) != 0 { @@ -429,8 +427,14 @@ func yangListDataFill(dbs [db.MaxDB]*db.DB, ygRoot *ygot.GoStruct, uri string, x } } } - } else if tbl != "" && !tblXfmr { + } else if tbl != "" && xYangSpecMap[xpath].xfmrTbl == nil { tblList = append(tblList, tbl) + } else if tbl != "" && xYangSpecMap[xpath].xfmrTbl != nil { + /*key instance level GET, table name and table key filled from xpathKeyExtract which internally calls table transformer*/ + inParams := formXfmrInputRequest(dbs[cdb], dbs, cdb, ygRoot, uri, GET, tblKey, dbDataMap, nil) + dbDataFromTblXfmrGet(tbl, inParams, dbDataMap) + tblList = append(tblList, tbl) + } for _, tbl = range(tblList) { diff --git a/src/translib/transformer/xlate_to_db.go b/src/translib/transformer/xlate_to_db.go index 56365f15be..2394b7200a 100644 --- a/src/translib/transformer/xlate_to_db.go +++ b/src/translib/transformer/xlate_to_db.go @@ -636,6 +636,7 @@ func xpathKeyExtract(d *db.DB, ygRoot *ygot.GoStruct, oper int, path string) (st } curPathWithKey += "/" } + curPathWithKey = strings.TrimSuffix(curPathWithKey, "/") tblPtr := xpathInfo.tableName if tblPtr != nil { tableName = *tblPtr diff --git a/src/translib/transformer/xlate_utils.go b/src/translib/transformer/xlate_utils.go index c84ec17349..3f94cfbe15 100644 --- a/src/translib/transformer/xlate_utils.go +++ b/src/translib/transformer/xlate_utils.go @@ -118,6 +118,9 @@ func dbKeyToYangDataConvert(uri string, xpath string, dbKey string, dbKeySep str keyDataList := strings.SplitN(dbKey, dbKeySep, id) uriWithKey := fmt.Sprintf("%v", xpath) uriWithKeyCreate := true + if len(keyDataList) == 0 { + keyDataList = append(keyDataList, dbKey) + } /* if uri contins key, use it else use xpath */ if strings.Contains(uri, "[") { @@ -144,7 +147,7 @@ func dbKeyToYangDataConvert(uri string, xpath string, dbKey string, dbKeySep str return rmap, uriWithKey, nil } - if len(keyDataList) == 0 || len(keyNameList) == 0 { + if len(keyNameList) == 0 { return nil, "", nil } From d7acb5bdefde034aaddf144eb55d7500cc8c5498 Mon Sep 17 00:00:00 2001 From: s-mari Date: Mon, 14 Oct 2019 18:57:11 -0700 Subject: [PATCH 2/3] fixed yang leaf NONE to NULL field-value pair issue in return map. --- src/translib/transformer/xlate_to_db.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/translib/transformer/xlate_to_db.go b/src/translib/transformer/xlate_to_db.go index 2394b7200a..ec9f957273 100644 --- a/src/translib/transformer/xlate_to_db.go +++ b/src/translib/transformer/xlate_to_db.go @@ -60,6 +60,7 @@ func dataToDBMapAdd(tableName string, dbKey string, result map[string]map[string if field == "NONE" { result[tableName][dbKey].Field["NULL"] = "NULL" + return } result[tableName][dbKey].Field[field] = value From 9d25172573dfb05f82721cfd7f22fa0e05fb6b76 Mon Sep 17 00:00:00 2001 From: Ranjini Nagaraj Date: Tue, 15 Oct 2019 15:17:22 -0700 Subject: [PATCH 3/3] retrieve key value for annotated key entry in sonic yang --- src/translib/transformer/xlate_to_db.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/translib/transformer/xlate_to_db.go b/src/translib/transformer/xlate_to_db.go index ec9f957273..e6d2d02c56 100644 --- a/src/translib/transformer/xlate_to_db.go +++ b/src/translib/transformer/xlate_to_db.go @@ -562,14 +562,18 @@ func sonicXpathKeyExtract(path string) (string, string, string) { cdb := db.ConfigDB if !ok { log.Infof("No entry in xDbSpecMap for xpath %v in order to fetch DB index.", tableName) - } else { - cdb = dbInfo.dbIndex + return xpath, keyStr, tableName } + cdb = dbInfo.dbIndex dbOpts := getDBOptions(cdb) - for i, kname := range rgp.FindAllString(path, -1) { - if i > 0 { keyStr += dbOpts.KeySeparator } - val := strings.Split(kname, "=")[1] - keyStr += strings.TrimRight(val, "]") + if dbInfo.keyName != nil { + keyStr = *dbInfo.keyName + } else { + for i, kname := range rgp.FindAllString(path, -1) { + if i > 0 { keyStr += dbOpts.KeySeparator } + val := strings.Split(kname, "=")[1] + keyStr += strings.TrimRight(val, "]") + } } } return xpath, keyStr, tableName