internal void Init( CosmosClientOptions clientOptions, DocumentClient documentClient) { this.ClientOptions = clientOptions; this.DocumentClient = documentClient; //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.DocumentClient.ResetSessionTokenRetryPolicy, this.ClientOptions.CustomHandlers); // DocumentClient is not initialized with any consistency overrides so default is backend consistency this.AccountConsistencyLevel = (ConsistencyLevel)this.DocumentClient.ConsistencyLevel; this.RequestHandler = clientPipelineBuilder.Build(); this.ResponseFactory = new CosmosResponseFactory( defaultJsonSerializer: this.ClientOptions.PropertiesSerializer, userJsonSerializer: this.ClientOptions.CosmosSerializerWithWrapperOrDefault); this.ClientContext = new ClientContextCore( client: this, clientOptions: this.ClientOptions, userJsonSerializer: this.ClientOptions.CosmosSerializerWithWrapperOrDefault, defaultJsonSerializer: this.ClientOptions.PropertiesSerializer, cosmosResponseFactory: this.ResponseFactory, requestHandler: this.RequestHandler, documentClient: this.DocumentClient, documentQueryClient: new DocumentQueryClient(this.DocumentClient)); this.offerSet = new Lazy <CosmosOffers>(() => new CosmosOffers(this.DocumentClient), LazyThreadSafetyMode.PublicationOnly); }
internal void Init( CosmosClientOptions clientOptions, DocumentClient documentClient) { this.ClientOptions = clientOptions; this.DocumentClient = documentClient; //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.ClientOptions.CustomHandlers); this.RequestHandler = clientPipelineBuilder.Build(); CosmosSerializer userSerializer = this.ClientOptions.GetCosmosSerializerWithWrapperOrDefault(); this.ResponseFactory = new CosmosResponseFactory( defaultJsonSerializer: this.ClientOptions.PropertiesSerializer, userJsonSerializer: userSerializer); CosmosSerializer sqlQuerySpecSerializer = CosmosSqlQuerySpecJsonConverter.CreateSqlQuerySpecSerializer( cosmosSerializer: userSerializer, propertiesSerializer: this.ClientOptions.PropertiesSerializer); this.ClientContext = new ClientContextCore( client: this, clientOptions: this.ClientOptions, userJsonSerializer: userSerializer, defaultJsonSerializer: this.ClientOptions.PropertiesSerializer, sqlQuerySpecSerializer: sqlQuerySpecSerializer, cosmosResponseFactory: this.ResponseFactory, requestHandler: this.RequestHandler, documentClient: this.DocumentClient); }
internal void Init( CosmosClientOptions clientOptions, DocumentClient documentClient) { this.ClientOptions = clientOptions; this.DocumentClient = documentClient; //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.ClientOptions.CustomHandlers); this.RequestHandler = clientPipelineBuilder.Build(); this.ResponseFactory = new CosmosResponseFactory( defaultJsonSerializer: this.ClientOptions.PropertiesSerializer, userJsonSerializer: this.ClientOptions.CosmosSerializerWithWrapperOrDefault); this.ClientContext = new ClientContextCore( client: this, clientOptions: this.ClientOptions, userJsonSerializer: this.ClientOptions.CosmosSerializerWithWrapperOrDefault, defaultJsonSerializer: this.ClientOptions.PropertiesSerializer, cosmosResponseFactory: this.ResponseFactory, requestHandler: this.RequestHandler, documentClient: this.DocumentClient, documentQueryClient: new DocumentQueryClient(this.DocumentClient)); this.offerSet = new Lazy <CosmosOffers>(() => new CosmosOffers(this.DocumentClient), LazyThreadSafetyMode.PublicationOnly); }
internal void Init( CosmosClientOptions clientOptions, DocumentClient documentClient) { this.ClientOptions = clientOptions; this.DocumentClient = documentClient; //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.ClientOptions.CustomHandlers); this.RequestHandler = clientPipelineBuilder.Build(); CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( this.ClientOptions.Serializer, this.ClientOptions.SerializerOptions); this.ResponseFactory = new CosmosResponseFactory(serializerCore); this.ClientContext = new ClientContextCore( client: this, clientOptions: this.ClientOptions, serializerCore: serializerCore, cosmosResponseFactory: this.ResponseFactory, requestHandler: this.RequestHandler, documentClient: this.DocumentClient); }
internal void Init( CosmosClientConfiguration configuration, DocumentClient documentClient) { this.Configuration = configuration; this.DocumentClient = documentClient; this.CosmosJsonSerializer = new CosmosJsonSerializerWrapper(this.Configuration.CosmosJsonSerializer); //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.DocumentClient.ResetSessionTokenRetryPolicy, this.Configuration.CustomHandlers ); // DocumentClient is not initialized with any consistency overrides so default is backend consistency this.AccountConsistencyLevel = (ConsistencyLevel)this.DocumentClient.ConsistencyLevel; this.RequestHandler = clientPipelineBuilder.Build(); CosmosClientContext clientContext = new CosmosClientContextCore( this, this.Configuration, this.CosmosJsonSerializer, this.ResponseFactory, this.RequestHandler, this.DocumentClient, new DocumentQueryClient(this.DocumentClient)); this.Databases = new CosmosDatabasesCore(clientContext); this.offerSet = new Lazy <CosmosOffers>(() => new CosmosOffers(this.DocumentClient), LazyThreadSafetyMode.PublicationOnly); }
internal void Init( CosmosClientOptions clientOptions, DocumentClient documentClient) { this.ClientOptions = clientOptions; this.DocumentClient = documentClient; //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.ClientOptions.CustomHandlers); this.RequestHandler = clientPipelineBuilder.Build(); CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( this.ClientOptions.Serializer, this.ClientOptions.SerializerOptions); this.ResponseFactory = new CosmosResponseFactory(serializerCore); this.ClientContext = new ClientContextCore( client: this, clientOptions: this.ClientOptions, serializerCore: serializerCore, cosmosResponseFactory: this.ResponseFactory, requestHandler: this.RequestHandler, documentClient: this.DocumentClient, userAgent: this.DocumentClient.ConnectionPolicy.UserAgentContainer.UserAgent, encryptionProcessor: new EncryptionProcessor(), dekCache: new DekCache()); }
/// <summary> /// Used for unit testing only. /// </summary> /// <remarks>This constructor should be removed at some point. The mocking should happen in a derivied class.</remarks> internal CosmosClient( string accountEndpoint, string authKeyOrResourceToken, CosmosClientOptions cosmosClientOptions, DocumentClient documentClient) { if (accountEndpoint == null) { throw new ArgumentNullException(nameof(accountEndpoint)); } if (authKeyOrResourceToken == null) { throw new ArgumentNullException(nameof(authKeyOrResourceToken)); } if (cosmosClientOptions == null) { throw new ArgumentNullException(nameof(cosmosClientOptions)); } if (documentClient == null) { throw new ArgumentNullException(nameof(documentClient)); } this.Endpoint = new Uri(accountEndpoint); this.AccountKey = authKeyOrResourceToken; this.ClientOptions = cosmosClientOptions; this.DocumentClient = documentClient; //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.ClientOptions.CustomHandlers); this.RequestHandler = clientPipelineBuilder.Build(); CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( this.ClientOptions.Serializer, this.ClientOptions.SerializerOptions); this.ResponseFactory = new CosmosResponseFactory(serializerCore); this.ClientContext = new ClientContextCore( client: this, clientOptions: this.ClientOptions, serializerCore: serializerCore, cosmosResponseFactory: this.ResponseFactory, requestHandler: this.RequestHandler, documentClient: this.DocumentClient, userAgent: this.DocumentClient.ConnectionPolicy.UserAgentContainer.UserAgent, encryptionProcessor: new EncryptionProcessor(), dekCache: new DekCache()); }
internal static CosmosClientContext Create( CosmosClient cosmosClient, DocumentClient documentClient, CosmosClientOptions clientOptions, RequestInvokerHandler requestInvokerHandler = null) { if (cosmosClient == null) { throw new ArgumentNullException(nameof(cosmosClient)); } if (documentClient == null) { throw new ArgumentNullException(nameof(documentClient)); } clientOptions = ClientContextCore.CreateOrCloneClientOptions(clientOptions); if (requestInvokerHandler == null) { //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( cosmosClient, clientOptions.ConsistencyLevel, clientOptions.CustomHandlers); requestInvokerHandler = clientPipelineBuilder.Build(); } CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( clientOptions.Serializer, clientOptions.SerializerOptions); // This sets the serializer on client options which gives users access to it if a custom one is not configured. clientOptions.SetSerializerIfNotConfigured(serializerCore.GetCustomOrDefaultSerializer()); CosmosResponseFactoryInternal responseFactory = new CosmosResponseFactoryCore(serializerCore); return(new ClientContextCore( client: cosmosClient, clientOptions: clientOptions, serializerCore: serializerCore, cosmosResponseFactory: responseFactory, requestHandler: requestInvokerHandler, documentClient: documentClient, userAgent: documentClient.ConnectionPolicy.UserAgentContainer.UserAgent, batchExecutorCache: new BatchAsyncContainerExecutorCache())); }
internal static CosmosClientContext Create( CosmosClient cosmosClient, DocumentClient documentClient, CosmosClientOptions clientOptions, RequestInvokerHandler requestInvokerHandler = null) { if (cosmosClient == null) { throw new ArgumentNullException(nameof(cosmosClient)); } if (documentClient == null) { throw new ArgumentNullException(nameof(documentClient)); } clientOptions = ClientContextCore.CreateOrCloneClientOptions(clientOptions); if (requestInvokerHandler == null) { //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( cosmosClient, clientOptions.ConsistencyLevel, clientOptions.CustomHandlers); requestInvokerHandler = clientPipelineBuilder.Build(); } CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( clientOptions.Serializer, clientOptions.SerializerOptions); CosmosResponseFactory responseFactory = new CosmosResponseFactory(serializerCore); return(new ClientContextCore( client: cosmosClient, clientOptions: clientOptions, serializerCore: serializerCore, cosmosResponseFactory: responseFactory, requestHandler: requestInvokerHandler, documentClient: documentClient, userAgent: documentClient.ConnectionPolicy.UserAgentContainer.UserAgent, encryptionProcessor: new EncryptionProcessor(), dekCache: new DekCache(), batchExecutorCache: new BatchAsyncContainerExecutorCache())); }
internal void Init( CosmosConfiguration configuration, DocumentClient documentClient) { this.CosmosConfiguration = configuration; this.DocumentClient = documentClient; //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.DocumentClient.RetryPolicy, this.CosmosConfiguration.CustomHandlers ); // DocumentClient is not initialized with any consistency overrides so default is backend consistency this.AccountConsistencyLevel = this.DocumentClient.ConsistencyLevel; this.RequestHandler = clientPipelineBuilder.Build(); this.Databases = new CosmosDatabases(this); this.offerSet = new Lazy <CosmosOffers>(() => new CosmosOffers(this.DocumentClient), LazyThreadSafetyMode.PublicationOnly); }
/// <summary> /// Creates a new CosmosClient with the account endpoint URI string and account key. /// /// CosmosClient is thread-safe. Its recommended to maintain a single instance of CosmosClient per lifetime /// of the application which enables efficient connection management and performance. Please refer to the /// <see href="https://docs.microsoft.com/azure/cosmos-db/performance-tips">performance guide</see>. /// </summary> /// <param name="accountEndpoint">The cosmos service endpoint to use</param> /// <param name="authKeyOrResourceToken">The cosmos account key or resource token to use to create the client.</param> /// <param name="clientOptions">(Optional) client options</param> /// <example> /// The CosmosClient is created with the AccountEndpoint, AccountKey or ResourceToken and configured to use "East US 2" region. /// <code language="c#"> /// <![CDATA[ /// using Microsoft.Azure.Cosmos; /// /// CosmosClient cosmosClient = new CosmosClient( /// "account-endpoint-from-portal", /// "account-key-from-portal", /// new CosmosClientOptions() /// { /// ApplicationRegion = Regions.EastUS2, /// }); /// /// // Dispose cosmosClient at application exit /// ]]> /// </code> /// </example> /// <seealso cref="CosmosClientOptions"/> /// <seealso cref="Fluent.CosmosClientBuilder"/> /// <seealso href="https://docs.microsoft.com/azure/cosmos-db/performance-tips">Performance Tips</seealso> /// <seealso href="https://docs.microsoft.com/azure/cosmos-db/troubleshoot-dot-net-sdk">Diagnose and troubleshoot issues</seealso> public CosmosClient( string accountEndpoint, string authKeyOrResourceToken, CosmosClientOptions clientOptions = null) { if (accountEndpoint == null) { throw new ArgumentNullException(nameof(accountEndpoint)); } if (authKeyOrResourceToken == null) { throw new ArgumentNullException(nameof(authKeyOrResourceToken)); } if (clientOptions == null) { clientOptions = new CosmosClientOptions(); } this.Endpoint = new Uri(accountEndpoint); this.AccountKey = authKeyOrResourceToken; CosmosClientOptions clientOptionsClone = clientOptions.Clone(); DocumentClient documentClient = new DocumentClient( this.Endpoint, this.AccountKey, apitype: clientOptionsClone.ApiType, sendingRequestEventArgs: clientOptionsClone.SendingRequestEventArgs, transportClientHandlerFactory: clientOptionsClone.TransportClientHandlerFactory, connectionPolicy: clientOptionsClone.GetConnectionPolicy(), enableCpuMonitor: clientOptionsClone.EnableCpuMonitor, storeClientFactory: clientOptionsClone.StoreClientFactory, desiredConsistencyLevel: clientOptionsClone.GetDocumentsConsistencyLevel(), handler: this.CreateHttpClientHandler(clientOptions), sessionContainer: clientOptionsClone.SessionContainer); this.ClientOptions = clientOptions; this.DocumentClient = documentClient; //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( this, this.ClientOptions.CustomHandlers); this.RequestHandler = clientPipelineBuilder.Build(); CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( this.ClientOptions.Serializer, this.ClientOptions.SerializerOptions); this.ResponseFactory = new CosmosResponseFactory(serializerCore); this.ClientContext = new ClientContextCore( client: this, clientOptions: this.ClientOptions, serializerCore: serializerCore, cosmosResponseFactory: this.ResponseFactory, requestHandler: this.RequestHandler, documentClient: this.DocumentClient, userAgent: this.DocumentClient.ConnectionPolicy.UserAgentContainer.UserAgent, encryptionProcessor: new EncryptionProcessor(), dekCache: new DekCache()); }
internal static CosmosClientContext Create( CosmosClient cosmosClient, DocumentClient documentClient, CosmosClientOptions clientOptions, RequestInvokerHandler requestInvokerHandler = null) { if (cosmosClient == null) { throw new ArgumentNullException(nameof(cosmosClient)); } if (documentClient == null) { throw new ArgumentNullException(nameof(documentClient)); } clientOptions = ClientContextCore.CreateOrCloneClientOptions(clientOptions); ConnectionPolicy connectionPolicy = clientOptions.GetConnectionPolicy(cosmosClient.ClientId); ClientTelemetry telemetry = null; if (connectionPolicy.EnableClientTelemetry) { try { telemetry = ClientTelemetry.CreateAndStartBackgroundTelemetry( documentClient: documentClient, userAgent: connectionPolicy.UserAgentContainer.UserAgent, connectionMode: connectionPolicy.ConnectionMode, authorizationTokenProvider: cosmosClient.AuthorizationTokenProvider, diagnosticsHelper: DiagnosticsHandlerHelper.Instance, preferredRegions: clientOptions.ApplicationPreferredRegions); } catch (Exception ex) { DefaultTrace.TraceInformation($"Error While starting Telemetry Job : {ex.Message}. Hence disabling Client Telemetry"); connectionPolicy.EnableClientTelemetry = false; } } else { DefaultTrace.TraceInformation("Client Telemetry Disabled."); } if (requestInvokerHandler == null) { //Request pipeline ClientPipelineBuilder clientPipelineBuilder = new ClientPipelineBuilder( cosmosClient, clientOptions.ConsistencyLevel, clientOptions.CustomHandlers, telemetry: telemetry); requestInvokerHandler = clientPipelineBuilder.Build(); } CosmosSerializerCore serializerCore = CosmosSerializerCore.Create( clientOptions.Serializer, clientOptions.SerializerOptions); // This sets the serializer on client options which gives users access to it if a custom one is not configured. clientOptions.SetSerializerIfNotConfigured(serializerCore.GetCustomOrDefaultSerializer()); CosmosResponseFactoryInternal responseFactory = new CosmosResponseFactoryCore(serializerCore); return(new ClientContextCore( client: cosmosClient, clientOptions: clientOptions, serializerCore: serializerCore, cosmosResponseFactory: responseFactory, requestHandler: requestInvokerHandler, documentClient: documentClient, userAgent: documentClient.ConnectionPolicy.UserAgentContainer.UserAgent, batchExecutorCache: new BatchAsyncContainerExecutorCache(), telemetry: telemetry)); }