/// <summary>
        /// Gets the object from Json properties.
        /// </summary>
        /// <param name="reader">The <see cref="T: Newtonsoft.Json.JsonReader" /> to read from.</param>
        /// <returns>The object Value.</returns>
        internal static BackupEntity GetFromJsonProperties(JsonReader reader)
        {
            BackupEntity obj      = null;
            var          propName = reader.ReadPropertyName();

            if (!propName.Equals("EntityKind", StringComparison.OrdinalIgnoreCase))
            {
                throw new JsonReaderException($"Incorrect discriminator property name {propName}, Expected discriminator property name is EntityKind.");
            }

            var propValue = reader.ReadValueAsString();

            if (propValue.Equals("Application", StringComparison.OrdinalIgnoreCase))
            {
                obj = ApplicationBackupEntityConverter.GetFromJsonProperties(reader);
            }
            else if (propValue.Equals("Service", StringComparison.OrdinalIgnoreCase))
            {
                obj = ServiceBackupEntityConverter.GetFromJsonProperties(reader);
            }
            else if (propValue.Equals("Partition", StringComparison.OrdinalIgnoreCase))
            {
                obj = PartitionBackupEntityConverter.GetFromJsonProperties(reader);
            }
            else
            {
                throw new InvalidOperationException("Unknown EntityKind.");
            }

            return(obj);
        }
        /// <summary>
        /// Serializes the object to JSON.
        /// </summary>
        /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param>
        /// <param name="obj">The object to serialize to JSON.</param>
        internal static void Serialize(JsonWriter writer, BackupEntity obj)
        {
            var kind = obj.EntityKind;

            if (kind.Equals(BackupEntityKind.Application))
            {
                ApplicationBackupEntityConverter.Serialize(writer, (ApplicationBackupEntity)obj);
            }
            else if (kind.Equals(BackupEntityKind.Service))
            {
                ServiceBackupEntityConverter.Serialize(writer, (ServiceBackupEntity)obj);
            }
            else if (kind.Equals(BackupEntityKind.Partition))
            {
                PartitionBackupEntityConverter.Serialize(writer, (PartitionBackupEntity)obj);
            }
            else
            {
                throw new InvalidOperationException("Unknown EntityKind.");
            }
        }
        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
            });
        }
Esempio n. 4
0
        protected internal void PopulateApplicationServiceAndPartitionWithBackupEntity(BackupEntity backupEntity, TimeSpan timeout, CancellationToken cancellationToken)
        {
            switch (backupEntity.EntityKind)
            {
            case BackupEntityKind.Application:
                ApplicationBackupEntity applicationBackupEntity = (ApplicationBackupEntity)backupEntity;
                this.FabricUri = applicationBackupEntity.ApplicationName;
                break;

            case BackupEntityKind.Service:
                ServiceBackupEntity serviceBackupEntity = (ServiceBackupEntity)backupEntity;
                this.FabricUri = serviceBackupEntity.ServiceName;
                break;

            case BackupEntityKind.Partition:
                PartitionBackupEntity partitionBackupEntity = (PartitionBackupEntity)backupEntity;
                this.FabricUri = string.Format("{0}/{1}", partitionBackupEntity.ServiceName,
                                               partitionBackupEntity.PartitionId);
                break;
            }
            this.FabricBackupResourceType = UtilityHelper.GetApplicationAndServicePartitionName(this.FabricUri, out this.ApplicationName,
                                                                                                out this.ServiceName, out this.PartitionId);
        }
        /// <inheritdoc/>
        protected override void ProcessRecordInternal()
        {
            BackupStorageDescription backupStorageDescription = null;

            if (this.AzureBlobStore.IsPresent)
            {
                backupStorageDescription = new AzureBlobBackupStorageDescription(
                    connectionString: this.ConnectionString,
                    containerName: this.ContainerName,
                    friendlyName: this.FriendlyName);
            }
            else if (this.FileShare.IsPresent)
            {
                backupStorageDescription = new FileShareBackupStorageDescription(
                    path: this.Path,
                    friendlyName: this.FriendlyName,
                    primaryUserName: this.PrimaryUserName,
                    primaryPassword: this.PrimaryPassword,
                    secondaryUserName: this.SecondaryUserName,
                    secondaryPassword: this.SecondaryPassword);
            }
            else if (this.DsmsAzureBlobStore.IsPresent)
            {
                backupStorageDescription = new DsmsAzureBlobBackupStorageDescription(
                    storageCredentialsSourceLocation: this.StorageCredentialsSourceLocation,
                    containerName: this.ContainerName,
                    friendlyName: this.FriendlyName);
            }

            BackupEntity backupEntity = null;

            if (this.Application.IsPresent)
            {
                backupEntity = new ApplicationBackupEntity(
                    applicationName: this.ApplicationName);
            }
            else if (this.Service.IsPresent)
            {
                backupEntity = new ServiceBackupEntity(
                    serviceName: this.ServiceName);
            }
            else if (this.Partition.IsPresent)
            {
                backupEntity = new PartitionBackupEntity(
                    serviceName: this.ServiceName,
                    partitionId: this.PartitionId);
            }

            var getBackupByStorageQueryDescription = new GetBackupByStorageQueryDescription(
                storage: backupStorageDescription,
                backupEntity: backupEntity,
                startDateTimeFilter: this.StartDateTimeFilter,
                endDateTimeFilter: this.EndDateTimeFilter,
                latest: this.Latest);

            var continuationToken = default(ContinuationToken);

            do
            {
                var result = this.ServiceFabricClient.BackupRestore.GetBackupsFromBackupLocationAsync(
                    getBackupByStorageQueryDescription: getBackupByStorageQueryDescription,
                    serverTimeout: this.ServerTimeout,
                    continuationToken: continuationToken,
                    maxResults: this.MaxResults,
                    cancellationToken: this.CancellationToken).GetAwaiter().GetResult();

                if (result == null)
                {
                    break;
                }

                var count = 0;
                foreach (var item in result.Data)
                {
                    count++;
                    this.WriteObject(this.FormatOutput(item));
                }

                continuationToken = result.ContinuationToken;
                this.WriteDebug(string.Format(Resource.MsgCountAndContinuationToken, count, continuationToken));
            }while (continuationToken.Next);
        }