/// <summary> /// Initializes a new instance of the <see cref="FhirDataStore"/> class. /// </summary> /// <param name="documentClient"> /// A function that returns an <see cref="IDocumentClient"/>. /// Note that this is a function so that the lifetime of the instance is not directly controlled by the IoC container. /// </param> /// <param name="cosmosDataStoreConfiguration">The data store configuration</param> /// <param name="cosmosDocumentQueryFactory">The factory used to create the document query.</param> /// <param name="retryExceptionPolicyFactory">The retry exception policy factory.</param> /// <param name="fhirRequestContextAccessor">The fhir request context accessor.</param> /// <param name="namedCosmosCollectionConfigurationAccessor">The IOptions accessor to get a named version.</param> /// <param name="logger">The logger instance.</param> public FhirDataStore( IScoped <IDocumentClient> documentClient, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, FhirCosmosDocumentQueryFactory cosmosDocumentQueryFactory, RetryExceptionPolicyFactory retryExceptionPolicyFactory, IFhirRequestContextAccessor fhirRequestContextAccessor, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, ILogger <FhirDataStore> logger) { EnsureArg.IsNotNull(documentClient, nameof(documentClient)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(cosmosDocumentQueryFactory, nameof(cosmosDocumentQueryFactory)); EnsureArg.IsNotNull(retryExceptionPolicyFactory, nameof(retryExceptionPolicyFactory)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(logger, nameof(logger)); _collectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); _cosmosDocumentQueryFactory = cosmosDocumentQueryFactory; _retryExceptionPolicyFactory = retryExceptionPolicyFactory; _logger = logger; _documentClient = new FhirDocumentClient(documentClient.Value, fhirRequestContextAccessor, cosmosDataStoreConfiguration.ContinuationTokenSizeLimitInKb); _cosmosDataStoreConfiguration = cosmosDataStoreConfiguration; _collectionUri = cosmosDataStoreConfiguration.GetRelativeCollectionUri(_collectionConfiguration.CollectionId); _upsertWithHistoryProc = new UpsertWithHistory(); _hardDelete = new HardDelete(); }
public ControlPlaneDataStore( IScoped<IDocumentClient> documentClient, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, ICosmosDocumentQueryFactory cosmosDocumentQueryFactory, RetryExceptionPolicyFactory retryExceptionPolicyFactory, IOptionsMonitor<CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, ILogger<ControlPlaneDataStore> logger) { EnsureArg.IsNotNull(documentClient, nameof(documentClient)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(cosmosDocumentQueryFactory, nameof(cosmosDocumentQueryFactory)); EnsureArg.IsNotNull(retryExceptionPolicyFactory, nameof(retryExceptionPolicyFactory)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(logger, nameof(logger)); var collectionConfig = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); _documentClient = documentClient; _collectionUri = cosmosDataStoreConfiguration.GetRelativeCollectionUri(collectionConfig.CollectionId); _retryExceptionPolicyFactory = retryExceptionPolicyFactory; _cosmosDocumentQueryFactory = cosmosDocumentQueryFactory; _logger = logger; _hardDeleteIdentityProvider = new HardDeleteIdentityProvider(); _hardDeleteRole = new HardDeleteRole(); }
/// <summary> /// Initializes a new instance of the <see cref="CosmosFhirDataStore"/> class. /// </summary> /// <param name="documentClientScope"> /// A function that returns an <see cref="IDocumentClient"/>. /// Note that this is a function so that the lifetime of the instance is not directly controlled by the IoC container. /// </param> /// <param name="cosmosDataStoreConfiguration">The data store configuration.</param> /// <param name="namedCosmosCollectionConfigurationAccessor">The IOptions accessor to get a named version.</param> /// <param name="cosmosDocumentQueryFactory">The factory used to create the document query.</param> /// <param name="retryExceptionPolicyFactory">The retry exception policy factory.</param> /// <param name="logger">The logger instance.</param> /// <param name="modelInfoProvider">The model provider</param> public CosmosFhirDataStore( IScoped <IDocumentClient> documentClientScope, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, FhirCosmosDocumentQueryFactory cosmosDocumentQueryFactory, RetryExceptionPolicyFactory retryExceptionPolicyFactory, ILogger <CosmosFhirDataStore> logger, IModelInfoProvider modelInfoProvider) { EnsureArg.IsNotNull(documentClientScope, nameof(documentClientScope)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(cosmosDocumentQueryFactory, nameof(cosmosDocumentQueryFactory)); EnsureArg.IsNotNull(retryExceptionPolicyFactory, nameof(retryExceptionPolicyFactory)); EnsureArg.IsNotNull(logger, nameof(logger)); EnsureArg.IsNotNull(modelInfoProvider, nameof(modelInfoProvider)); _documentClientScope = documentClientScope; _cosmosDocumentQueryFactory = cosmosDocumentQueryFactory; _retryExceptionPolicyFactory = retryExceptionPolicyFactory; _logger = logger; _modelInfoProvider = modelInfoProvider; CosmosCollectionConfiguration collectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); DatabaseId = cosmosDataStoreConfiguration.DatabaseId; CollectionId = collectionConfiguration.CollectionId; CollectionUri = cosmosDataStoreConfiguration.GetRelativeCollectionUri(collectionConfiguration.CollectionId); _upsertWithHistoryProc = new UpsertWithHistory(); _hardDelete = new HardDelete(); }
public async Task DisposeAsync() { using (_documentClient as IDisposable) { await _documentClient?.DeleteDocumentCollectionAsync(_cosmosDataStoreConfiguration.GetRelativeCollectionUri(_cosmosCollectionConfiguration.CollectionId)); } }
public async Task GivenACollection_WhenSettingUpCollection_ThenTheCollectionVersionWrapperIsSaved() { var documentCollection = new DocumentCollection(); await UpdateCollectionAsync(documentCollection); await _client.Received(1).UpsertDocumentAsync(Arg.Is(_cosmosDataStoreConfiguration.GetRelativeCollectionUri(_cosmosCollectionConfiguration.CollectionId)), Arg.Is <CollectionVersion>(x => x.Version == _manager.CollectionSettingsVersion)); }
public CollectionInitializer(string collectionId, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, int?initialCollectionThroughput, IUpgradeManager upgradeManager, ILogger <CollectionInitializer> logger) { EnsureArg.IsNotNull(collectionId, nameof(collectionId)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(upgradeManager, nameof(upgradeManager)); EnsureArg.IsNotNull(logger, nameof(logger)); _collectionId = collectionId; _relativeDatabaseUri = cosmosDataStoreConfiguration.RelativeDatabaseUri; _relativeCollectionUri = cosmosDataStoreConfiguration.GetRelativeCollectionUri(collectionId); _initialCollectionThroughput = initialCollectionThroughput; _upgradeManager = upgradeManager; _logger = logger; }
public async Task PerformTest(IDocumentClient documentClient, CosmosDataStoreConfiguration configuration, CosmosCollectionConfiguration cosmosCollectionConfiguration) { var requestOptions = new RequestOptions { ConsistencyLevel = ConsistencyLevel.Session, PartitionKey = _partitionKey }; ResourceResponse <Document> resourceResponse = await documentClient.UpsertDocumentAsync( configuration.GetRelativeCollectionUri(cosmosCollectionConfiguration.CollectionId), _document, requestOptions); requestOptions.SessionToken = resourceResponse.SessionToken; await documentClient.ReadDocumentAsync(resourceResponse.Resource.SelfLink, requestOptions); }
public async Task SetupCollectionAsync(IDocumentClient documentClient, DocumentCollection collection) { EnsureArg.IsNotNull(documentClient, nameof(documentClient)); EnsureArg.IsNotNull(collection, nameof(collection)); using (var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(5))) { using (var distributedLock = _lockFactory.Create(documentClient, _configuration.GetRelativeCollectionUri(_collectionConfiguration.CollectionId), $"UpgradeLock:{CollectionSettingsVersion}")) { _logger.LogDebug("Attempting to acquire upgrade lock"); await distributedLock.AcquireLock(cancellationTokenSource.Token); foreach (var updater in _collectionUpdater) { _logger.LogDebug("Running {CollectionUpdater} on {CollectionUri}", updater.GetType().Name, _configuration.GetAbsoluteCollectionUri(_collectionConfiguration.CollectionId)); await updater.ExecuteAsync(documentClient, collection, _configuration.GetRelativeCollectionUri(_collectionConfiguration.CollectionId)); } await distributedLock.ReleaseLock(); } } }
public CosmosDbStatusRegistry( Func <IScoped <IDocumentClient> > documentClientFactory, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, ICosmosDocumentQueryFactory queryFactory, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor) { EnsureArg.IsNotNull(documentClientFactory, nameof(documentClientFactory)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(queryFactory, nameof(queryFactory)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); _documentClientFactory = documentClientFactory; _queryFactory = queryFactory; CosmosCollectionConfiguration collectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); CollectionUri = cosmosDataStoreConfiguration.GetRelativeCollectionUri(collectionConfiguration.CollectionId); }
public ControlPlaneDataStore( IScoped <IDocumentClient> documentClient, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, ICosmosDocumentQueryFactory cosmosDocumentQueryFactory, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, ILogger <ControlPlaneDataStore> logger) { EnsureArg.IsNotNull(documentClient, nameof(documentClient)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(cosmosDocumentQueryFactory, nameof(cosmosDocumentQueryFactory)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(logger, nameof(logger)); var collectionConfig = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); _documentClient = documentClient; _collectionUri = cosmosDataStoreConfiguration.GetRelativeCollectionUri(collectionConfig.CollectionId); _cosmosDocumentQueryFactory = cosmosDocumentQueryFactory; _logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="CosmosFhirOperationDataStore"/> class. /// </summary> /// <param name="documentClientScope">The factory for <see cref="IDocumentClient"/>.</param> /// <param name="cosmosDataStoreConfiguration">The data store configuration.</param> /// <param name="namedCosmosCollectionConfigurationAccessor">The IOptions accessor to get a named version.</param> /// <param name="retryExceptionPolicyFactory">The retry exception policy factory.</param> /// <param name="logger">The logger.</param> public CosmosFhirOperationDataStore( IScoped <IDocumentClient> documentClientScope, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, RetryExceptionPolicyFactory retryExceptionPolicyFactory, ILogger <CosmosFhirOperationDataStore> logger) { EnsureArg.IsNotNull(documentClientScope, nameof(documentClientScope)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(retryExceptionPolicyFactory, nameof(retryExceptionPolicyFactory)); EnsureArg.IsNotNull(logger, nameof(logger)); _documentClientScope = documentClientScope; _retryExceptionPolicyFactory = retryExceptionPolicyFactory; _logger = logger; CosmosCollectionConfiguration collectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); DatabaseId = cosmosDataStoreConfiguration.DatabaseId; CollectionId = collectionConfiguration.CollectionId; CollectionUri = cosmosDataStoreConfiguration.GetRelativeCollectionUri(collectionConfiguration.CollectionId); }
public void Dispose() { _documentClient?.DeleteDocumentCollectionAsync(_cosmosDataStoreConfiguration.GetRelativeCollectionUri(_cosmosCollectionConfiguration.CollectionId)).GetAwaiter().GetResult(); _documentClient?.Dispose(); }