Example #1
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 #2
0
 private bool ContainsNonCopiedPartition(VDiskDir vDisk, VDiskDir targetVDisk)
 {
     if (targetVDisk?.Partitions != null && vDisk?.Partitions != null)
     {
         return(vDisk.Partitions.Any(partition => targetVDisk.Partitions.All(p => p.Name != partition.Name)));
     }
     return(false);
 }
Example #3
0
        private async Task RemoveCopiedData(VDiskDir vDisk)
        {
            var filesInDir = await rsyncWrapper.FindFilesWithUniqueIdRelative(vDisk);

            var syncedFiles = await rsyncWrapper.FindSyncedFiles(vDisk);

            foreach (var file in filesInDir)
            {
                logger.LogInformation($"In dir: {file}");
            }
            foreach (var file in syncedFiles)
            {
                logger.LogInformation($"Synced: {file}");
            }

            var filesToRemove = new List <string>();

            foreach (var syncedFile in syncedFiles)
            {
                var pathIndex = syncedFile.IndexOf(RsyncWrapper.PathStart) + RsyncWrapper.PathStart.Length;
                if (pathIndex < syncedFile.Length)
                {
                    var filename = syncedFile.Substring(pathIndex).Trim();
                    if (filesInDir.Contains(syncedFile))
                    {
                        logger.LogInformation($"File {filename} is marked for removal");
                        filesToRemove.Add(filename);
                    }
                }
                else
                {
                    logger.LogWarning($"Received strange file string: {syncedFile}");
                }
            }

            if (filesToRemove.Count > 0)
            {
                logger.LogInformation($"Removing files {string.Join(", ", filesToRemove)}");
                if (!await rsyncWrapper.RemoveFiles(
                        vDisk,
                        filesToRemove.Select(f => Path.Combine(vDisk.Path, f.Trim('/')))))
                {
                    logger.LogError($"Failed to remove files");
                }
            }
        }
Example #4
0
 public RestartInfo(NodeWithDirs node, VDiskDir vDisk)
 {
     Node  = node;
     VDisk = vDisk;
 }
Example #5
0
 private VDiskDir GetTargetVDisk(VDiskDir vDisk, NodeWithDirs targetNode)
 {
     return(targetNode.DiskDirs
            .SelectMany(d => d.Bob.VDisks.Where(vd => vd.Id == vDisk.Id)).FirstOrDefault());
 }