private BackupStoreInformation GetBackupStoreInformationFromBackupStorage(BackupStorage backupStorage) { BackupStoreInformation storeInformation; switch (backupStorage.BackupStorageType) { case BackupStorageType.AzureBlobStore: var azureStorage = (AzureBlobBackupStorageInfo)backupStorage; storeInformation = new AzureBlobBackupStore { ConnectionString = azureStorage.ConnectionString, ContainerName = azureStorage.ContainerName, FolderPath = UtilityHelper.GetBaseDirectoryPathForPartition(this.ServiceUri, this.PartitionId), // TODO: This should be constructed IsAccountKeyEncrypted = azureStorage.IsConnectionStringEncrypted, }; break; case BackupStorageType.DsmsAzureBlobStore: var dsmsAzureStorage = (DsmsAzureBlobBackupStorageInfo)backupStorage; storeInformation = new DsmsAzureBlobBackupStore { StorageCredentialsSourceLocation = dsmsAzureStorage.StorageCredentialsSourceLocation, ContainerName = dsmsAzureStorage.ContainerName, FolderPath = UtilityHelper.GetBaseDirectoryPathForPartition(this.ServiceUri, this.PartitionId), }; break; case BackupStorageType.FileShare: var fileShareStorage = (FileShareBackupStorageInfo)backupStorage; storeInformation = new FileShareBackupStore { AccessType = String.IsNullOrEmpty(fileShareStorage.PrimaryUserName) ? FileShareAccessType.None : FileShareAccessType.DomainUser, FileSharePath = Path.Combine(fileShareStorage.Path, UtilityHelper.GetBaseDirectoryPathForPartition(this.ServiceUri, this.PartitionId)), PrimaryUserName = fileShareStorage.PrimaryUserName, PrimaryPassword = fileShareStorage.PrimaryPassword, SecondaryUserName = fileShareStorage.SecondaryUserName, SecondaryPassword = fileShareStorage.SecondaryPassword, IsPasswordEncrypted = fileShareStorage.IsPasswordEncrypted, }; break; default: throw new ArgumentException(string.Format("{0} not supported.", backupStorage.BackupStorageType)); } return(storeInformation); }
/// <summary> /// Main method. /// </summary> /// <param name="args"></param> /// <returns></returns> public static int Main(string[] args) { AzureBlobBackupStore azBlobBackupStore = new AzureBlobBackupStore(); azBlobBackupStore.ConnectionString = "<To Be Populated>"; azBlobBackupStore.ContainerName = "test"; azBlobBackupStore.FolderPath = "TestFolder/pqr"; azBlobBackupStore.IsAccountKeyEncrypted = false; IBackupStoreManager storeManager = BackupStoreManagerFactory.GetStoreManager(azBlobBackupStore); //AzureBlobBackupStoreManager storeManager = new AzureBlobBackupStoreManager(azBlobBackupStore); storeManager.Upload(@"D:\SfDev\BkpRestore\1e32b319-fe90-4bce-b8de-eda0bb1fb726", "1e32b319-fe90-4bce-b8de-eda0bb1fb726"); storeManager.Upload(@"D:\SfDev\BkpRestore\1e32b319-fe90-4bce-b8de-eda0bb1fb726\2017-06-27 16.12.39.bkmetadata", "1e32b319-fe90-4bce-b8de-eda0bb1fb726-1", true); storeManager.Download("1e32b319-fe90-4bce-b8de-eda0bb1fb726", @"H:\1e32b319-fe90-4bce-b8de-eda0bb1fb726"); storeManager.Download("1e32b319-fe90-4bce-b8de-eda0bb1fb726/2017-06-27 16.12.39.bkmetadata", @"H:\1e32b319-fe90-4bce-b8de-eda0bb1fb726-1", true); return(0); }
private static IBackupStoreManager ConstuctAzureBlobBackupStoreManager(Dictionary <string, string> commandArgs) { AzureBlobBackupStore azureBlobBackupStore = new AzureBlobBackupStore(); azureBlobBackupStore.ConnectionString = commandArgs[StringConstants.ConnectionStringKeyName]; azureBlobBackupStore.ContainerName = commandArgs[StringConstants.ContainerNameKeyName]; azureBlobBackupStore.FolderPath = commandArgs[StringConstants.BackupStoreBaseFolderPathKeyName]; azureBlobBackupStore.IsAccountKeyEncrypted = string.Compare(commandArgs[StringConstants.IsConnectionStringEncryptedKeyName], "true", true) == 0 ? true : false; if (string.Compare(commandArgs[StringConstants.IsConnectionStringEncryptedKeyName], StringConstants.BooleanStringValue_True, true) == 0) { azureBlobBackupStore.IsAccountKeyEncrypted = true; } else if (string.Compare(commandArgs[StringConstants.IsConnectionStringEncryptedKeyName], StringConstants.BooleanStringValue_False, true) == 0) { azureBlobBackupStore.IsAccountKeyEncrypted = false; } else { throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Argument {0} with value {1} is not supported", StringConstants.IsConnectionStringEncryptedKeyName, commandArgs[StringConstants.IsConnectionStringEncryptedKeyName])); } return(new AzureBlobBackupStoreManager(azureBlobBackupStore)); }
public async Task <RestorePointDetails> GetRestorePointDetailsAsync(BackupPartitionInfo backupPartitionInfo, TimeSpan timeout, CancellationToken cancellationToken) { BackupRestoreTrace.TraceSource.WriteInfo(TraceType, "GetRestorePointDetailsAsync invoked for partition {0}", backupPartitionInfo.PartitionId); var restoreStore = await RestoreStore.CreateOrGetRestoreStatusStore(this.statefulService); var backupMappingStore = await BackupMappingStore.CreateOrGetBackupMappingStore(this.statefulService); var backupPolicyStore = await BackupPolicyStore.CreateOrGetBackupPolicyStore(this.statefulService); bool userInitiatedOperation; BackupStorage backupStorage; BackupStoreInformation backupStoreInformation = null; List <string> backupLocations; string brsServiceUri = await UtilityHelper.GetCustomServiceUri(backupPartitionInfo.ServiceName, timeout, cancellationToken); var fabricUri = UtilityHelper.GetBackupMappingKey(brsServiceUri, backupPartitionInfo.PartitionId.ToString()); var restoreStatus = await restoreStore.GetValueAsync(fabricUri); if (restoreStatus != null && ( restoreStatus.RestoreStatusState != RestoreState.Failure || restoreStatus.RestoreStatusState != RestoreState.Invalid || restoreStatus.RestoreStatusState != RestoreState.Success || restoreStatus.RestoreStatusState != RestoreState.Timeout)) { backupStorage = restoreStatus.BackupStorage; userInitiatedOperation = true; backupLocations = restoreStatus.BackupLocations.ToList(); } else { var backupMappingKey = UtilityHelper.GetBackupMappingKey(brsServiceUri, backupPartitionInfo.PartitionId.ToString()); var backupMappingModel = (await backupMappingStore.GetValueAsync(backupMappingKey) ?? await backupMappingStore.GetValueAsync(brsServiceUri)) ?? await backupMappingStore.GetValueAsync(UtilityHelper.GetApplicationNameFromService(brsServiceUri)); if (backupMappingModel == null) { throw new FabricPeriodicBackupNotEnabledException(); } var backupPolicy = await backupPolicyStore.GetValueAsync(backupMappingModel.BackupPolicyName); if (backupPolicy != null && backupPolicy.AutoRestore) { backupStorage = backupPolicy.Storage; userInitiatedOperation = false; string applicationName, serviceName; UtilityHelper.GetApplicationAndServiceNameFromServiceUri(brsServiceUri, out applicationName, out serviceName); // Get the latest backup now var backups = await backupStorage.GetBackupEnumerationsTask( applicationName, serviceName, backupPartitionInfo.PartitionId.ToString(), DateTime.MinValue, DateTime.MaxValue, true, cancellationToken); if (backups == null || backups.Count == 0) { throw new ArgumentException(); // TODO: Change this with appropriate exception } var backupDetail = backups.First(); var recoveryPointManager = RecoveryPointManagerFactory.GetRecoveryPointManager(backupStorage); backupLocations = await recoveryPointManager.GetBackupLocationsInBackupChainAsync(backupDetail.BackupLocation, cancellationToken); } else { throw new ArgumentException(); // TODO: Change with the OTher exception } } switch (backupStorage.BackupStorageType) { case BackupStorageType.FileShare: var fileShareStorage = (FileShareStorage)backupStorage; backupStoreInformation = new FileShareBackupStore { AccessType = String.IsNullOrEmpty(fileShareStorage.PrimaryUserName) ? FileShareAccessType.None : FileShareAccessType.DomainUser, FileSharePath = fileShareStorage.Path, PrimaryUserName = fileShareStorage.PrimaryUserName, PrimaryPassword = fileShareStorage.PrimaryPassword, SecondaryUserName = fileShareStorage.SecondaryUserName, SecondaryPassword = fileShareStorage.SecondaryPassword, IsPasswordEncrypted = fileShareStorage.IsPasswordEncrypted, }; break; case BackupStorageType.AzureBlobStore: var azureStorage = (AzureStorage)backupStorage; backupStoreInformation = new AzureBlobBackupStore { ConnectionString = azureStorage.ConnectionString, ContainerName = azureStorage.ContainerName, FolderPath = String.Empty, // TODO: This should be constructed IsAccountKeyEncrypted = azureStorage.IsConnectionStringEncrypted, }; break; case BackupStorageType.DsmsAzureBlobStore: var dsmsAzureStorage = (DsmsAzureStorage)backupStorage; backupStoreInformation = new DsmsAzureBlobBackupStore { StorageCredentialsSourceLocation = dsmsAzureStorage.StorageCredentialsSourceLocation, ContainerName = dsmsAzureStorage.ContainerName, FolderPath = String.Empty, // TODO: This should be constructed }; break; } Guid restoreOperationId = Guid.NewGuid(); if (userInitiatedOperation) { await UtilityHelper.InvokeWithRetry(async() => { using (ITransaction transaction = this.statefulService.StateManager.CreateTransaction()) { var currentRestoreStatus = await restoreStore.GetValueWithUpdateLockModeAsync(fabricUri, timeout, cancellationToken, transaction); restoreOperationId = currentRestoreStatus.RestoreRequestGuid; if (currentRestoreStatus.RestoreStatusState == RestoreState.Accepted) //TODO Check for Guid { var toUpdateRestoreStatus = currentRestoreStatus.ToBuilder().WithState(RestoreState.RestoreInProgress).Build(); await restoreStore.UpdateValueAsync(fabricUri, toUpdateRestoreStatus, timeout, cancellationToken, transaction); await transaction.CommitAsync(); } else { transaction.Abort(); } } }); } var restorePartitionDetails = new RestorePointDetails() { BackupLocations = backupLocations, UserInitiatedOperation = userInitiatedOperation, StoreInformation = backupStoreInformation, OperationId = restoreOperationId }; BackupRestoreTrace.TraceSource.WriteInfo(TraceType, "GetRestorePointDetailsAsync invoked for partition {0} with Return Values {1}", backupPartitionInfo.PartitionId, restorePartitionDetails); return(restorePartitionDetails); }
public AzureBlobBackupStoreManager(AzureBlobBackupStore azureBlobBackupStore) : base(TraceType) { this.azureBlobBackupStore = azureBlobBackupStore; }