コード例 #1
0
 /// <summary>
 /// Given a list of volume containers to be failed over from a source device,
 /// this method returns the eligibility result, as a failover target, for all
 /// devices under that resource.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='sourceDeviceName'>
 /// The source device name on which failover is performed.
 /// </param>
 /// <param name='parameters'>
 /// ListFailoverTargetsRequest containing the list of volume containers to be
 /// failed over.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The resource group name
 /// </param>
 /// <param name='managerName'>
 /// The manager name
 /// </param>
 public static IEnumerable <FailoverTarget> ListFailoverTargets(this IDevicesOperations operations, string sourceDeviceName, ListFailoverTargetsRequest parameters, string resourceGroupName, string managerName)
 {
     return(operations.ListFailoverTargetsAsync(sourceDeviceName, parameters, resourceGroupName, managerName).GetAwaiter().GetResult());
 }
コード例 #2
0
 /// <summary>
 /// Given a list of volume containers to be failed over from a source device,
 /// this method returns the eligibility result, as a failover target, for all
 /// devices under that resource.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='sourceDeviceName'>
 /// The source device name on which failover is performed.
 /// </param>
 /// <param name='parameters'>
 /// ListFailoverTargetsRequest containing the list of volume containers to be
 /// failed over.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The resource group name
 /// </param>
 /// <param name='managerName'>
 /// The manager name
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <IEnumerable <FailoverTarget> > ListFailoverTargetsAsync(this IDevicesOperations operations, string sourceDeviceName, ListFailoverTargetsRequest parameters, string resourceGroupName, string managerName, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.ListFailoverTargetsWithHttpMessagesAsync(sourceDeviceName, parameters, resourceGroupName, managerName, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
コード例 #3
0
        /// <summary>
        /// Helper method to trigger failover
        /// </summary>
        private void Failover(string sourceDeviceName, string targetDeviceName, string targetDeviceId)
        {
            //validate source and target device are not same
            Assert.False(sourceDeviceName.Equals(
                             targetDeviceName,
                             StringComparison.CurrentCultureIgnoreCase));

            // Get failover sets from source device
            var failoverSets = this.Client.Devices.ListFailoverSets(
                sourceDeviceName,
                this.ResourceGroupName,
                this.ManagerName);

            Assert.NotNull(failoverSets);
            Assert.NotEmpty(failoverSets);

            var volumeContainerIds = failoverSets.First().VolumeContainers.Select(vc => vc.VolumeContainerId).ToList();

            Assert.NotNull(volumeContainerIds);

            // Get failover targets
            ListFailoverTargetsRequest failoverTargetsRequest = new ListFailoverTargetsRequest()
            {
                VolumeContainers = volumeContainerIds
            };

            var failoverTargets = this.Client.Devices.ListFailoverTargets(
                sourceDeviceName,
                failoverTargetsRequest,
                this.ResourceGroupName,
                this.ManagerName);

            Assert.NotNull(failoverTargets);
            Assert.NotEmpty(failoverTargets);

            //validate that target device is eligible
            var targetDeviceIsValid = failoverTargets.FirstOrDefault(t => t.DeviceId.Equals(targetDeviceId) && t.EligibilityResult.EligibilityStatus.Equals(TargetEligibilityStatus.Eligible));

            Assert.NotNull(targetDeviceIsValid);

            // Create a failover request
            FailoverRequest failoverRequest = new FailoverRequest()
            {
                TargetDeviceId   = targetDeviceId,
                VolumeContainers = volumeContainerIds
            };

            var jobStartTime = new DateTime(2017, 06, 21);

            // Trigger failover
            this.Client.Devices.Failover(
                sourceDeviceName.GetDoubleEncoded(),
                failoverRequest,
                this.ResourceGroupName,
                this.ManagerName);

            //validate
            var allFailoverJobs = GetSpecificJobsTypeByManager(this.ManagerName, JobType.FailoverVolumeContainers);

            var failoverJob = allFailoverJobs.FirstOrDefault(
                j => j.StartTime > jobStartTime &&
                j.EntityLabel.Equals(sourceDeviceName, StringComparison.CurrentCultureIgnoreCase));

            Assert.True(failoverJob != null && failoverJob.Status.Equals(JobStatus.Succeeded), "Failover was not successful.");
        }