internal override async Task <HttpResponseMessage> RunAsync(TimeSpan timeout, CancellationToken cancellationToken)
        {
            this.ThrowInvalidArgumentIfNull(this.backupPolicy);
            RetentionManager retentionManager = await RetentionManager.CreateOrGetRetentionManager(this.StatefulService);

            try
            {
                using (var transaction = this.StatefulService.StateManager.CreateTransaction())
                {
                    await
                    this.BackupPolicyStore.AddAsync(this.backupPolicy.Name,
                                                    BackupPolicyModel.FromBackupPolicyView(this.backupPolicy)
                                                    , timeout, cancellationToken, transaction);

                    await retentionManager.CreatePolicyAsync(BackupPolicyModel.FromBackupPolicyView(this.backupPolicy), timeout, cancellationToken, transaction);

                    await transaction.CommitAsync();
                }
            }
            catch (FabricBackupRestoreKeyAlreadyExisingException)
            {
                throw new FabricException(StringResources.BackupPolicyAlreayExists, FabricErrorCode.BackupPolicyAlreayExists);
            }
            FabricEvents.Events.BackupPolicyDetails(this.backupPolicy.Name, this.backupPolicy.MaxIncrementalBackups,
                                                    this.backupPolicy.AutoRestoreOnDataLoss == true ? 1 : 0,
                                                    this.backupPolicy.Schedule.ScheduleKind == Enums.BackupScheduleType.TimeBased ? 1 : 0,
                                                    this.backupPolicy.Schedule.ScheduleKind == Enums.BackupScheduleType.FrequencyBased ? 1 : 0,
                                                    this.backupPolicy.Storage.StorageKind == Enums.BackupStorageType.AzureBlobStore ? 1 : 0,
                                                    this.backupPolicy.Storage.StorageKind == Enums.BackupStorageType.FileShare ? 1 : 0);

            return(new HttpResponseMessage(HttpStatusCode.Created));
        }
        internal override async Task <PagedBackupEntityList> RunAsync(TimeSpan timeout, CancellationToken cancellationToken)
        {
            this.ThrowInvalidArgumentIfNull(this.backupPolicyName);
            BackupPolicyModel backupPolicyModel = await this.BackupPolicyStore.GetValueAsync(this.backupPolicyName, timeout, cancellationToken);

            if (backupPolicyModel == null)
            {
                throw new FabricException(StringResources.BackupPolicyDoesNotExist, FabricErrorCode.BackupPolicyDoesNotExist);
            }
            List <BackupEntity> backupEntities = new List <BackupEntity>();

            List <string> orderedBackupUriList = backupPolicyModel.BackupEnabledSet.ToList();

            orderedBackupUriList.Sort();

            List <string> filteredOrderedBackupUriList = orderedBackupUriList.Where(key => key.CompareTo(continuationToken) > 0).ToList();
            string        continuationTokenToSend      = null;
            long          counter = 0;

            foreach (var backupedUri in filteredOrderedBackupUriList)
            {
                backupEntities.Add(BackupEntity.GetBackupEntityFromFabricKey(backupedUri));
                counter++;
                if (maxResults != 0 && counter == maxResults)
                {
                    if (counter < filteredOrderedBackupUriList.Count)
                    {
                        continuationTokenToSend = backupedUri;
                    }
                    break;
                }
            }

            return(new PagedBackupEntityList()
            {
                Items = backupEntities,
                ContinuationToken = continuationTokenToSend
            });
        }