/// <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(); }
/// <summary> /// Initializes a new instance of the <see cref="CosmosFhirDataStore"/> class. /// </summary> /// <param name="containerScope"> /// A function that returns an <see cref="Container"/>. /// 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="cosmosQueryFactory">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> /// <param name="coreFeatures">The core feature configuration</param> public CosmosFhirDataStore( IScoped <Container> containerScope, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, ICosmosQueryFactory cosmosQueryFactory, RetryExceptionPolicyFactory retryExceptionPolicyFactory, ILogger <CosmosFhirDataStore> logger, IModelInfoProvider modelInfoProvider, IOptions <CoreFeatureConfiguration> coreFeatures) { EnsureArg.IsNotNull(containerScope, nameof(containerScope)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(cosmosQueryFactory, nameof(cosmosQueryFactory)); EnsureArg.IsNotNull(retryExceptionPolicyFactory, nameof(retryExceptionPolicyFactory)); EnsureArg.IsNotNull(logger, nameof(logger)); EnsureArg.IsNotNull(modelInfoProvider, nameof(modelInfoProvider)); EnsureArg.IsNotNull(coreFeatures, nameof(coreFeatures)); _containerScope = containerScope; _cosmosQueryFactory = cosmosQueryFactory; _retryExceptionPolicyFactory = retryExceptionPolicyFactory; _logger = logger; _modelInfoProvider = modelInfoProvider; _coreFeatures = coreFeatures.Value; CosmosCollectionConfiguration collectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); DatabaseId = cosmosDataStoreConfiguration.DatabaseId; CollectionId = collectionConfiguration.CollectionId; }
/// <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 IntegrationTestCosmosDataStore() { _cosmosDataStoreConfiguration = new CosmosDataStoreConfiguration { Host = Environment.GetEnvironmentVariable("CosmosDb:Host") ?? CosmosDbLocalEmulator.Host, Key = Environment.GetEnvironmentVariable("CosmosDb:Key") ?? CosmosDbLocalEmulator.Key, DatabaseId = Environment.GetEnvironmentVariable("CosmosDb:DatabaseId") ?? "FhirTests", AllowDatabaseCreation = true, PreferredLocations = Environment.GetEnvironmentVariable("CosmosDb:PreferredLocations")?.Split(';', StringSplitOptions.RemoveEmptyEntries), }; _cosmosCollectionConfiguration = new CosmosCollectionConfiguration { CollectionId = Guid.NewGuid().ToString(), }; var fhirStoredProcs = typeof(IFhirStoredProcedure).Assembly .GetTypes() .Where(x => !x.IsAbstract && typeof(IFhirStoredProcedure).IsAssignableFrom(x)) .ToArray() .Select(type => (IFhirStoredProcedure)Activator.CreateInstance(type)); var optionsMonitor = Substitute.For <IOptionsMonitor <CosmosCollectionConfiguration> >(); optionsMonitor.Get(CosmosDb.Constants.CollectionConfigurationName).Returns(_cosmosCollectionConfiguration); var updaters = new IFhirCollectionUpdater[] { new FhirCollectionSettingsUpdater(_cosmosDataStoreConfiguration, optionsMonitor, NullLogger <FhirCollectionSettingsUpdater> .Instance), new FhirStoredProcedureInstaller(fhirStoredProcs), }; var dbLock = new CosmosDbDistributedLockFactory(Substitute.For <Func <IScoped <IDocumentClient> > >(), NullLogger <CosmosDbDistributedLock> .Instance); var upgradeManager = new FhirCollectionUpgradeManager(updaters, _cosmosDataStoreConfiguration, optionsMonitor, dbLock, NullLogger <FhirCollectionUpgradeManager> .Instance); IDocumentClientTestProvider testProvider = new DocumentClientReadWriteTestProvider(); var documentClientInitializer = new DocumentClientInitializer(testProvider, NullLogger <DocumentClientInitializer> .Instance); _documentClient = documentClientInitializer.CreateDocumentClient(_cosmosDataStoreConfiguration); var fhirCollectionInitializer = new CollectionInitializer(_cosmosCollectionConfiguration.CollectionId, _cosmosDataStoreConfiguration, _cosmosCollectionConfiguration.InitialCollectionThroughput, upgradeManager, NullLogger <CollectionInitializer> .Instance); documentClientInitializer.InitializeDataStore(_documentClient, _cosmosDataStoreConfiguration, new List <ICollectionInitializer> { fhirCollectionInitializer }).GetAwaiter().GetResult(); var cosmosDocumentQueryFactory = new FhirCosmosDocumentQueryFactory(Substitute.For <IFhirRequestContextAccessor>(), NullFhirDocumentQueryLogger.Instance); var fhirRequestContextAccessor = new FhirRequestContextAccessor(); _dataStore = new FhirDataStore( new NonDisposingScope(_documentClient), _cosmosDataStoreConfiguration, cosmosDocumentQueryFactory, new RetryExceptionPolicyFactory(_cosmosDataStoreConfiguration), fhirRequestContextAccessor, optionsMonitor, NullLogger <FhirDataStore> .Instance); }
public FhirCollectionSettingsUpdater( CosmosDataStoreConfiguration configuration, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, ILogger <FhirCollectionSettingsUpdater> logger) { EnsureArg.IsNotNull(configuration, nameof(configuration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(logger, nameof(logger)); _configuration = configuration; _collectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); _logger = logger; }
public CosmosDbFhirStorageTestsFixture() { _cosmosDataStoreConfiguration = new CosmosDataStoreConfiguration { Host = Environment.GetEnvironmentVariable("CosmosDb:Host") ?? CosmosDbLocalEmulator.Host, Key = Environment.GetEnvironmentVariable("CosmosDb:Key") ?? CosmosDbLocalEmulator.Key, DatabaseId = Environment.GetEnvironmentVariable("CosmosDb:DatabaseId") ?? "FhirTests", AllowDatabaseCreation = true, PreferredLocations = Environment.GetEnvironmentVariable("CosmosDb:PreferredLocations")?.Split(';', StringSplitOptions.RemoveEmptyEntries), }; _cosmosCollectionConfiguration = new CosmosCollectionConfiguration { CollectionId = Guid.NewGuid().ToString(), }; }
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); }
protected CollectionUpgradeManager( IEnumerable <ICollectionUpdater> collectionUpdater, CosmosDataStoreConfiguration configuration, CosmosCollectionConfiguration cosmosCollectionConfiguration, ICosmosDbDistributedLockFactory lockFactory, ILogger <CollectionUpgradeManager> logger) { EnsureArg.IsNotNull(collectionUpdater, nameof(collectionUpdater)); EnsureArg.IsNotNull(configuration, nameof(configuration)); EnsureArg.IsNotNull(cosmosCollectionConfiguration, nameof(cosmosCollectionConfiguration)); EnsureArg.IsNotNull(lockFactory, nameof(lockFactory)); EnsureArg.IsNotNull(logger, nameof(logger)); _collectionUpdater = collectionUpdater; _configuration = configuration; _collectionConfiguration = cosmosCollectionConfiguration; _lockFactory = lockFactory; _logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="CosmosHealthCheck"/> class. /// </summary> /// <param name="container">The Cosmos Container factory/</param> /// <param name="configuration">The CosmosDB configuration.</param> /// <param name="namedCosmosCollectionConfigurationAccessor">The IOptions accessor to get a named version.</param> /// <param name="testProvider">The test provider</param> /// <param name="logger">The logger.</param> public CosmosHealthCheck( IScoped <Container> container, CosmosDataStoreConfiguration configuration, IOptionsSnapshot <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, ICosmosClientTestProvider testProvider, ILogger <CosmosHealthCheck> logger) { EnsureArg.IsNotNull(container, nameof(container)); EnsureArg.IsNotNull(configuration, nameof(configuration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(testProvider, nameof(testProvider)); EnsureArg.IsNotNull(logger, nameof(logger)); _container = container; _configuration = configuration; _cosmosCollectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); _testProvider = testProvider; _logger = logger; }
public CollectionUpgradeManager( IEnumerable <ICollectionUpdater> collectionUpdater, CosmosDataStoreConfiguration configuration, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, ICosmosDbDistributedLockFactory lockFactory, ILogger <CollectionUpgradeManager> logger) { EnsureArg.IsNotNull(collectionUpdater, nameof(collectionUpdater)); EnsureArg.IsNotNull(configuration, nameof(configuration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(lockFactory, nameof(lockFactory)); EnsureArg.IsNotNull(logger, nameof(logger)); _collectionUpdater = collectionUpdater; _configuration = configuration; _collectionConfiguration = GetCosmosCollectionConfiguration(namedCosmosCollectionConfigurationAccessor, Constants.CollectionConfigurationName); _lockFactory = lockFactory; _logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="CosmosHealthCheck"/> class. /// </summary> /// <param name="documentClient">The document client factory/</param> /// <param name="configuration">The CosmosDB configuration.</param> /// <param name="namedCosmosCollectionConfigurationAccessor">The IOptions accessor to get a named version.</param> /// <param name="collectionConfigurationName"> Name to get corresponding collection configuration</param> /// <param name="testProvider">The test provider</param> /// <param name="logger">The logger.</param> public CosmosHealthCheck( IScoped <IDocumentClient> documentClient, CosmosDataStoreConfiguration configuration, IOptionsSnapshot <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, string collectionConfigurationName, IDocumentClientTestProvider testProvider, ILogger <CosmosHealthCheck> logger) { EnsureArg.IsNotNull(documentClient, nameof(documentClient)); EnsureArg.IsNotNull(configuration, nameof(configuration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNullOrWhiteSpace(collectionConfigurationName, nameof(collectionConfigurationName)); EnsureArg.IsNotNull(testProvider, nameof(testProvider)); EnsureArg.IsNotNull(logger, nameof(logger)); _documentClient = documentClient; _configuration = configuration; _cosmosCollectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(collectionConfigurationName); _testProvider = testProvider; _logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="FhirCosmosHealthCheck"/> class. /// </summary> /// <param name="documentClient">The document client factory/</param> /// <param name="configuration">The CosmosDB configuration.</param> /// <param name="namedCosmosCollectionConfigurationAccessor">The IOptions accessor to get a named version.</param> /// <param name="testProvider">The test provider</param> /// <param name="logger">The logger.</param> public FhirCosmosHealthCheck( IScoped <IDocumentClient> documentClient, CosmosDataStoreConfiguration configuration, IOptionsSnapshot <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, IDocumentClientTestProvider testProvider, ILogger <FhirCosmosHealthCheck> logger) { EnsureArg.IsNotNull(documentClient, nameof(documentClient)); EnsureArg.IsNotNull(configuration, nameof(configuration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(testProvider, nameof(testProvider)); EnsureArg.IsNotNull(logger, nameof(logger)); _documentClient = documentClient; EnsureArg.IsNotNull(_documentClient, optsFn: options => options.WithMessage("Factory returned null.")); _configuration = configuration; _collectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); _testProvider = testProvider; _logger = logger; }
public CollectionInitializer( CosmosCollectionConfiguration cosmosCollectionConfiguration, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, IUpgradeManager upgradeManager, RetryExceptionPolicyFactory retryExceptionPolicyFactory, ICosmosClientTestProvider clientTestProvider, ILogger <CollectionInitializer> logger) { EnsureArg.IsNotNull(cosmosCollectionConfiguration, nameof(cosmosCollectionConfiguration)); EnsureArg.IsNotNull(cosmosCollectionConfiguration.CollectionId, nameof(CosmosCollectionConfiguration.CollectionId)); EnsureArg.IsNotNull(clientTestProvider, nameof(clientTestProvider)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(upgradeManager, nameof(upgradeManager)); EnsureArg.IsNotNull(retryExceptionPolicyFactory, nameof(retryExceptionPolicyFactory)); EnsureArg.IsNotNull(logger, nameof(logger)); _cosmosCollectionConfiguration = cosmosCollectionConfiguration; _cosmosDataStoreConfiguration = cosmosDataStoreConfiguration; _upgradeManager = upgradeManager; _retryExceptionPolicyFactory = retryExceptionPolicyFactory; _clientTestProvider = clientTestProvider; _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); }
/// <summary> /// Initializes a new instance of the <see cref="CosmosFhirOperationDataStore"/> class. /// </summary> /// <param name="containerScope">The factory for <see cref="Container"/>.</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="queryFactory">The Query Factory</param> /// <param name="logger">The logger.</param> public CosmosFhirOperationDataStore( IScoped <Container> containerScope, CosmosDataStoreConfiguration cosmosDataStoreConfiguration, IOptionsMonitor <CosmosCollectionConfiguration> namedCosmosCollectionConfigurationAccessor, RetryExceptionPolicyFactory retryExceptionPolicyFactory, ICosmosQueryFactory queryFactory, ILogger <CosmosFhirOperationDataStore> logger) { EnsureArg.IsNotNull(containerScope, nameof(containerScope)); EnsureArg.IsNotNull(cosmosDataStoreConfiguration, nameof(cosmosDataStoreConfiguration)); EnsureArg.IsNotNull(namedCosmosCollectionConfigurationAccessor, nameof(namedCosmosCollectionConfigurationAccessor)); EnsureArg.IsNotNull(retryExceptionPolicyFactory, nameof(retryExceptionPolicyFactory)); EnsureArg.IsNotNull(logger, nameof(logger)); _containerScope = containerScope; _retryExceptionPolicyFactory = retryExceptionPolicyFactory; _queryFactory = queryFactory; _logger = logger; CosmosCollectionConfiguration collectionConfiguration = namedCosmosCollectionConfigurationAccessor.Get(Constants.CollectionConfigurationName); DatabaseId = cosmosDataStoreConfiguration.DatabaseId; CollectionId = collectionConfiguration.CollectionId; }
/// <inheritdoc /> public async Task OpenCosmosClient(CosmosClient client, CosmosDataStoreConfiguration configuration, CosmosCollectionConfiguration cosmosCollectionConfiguration) { EnsureArg.IsNotNull(client, nameof(client)); EnsureArg.IsNotNull(configuration, nameof(configuration)); _logger.LogInformation("Opening CosmosClient connection to {CollectionId}", cosmosCollectionConfiguration.CollectionId); try { await _retryExceptionPolicyFactory.GetRetryPolicy().ExecuteAsync(async() => await _testProvider.PerformTest(client.GetContainer(configuration.DatabaseId, cosmosCollectionConfiguration.CollectionId), configuration, cosmosCollectionConfiguration)); _logger.LogInformation("Established CosmosClient connection to {CollectionId}", cosmosCollectionConfiguration.CollectionId); } catch (Exception e) { LogLevel logLevel = e is RequestRateExceededException ? LogLevel.Warning : LogLevel.Critical; _logger.Log(logLevel, e, "Failed to connect to CosmosClient collection {CollectionId}", cosmosCollectionConfiguration.CollectionId); throw; } }
/// <inheritdoc /> public async Task OpenDocumentClient(IDocumentClient client, CosmosDataStoreConfiguration configuration, CosmosCollectionConfiguration cosmosCollectionConfiguration) { EnsureArg.IsNotNull(client, nameof(client)); EnsureArg.IsNotNull(configuration, nameof(configuration)); Uri absoluteCollectionUri = configuration.GetAbsoluteCollectionUri(cosmosCollectionConfiguration.CollectionId); _logger.LogInformation("Opening DocumentClient connection to {CollectionUri}", absoluteCollectionUri); try { await _testProvider.PerformTest(client, configuration, cosmosCollectionConfiguration); _logger.LogInformation("Established DocumentClient connection to {CollectionUri}", absoluteCollectionUri); } catch (Exception e) { _logger.LogCritical(e, "Failed to connect to DocumentClient collection {CollectionUri}", absoluteCollectionUri); throw; } }
public async Task PerformTest(Container container, CosmosDataStoreConfiguration configuration, CosmosCollectionConfiguration cosmosCollectionConfiguration) { var requestOptions = new ItemRequestOptions { ConsistencyLevel = ConsistencyLevel.Session }; var resourceResponse = await container.UpsertItemAsync( _document, _partitionKey, requestOptions); requestOptions.SessionToken = resourceResponse.Headers.Session; await container.ReadItemAsync <HealthCheckDocument>(resourceResponse.Resource.Id, _partitionKey, requestOptions); }
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); }
/// <inheritdoc /> public async Task OpenCosmosClient(CosmosClient client, CosmosDataStoreConfiguration configuration, CosmosCollectionConfiguration cosmosCollectionConfiguration) { EnsureArg.IsNotNull(client, nameof(client)); EnsureArg.IsNotNull(configuration, nameof(configuration)); _logger.LogInformation("Opening CosmosClient connection to {CollectionId}", cosmosCollectionConfiguration.CollectionId); try { await _testProvider.PerformTest(client.GetContainer(configuration.DatabaseId, cosmosCollectionConfiguration.CollectionId), configuration, cosmosCollectionConfiguration); _logger.LogInformation("Established CosmosClient connection to {CollectionId}", cosmosCollectionConfiguration.CollectionId); } catch (Exception e) { _logger.LogCritical(e, "Failed to connect to CosmosClient collection {CollectionId}", cosmosCollectionConfiguration.CollectionId); throw; } }