All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.azure.cosmos.implementation.changefeed.Lease Maven / Gradle / Ivy

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.cosmos.implementation.changefeed;

import com.azure.cosmos.ChangeFeedProcessor;
import com.azure.cosmos.implementation.changefeed.common.ChangeFeedMode;
import com.azure.cosmos.implementation.changefeed.common.ChangeFeedState;
import com.azure.cosmos.implementation.changefeed.common.LeaseVersion;
import com.azure.cosmos.implementation.feedranges.FeedRangeInternal;

import java.time.Instant;
import java.time.ZonedDateTime;
import java.util.Map;

/**
 * Represents a lease that is persisted as a document in the lease collection.
 * 

* Leases are used to: * Keep track of the {@link ChangeFeedProcessor} progress for a particular Partition Key RANGE. * Distribute load between different instances of {@link ChangeFeedProcessor}. * Ensure reliable recovery for cases when an instance of {@link ChangeFeedProcessor} gets disconnected, hangs or crashes. */ public interface Lease { ZonedDateTime UNIX_START_TIME = ZonedDateTime.parse("1970-01-01T00:00:00.0Z[UTC]"); String PROPERTY_NAME_LEASE_TOKEN = "LeaseToken"; String PROPERTY_NAME_CONTINUATION_TOKEN = "ContinuationToken"; String PROPERTY_NAME_TIMESTAMP = "timestamp"; String PROPERTY_NAME_OWNER = "Owner"; String PROPERTY_NAME_VERSION = "version"; String PROPERTY_NAME_FEED_RANGE = "feedRange"; /** * Gets the partition associated with the lease. * * @return the partition associated with the lease. */ String getLeaseToken(); /** * Gets the feed range associated with the lease. * @return feed range associated with the lease. */ FeedRangeInternal getFeedRange(); /** * Gets the host name owner of the lease. * *

* The Owner keeps track which {@link ChangeFeedProcessor} is currently processing that Partition Key RANGE. * * @return the host name owner of the lease. */ String getOwner(); /** * Gets the version of this lease. See {@link LeaseVersion} for more details. * @return version of the lease. */ LeaseVersion getVersion(); /** * Sets the lease version for the lease. * @param leaseVersion lease version for the lease. */ void setVersion(LeaseVersion leaseVersion); /** * Sets the feed range for the lease. * @param feedRangeInternal feed range for the lease. */ void setFeedRange(FeedRangeInternal feedRangeInternal); /** * Gets the timestamp of the lease. * * @return the timestamp of the lease. */ String getTimestamp(); ChangeFeedState getContinuationState(String containerRid, ChangeFeedMode changeFeedMode); /** * Gets the continuation token used to determine the last processed point of the Change Feed. * * @return the continuation token used to determine the last processed point of the Change Feed. */ String getContinuationToken(); /** * Gets the human-readable continuation token which can be used to determine the last processed point of Change Feed. * NOTE: This is only for logging and debugging purposes. * * @return the human-readable continuation token which can be used to determine the last processed point of Change Feed. */ String getReadableContinuationToken(); /** * Sets the continuation token used to determine the last processed point of the Change Feed. * * * @param continuationToken the continuation token used to determine the last processed point of the Change Feed. */ void setContinuationToken(String continuationToken); /** * Gets the lease ID. * * @return the lease ID. */ String getId(); /** * Gets the concurrency token. * * @return the concurrency token. */ String getConcurrencyToken(); /** * Gets the custom lease item which can be managed from {@link PartitionLoadBalancingStrategy}. * * @return the custom lease item. */ Map getProperties(); /** * Sets the host name owner of the lease. * *

* The Owner keeps track which {@link ChangeFeedProcessor} is currently processing that Partition Key RANGE. * * @param owner the host name owner of the lease. */ void setOwner(String owner); /** * Sets the timestamp of the lease. * *

* The timestamp is used to determine lease expiration. * * @param timestamp the timestamp of the lease. */ void setTimestamp(Instant timestamp); /** * Sets the lease ID. * * * @param id the lease ID. */ void setId(String id); /** * Sets the concurrency token. * * * @param concurrencyToken the concurrency token. */ void setConcurrencyToken(String concurrencyToken); /** * Sets the custom lease item which can be managed from {@link PartitionLoadBalancingStrategy}. * * * @param properties the custom lease item. */ void setProperties(Map properties); /** * Sets the lease properties. * * * @param lease the input representation of a lease document. */ void setServiceItemLease(Lease lease); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy