Example #1
0
        private async Task <List <RestartInfo?> > CopyAliensFromNode(NodeWithDirs node, List <NodeWithDirs> nodes, Configuration config)
        {
            var result = new List <RestartInfo?>();

            var client = new BobApiClient(node.Uri);
            var disks  = await client.GetDisksToMonitor();

            var alienDisk = disks.FirstOrDefault(d => d.Path == node.AlienDir.Path).Name;

            if (alienDisk == null)
            {
                return(result);
            }

            await client.StopDisk(alienDisk);

            await client.StartDisk(alienDisk);

            var tasks = new List <Task <RestartInfo?[]> >();

            foreach (var alienNode in node.AlienDir.Nodes)
            {
                tasks.Add(CopyAlien(alienNode, nodes, config));
            }
            return(await Task.WhenAll(tasks).ContinueWith(t => t.Result.SelectMany(_ => _).ToList()));
        }
Example #2
0
        public async Task <bool> Copy(NodeWithDirs src, NodeWithDirs dest, int vdiskId)
        {
            var srcDisk = src.DiskDirs.Find(d => d.Bob.VDisks.Any(vd => vd.Id == vdiskId));

            if (srcDisk == null)
            {
                logger.LogError($"VDisk {vdiskId} not found on source node {src.Uri} ({string.Join(", ", src.DiskDirs)})");
                return(false);
            }

            var destDisk = dest.DiskDirs.Find(d => d.Bob.VDisks.Any(vd => vd.Id == vdiskId));

            if (destDisk == null)
            {
                logger.LogError($"Disk {vdiskId} not found on dest node {dest.Uri} ({string.Join(", ", dest.DiskDirs)})");
                return(false);
            }

            return(await rsyncWrapper.Copy(srcDisk.Bob.VDisks.Single(vd => vd.Id == vdiskId), destDisk.Bob.VDisks.Single(vd => vd.Id == vdiskId)));
        }
Example #3
0
 public async Task <bool> Copy(NodeWithDirs src, NodeWithDirs dest, string srcPath, string destPath)
 {
     return(await rsyncWrapper.Copy(src.ConnectionInfo, dest.ConnectionInfo, srcPath, destPath));
 }
Example #4
0
        private async Task <RestartInfo?> CopyAlienFromVDisk(VDiskDir vDisk, Configuration config, NodeWithDirs targetNode)
        {
            var targetVDisk = GetTargetVDisk(vDisk, targetNode);

            if (targetVDisk == null)
            {
                logger.LogError($"VDisk {vDisk.Id} not found on target {targetNode.Name}");
                return(null);
            }
            logger.LogInformation($"Checking copy from {vDisk} to {targetVDisk}");
            logger.LogInformation($"Found not copied partition on {vDisk}");
            if (config.CopyAliens)
            {
                if (!await rsyncWrapper.Copy(vDisk, targetVDisk))
                {
                    logger.LogError($"Error copying {vDisk} to {targetVDisk}");
                }
                else
                {
                    logger.LogInformation($"Successfully copied partitions from {vDisk}");
                    if (config.RestartAfterCopy)
                    {
                        return(new RestartInfo(targetNode, vDisk));
                    }
                }
            }
            return(null);
        }
Example #5
0
 public RestartInfo(NodeWithDirs node, VDiskDir vDisk)
 {
     Node  = node;
     VDisk = vDisk;
 }
Example #6
0
 private VDiskDir GetTargetVDisk(VDiskDir vDisk, NodeWithDirs targetNode)
 {
     return(targetNode.DiskDirs
            .SelectMany(d => d.Bob.VDisks.Where(vd => vd.Id == vDisk.Id)).FirstOrDefault());
 }