package metautil import ( "path" "strconv" "strings" "github.com/milvus-io/milvus/pkg/common" "github.com/milvus-io/milvus/pkg/util/typeutil" ) const pathSep = "/" func BuildInsertLogPath(rootPath string, collectionID, partitionID, segmentID, fieldID, logID typeutil.UniqueID) string { k := JoinIDPath(collectionID, partitionID, segmentID, fieldID, logID) return path.Join(rootPath, common.SegmentInsertLogPath, k) } func ParseInsertLogPath(path string) (collectionID, partitionID, segmentID, fieldID, logID typeutil.UniqueID, ok bool) { infos := strings.Split(path, pathSep) l := len(infos) if l < 6 { ok = false return } var err error if collectionID, err = strconv.ParseInt(infos[l-5], 10, 64); err != nil { return 0, 0, 0, 0, 0, false } if partitionID, err = strconv.ParseInt(infos[l-4], 10, 64); err != nil { return 0, 0, 0, 0, 0, false } if segmentID, err = strconv.ParseInt(infos[l-3], 10, 64); err != nil { return 0, 0, 0, 0, 0, false } if fieldID, err = strconv.ParseInt(infos[l-2], 10, 64); err != nil { return 0, 0, 0, 0, 0, false } if logID, err = strconv.ParseInt(infos[l-1], 10, 64); err != nil { return 0, 0, 0, 0, 0, false } ok = true return } func GetSegmentIDFromInsertLogPath(logPath string) typeutil.UniqueID { return getSegmentIDFromPath(logPath, 3) } func BuildStatsLogPath(rootPath string, collectionID, partitionID, segmentID, fieldID, logID typeutil.UniqueID) string { k := JoinIDPath(collectionID, partitionID, segmentID, fieldID, logID) return path.Join(rootPath, common.SegmentStatslogPath, k) } func GetSegmentIDFromStatsLogPath(logPath string) typeutil.UniqueID { return getSegmentIDFromPath(logPath, 3) } func BuildDeltaLogPath(rootPath string, collectionID, partitionID, segmentID, logID typeutil.UniqueID) string { k := JoinIDPath(collectionID, partitionID, segmentID, logID) return path.Join(rootPath, common.SegmentDeltaLogPath, k) } func GetSegmentIDFromDeltaLogPath(logPath string) typeutil.UniqueID { return getSegmentIDFromPath(logPath, 2) } func getSegmentIDFromPath(logPath string, segmentIndex int) typeutil.UniqueID { infos := strings.Split(logPath, pathSep) l := len(infos) if l < segmentIndex { return 0 } v, err := strconv.ParseInt(infos[l-segmentIndex], 10, 64) if err != nil { return 0 } return v } // JoinIDPath joins ids to path format. func JoinIDPath(ids ...typeutil.UniqueID) string { idStr := make([]string, 0, len(ids)) for _, id := range ids { idStr = append(idStr, strconv.FormatInt(id, 10)) } return path.Join(idStr...) }