示例#1
0
        /// <summary>
        /// Оптимальная нода для скачивания блока файла
        /// </summary>
        /// <returns></returns>
        private string GetOptimalNodeForDownloadBlock(string fileName, int blockIndex)
        {
            string nodeHostName = null;

            if (Files.TryGetValue(fileName, out NodeFileInfo nodeFileInfo))
            {
                NodeBlockInfo nodeBlockInfo = nodeFileInfo.Nodes.Where(n => n.Indexes.Contains(blockIndex)).OrderBy(n => n.Priority).FirstOrDefault();
                nodeHostName = nodeBlockInfo?.HostName;
            }
            return(nodeHostName);
        }
示例#2
0
        private Dictionary <string, List <Block> > OptimalHosts(List <Block> blocks)
        {
            var optimalHosts = new Dictionary <string, List <Block> >();

            foreach (var block in blocks)
            {
                NodeBlockInfo nodeBlockInfo = Files.Values.SelectMany(f => f.Nodes).OrderBy(x => x.Indexes.Count).ThenBy(x => x.Priority).FirstOrDefault();
                nodeBlockInfo.Indexes.Add(block.Info.Index);
                if (!optimalHosts.TryGetValue(nodeBlockInfo.HostName, out var parts))
                {
                    parts = new List <Block>();
                    optimalHosts.Add(nodeBlockInfo.HostName, parts);
                }
                parts.Add(block);
            }

            return(optimalHosts);
        }