public DocumentServiceLeaseCheckpointerCore(
     DocumentServiceLeaseUpdater leaseUpdater,
     RequestOptionsFactory requestOptionsFactory)
 {
     this.leaseUpdater          = leaseUpdater;
     this.requestOptionsFactory = requestOptionsFactory;
 }
        public static async Task <DocumentServiceLeaseStoreManager> InitializeAsync(
            ContainerInternal leaseContainer,
            string leaseContainerPrefix,
            string instanceName)
        {
            ContainerResponse cosmosContainerResponse = await leaseContainer.ReadContainerAsync().ConfigureAwait(false);

            ContainerProperties containerProperties = cosmosContainerResponse.Resource;

            bool isPartitioned =
                containerProperties.PartitionKey != null &&
                containerProperties.PartitionKey.Paths != null &&
                containerProperties.PartitionKey.Paths.Count > 0;
            bool isMigratedFixed = containerProperties.PartitionKey?.IsSystemKey == true;

            if (isPartitioned &&
                !isMigratedFixed &&
                (containerProperties.PartitionKey.Paths.Count != 1 || containerProperties.PartitionKey.Paths[0] != "/id"))
            {
                throw new ArgumentException("The lease collection, if partitioned, must have partition key equal to id.");
            }

            RequestOptionsFactory requestOptionsFactory = isPartitioned && !isMigratedFixed ?
                                                          (RequestOptionsFactory) new PartitionedByIdCollectionRequestOptionsFactory() :
                                                          (RequestOptionsFactory) new SinglePartitionRequestOptionsFactory();

            DocumentServiceLeaseStoreManagerBuilder leaseStoreManagerBuilder = new DocumentServiceLeaseStoreManagerBuilder()
                                                                               .WithLeasePrefix(leaseContainerPrefix)
                                                                               .WithLeaseContainer(leaseContainer)
                                                                               .WithRequestOptionsFactory(requestOptionsFactory)
                                                                               .WithHostName(instanceName);

            return(await leaseStoreManagerBuilder.BuildAsync().ConfigureAwait(false));
        }
 public DocumentServiceLeaseStoreManagerCosmos(
     DocumentServiceLeaseStoreManagerSettings settings,
     CosmosContainer leaseContainer,
     RequestOptionsFactory requestOptionsFactory)
     : this(settings, leaseContainer, requestOptionsFactory, new DocumentServiceLeaseUpdaterCosmos(leaseContainer))
 {
 }
Example #4
0
 public DocumentServiceLeaseStoreManagerCosmos(
     DocumentServiceLeaseStoreManagerOptions options,
     ContainerInternal monitoredContainer,
     ContainerInternal leaseContainer,
     RequestOptionsFactory requestOptionsFactory)
     : this(options, monitoredContainer, leaseContainer, requestOptionsFactory, new DocumentServiceLeaseUpdaterCosmos(leaseContainer))
 {
 }
Example #5
0
 public DocumentServiceLeaseStoreCosmos(
     Container container,
     string containerNamePrefix,
     RequestOptionsFactory requestOptionsFactory)
 {
     this.container             = container;
     this.containerNamePrefix   = containerNamePrefix;
     this.requestOptionsFactory = requestOptionsFactory;
 }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DocumentServiceLeaseStoreManagerCosmos"/> class.
        /// </summary>
        /// <remarks>
        /// Internal only for testing purposes, otherwise would be private.
        /// </remarks>
        internal DocumentServiceLeaseStoreManagerCosmos(
            DocumentServiceLeaseStoreManagerOptions options,
            ContainerInternal monitoredContainer,
            ContainerInternal leaseContainer,
            RequestOptionsFactory requestOptionsFactory,
            DocumentServiceLeaseUpdater leaseUpdater) // For testing purposes only.
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }
            if (options.ContainerNamePrefix == null)
            {
                throw new ArgumentNullException(nameof(options.ContainerNamePrefix));
            }
            if (string.IsNullOrEmpty(options.HostName))
            {
                throw new ArgumentNullException(nameof(options.HostName));
            }
            if (monitoredContainer == null)
            {
                throw new ArgumentNullException(nameof(monitoredContainer));
            }
            if (leaseContainer == null)
            {
                throw new ArgumentNullException(nameof(leaseContainer));
            }
            if (requestOptionsFactory == null)
            {
                throw new ArgumentException(nameof(requestOptionsFactory));
            }
            if (leaseUpdater == null)
            {
                throw new ArgumentException(nameof(leaseUpdater));
            }

            this.leaseStore = new DocumentServiceLeaseStoreCosmos(
                leaseContainer,
                options.ContainerNamePrefix,
                requestOptionsFactory);

            this.leaseManager = new DocumentServiceLeaseManagerCosmos(
                monitoredContainer,
                leaseContainer,
                leaseUpdater,
                options,
                requestOptionsFactory);

            this.leaseCheckpointer = new DocumentServiceLeaseCheckpointerCore(
                leaseUpdater,
                requestOptionsFactory);

            this.leaseContainer = new DocumentServiceLeaseContainerCosmos(
                leaseContainer,
                options);
        }
Example #7
0
        public DocumentServiceLeaseStoreManagerBuilder WithRequestOptionsFactory(RequestOptionsFactory requestOptionsFactory)
        {
            if (requestOptionsFactory == null)
            {
                throw new ArgumentNullException(nameof(requestOptionsFactory));
            }

            this.requestOptionsFactory = requestOptionsFactory;
            return(this);
        }
Example #8
0
 public DocumentServiceLeaseManagerCosmos(
     Container leaseContainer,
     DocumentServiceLeaseUpdater leaseUpdater,
     DocumentServiceLeaseStoreManagerOptions options,
     RequestOptionsFactory requestOptionsFactory)
 {
     this.leaseContainer        = leaseContainer;
     this.leaseUpdater          = leaseUpdater;
     this.options               = options;
     this.requestOptionsFactory = requestOptionsFactory;
 }
 public DocumentServiceLeaseManagerCosmos(
     CosmosContainer leaseContainer,
     DocumentServiceLeaseUpdater leaseUpdater,
     DocumentServiceLeaseStoreManagerSettings settings,
     RequestOptionsFactory requestOptionsFactory)
 {
     this.leaseContainer        = leaseContainer;
     this.leaseUpdater          = leaseUpdater;
     this.settings              = settings;
     this.requestOptionsFactory = requestOptionsFactory;
 }
 public DocumentServiceLeaseManagerCosmos(
     ContainerInternal monitoredContainer,
     ContainerInternal leaseContainer,
     DocumentServiceLeaseUpdater leaseUpdater,
     DocumentServiceLeaseStoreManagerOptions options,
     RequestOptionsFactory requestOptionsFactory)
 {
     this.monitoredContainer    = monitoredContainer;
     this.leaseContainer        = leaseContainer;
     this.leaseUpdater          = leaseUpdater;
     this.options               = options;
     this.requestOptionsFactory = requestOptionsFactory;
     this.lazyContainerRid      = new AsyncLazy <TryCatch <string> >(valueFactory: (trace, innerCancellationToken) => this.TryInitializeContainerRIdAsync(innerCancellationToken));
 }
 private DocumentServiceLeaseStoreManagerBuilder WithRequestOptionsFactory(RequestOptionsFactory requestOptionsFactory)
 {
     this.requestOptionsFactory = requestOptionsFactory ?? throw new ArgumentNullException(nameof(requestOptionsFactory));
     return(this);
 }