/// <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 }); }
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); }