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())); }
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))); }
public async Task <bool> Copy(NodeWithDirs src, NodeWithDirs dest, string srcPath, string destPath) { return(await rsyncWrapper.Copy(src.ConnectionInfo, dest.ConnectionInfo, srcPath, destPath)); }
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); }
public RestartInfo(NodeWithDirs node, VDiskDir vDisk) { Node = node; VDisk = vDisk; }
private VDiskDir GetTargetVDisk(VDiskDir vDisk, NodeWithDirs targetNode) { return(targetNode.DiskDirs .SelectMany(d => d.Bob.VDisks.Where(vd => vd.Id == vDisk.Id)).FirstOrDefault()); }