/// <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);
        }
Exemple #2
0
        /// <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());
        }