/// <summary> /// save the node id info /// </summary> private async Task <long> SaveNodeIDInfo(NodeTracer info) { NodeIDMapSummaryInfo summaryInfo = null; lock (_nodeIDMapping) { var data = _nodeIDMapping.FirstOrDefault(item => item.OrignalID.Equals(info.NodeID)); if (data != null) { _nodeIDIndexMap[data.AliasName].SaveNewItem(info.TraceID); return(data.AliasName); } summaryInfo = new() { AliasName = LuanNiao.Core.IDGen.GetInstance().NextId(), OrignalID = info.NodeID, OrignalIDLength = Encoding.UTF8.GetBytes(info.NodeID).Length }; _nodeIDMapping.Add(summaryInfo); } lock (_nodeIDMappingHandler) { _nodeIDMappingHandler.Position = _nodeIDMappingHandler.Length; _nodeIDMappingHandler.Write(BitConverter.GetBytes(summaryInfo.AliasName)); _nodeIDMappingHandler.Write(BitConverter.GetBytes(summaryInfo.OrignalIDLength)); _nodeIDMappingHandler.Write(Encoding.UTF8.GetBytes(summaryInfo.OrignalID)); _nodeIDMappingHandler.Flush(); } var indexFile = new FileInfo(Path.Combine(_srouceFolder, Constants.IndexFolder, $"{summaryInfo.AliasName}{Constants.NodeIDIndexFileExtends}")); var indexHandler = new NodeIDIndexHandler(indexFile); await indexHandler.LoadAsync(); _nodeIDIndexMap.Add(summaryInfo.AliasName, indexHandler.SaveNewItem(info.TraceID)); return(summaryInfo.AliasName); }
/// <summary> /// Load node id index file /// </summary> /// <param name="item"></param> /// <returns></returns> private Task NodeIDIndexInit(FileInfo item) { if (!long.TryParse(item.Name.Replace(Constants.NodeIDIndexFileExtends, ""), out var nid)) { return(Task.Run(() => { })); } var nodeIDIndex = new NodeIDIndexHandler(item); _nodeIDIndexMap.Add(nid, nodeIDIndex); return(nodeIDIndex.LoadAsync()); }