Пример #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()));
        }
Пример #2
0
        public async Task StartDisks(BobApiClient bobApiClient)
        {
            var disksToStart = configuration.MonitoringEntries;
            var disks        = await disksFinder.FindDisks();

            foreach (var i in disksToStart)
            {
                var inactiveDisks = await bobApiClient.GetInactiveDisks();

                if (inactiveDisks == null)
                {
                    return;
                }
                if (!inactiveDisks.Any(d => d.Name == i.DiskNameInBob))
                {
                    continue;
                }

                var disk   = disks.FirstOrDefault(d => d.Volumes.Any(v => v.MountPath.Equals(i.MountPath) && v.IsMounted));
                var volume = disk?.Volumes.First(v => v.MountPath.Equals(i.MountPath) && v.IsMounted);
                if (disks.Count == 0 ||
                    !disks.Any(d => !d.NoVolumes && d.Volumes.Any(v => v.MountPath.Equals(i.MountPath) && v.IsMounted && !v.IsReadOnly)))
                {
                    continue;
                }

                logger.LogInformation($"Trying to start disk {i}");
                if (!configuration.KnownUuids.Contains(volume.UUID))
                {
                    await disksCopier.CopyDataFromReplica(bobApiClient, i);
                }
                configuration.SaveUUID(await disksMonitor.GetUUID(i));
                logger.LogInformation($"Starting bobdisk {i}...");
                int retry = 0;
                while (!await bobApiClient.StartDisk(i.DiskNameInBob) && retry++ < configuration.StartRetryCount)
                {
                    logger.LogWarning($"Failed to start bobdisk in try {retry}, trying again");
                }
                if (retry == configuration.StartRetryCount)
                {
                    logger.LogError($"Failed to start bobdisk {i}");
                }
                else
                {
                    logger.LogInformation($"Bobdisk {i} started");
                }
            }
        }