Class ReadPreference
- java.lang.Object
-
- com.mongodb.ReadPreference
-
- Direct Known Subclasses:
TaggableReadPreference
@Immutable public abstract class ReadPreference extends Object
A class that represents preferred replica set members to which a query or command can be sent.- MongoDB documentation
- Read Preference
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description List<ServerDescription>choose(ClusterDescription clusterDescription)Chooses the servers from the given cluster than match this read preference.protected abstract List<ServerDescription>chooseForNonReplicaSet(ClusterDescription clusterDescription)protected abstract List<ServerDescription>chooseForReplicaSet(ClusterDescription clusterDescription)abstract StringgetName()Gets the name of this read preference.abstract booleanisSlaveOk()True if this read preference allows reading from a secondary member of a replica set.static ReadPreferencenearest()Gets a read preference that forces reads to a primary or a secondary.static ReadPreferencenearest(long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to a primary or a secondary that is less stale than the given maximum.static TaggableReadPreferencenearest(TagSet tagSet)Gets a read preference that forces reads to the primary or a secondary with the given set of tags.static TaggableReadPreferencenearest(TagSet tagSet, long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to the primary or a secondary with the given set of tags that is less stale than the given maximum.static TaggableReadPreferencenearest(List<TagSet> tagSetList)Gets a read preference that forces reads to the primary or a secondary with one of the given sets of tags.static TaggableReadPreferencenearest(List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to the primary or a secondary with one of the given sets of tags that is less stale than the given maximum.static ReadPreferenceprimary()Gets a read preference that forces read to the primary.static ReadPreferenceprimaryPreferred()Gets a read preference that forces reads to the primary if available, otherwise to a secondary.static ReadPreferenceprimaryPreferred(long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to the primary if available, otherwise to a secondary.static TaggableReadPreferenceprimaryPreferred(TagSet tagSet)Gets a read preference that forces reads to the primary if available, otherwise to a secondary with the given set of tags.static TaggableReadPreferenceprimaryPreferred(TagSet tagSet, long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to the primary if available, otherwise to a secondary with the given set of tags that is less stale than the given maximum.static TaggableReadPreferenceprimaryPreferred(List<TagSet> tagSetList)Gets a read preference that forces reads to the primary if available, otherwise to a secondary with one of the given sets of tags.static TaggableReadPreferenceprimaryPreferred(List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to the primary if available, otherwise to a secondary with one of the given sets of tags that is less stale than the given maximum.static ReadPreferencesecondary()Gets a read preference that forces reads to a secondary.static ReadPreferencesecondary(long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to a secondary that is less stale than the given maximum.static TaggableReadPreferencesecondary(TagSet tagSet)Gets a read preference that forces reads to a secondary with the given set of tags.static TaggableReadPreferencesecondary(TagSet tagSet, long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to a secondary with the given set of tags that is less stale than the given maximum.static TaggableReadPreferencesecondary(List<TagSet> tagSetList)Gets a read preference that forces reads to a secondary with one of the given sets of tags.static TaggableReadPreferencesecondary(List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to a secondary with one of the given sets of tags that is less stale than the given maximum.static ReadPreferencesecondaryPreferred()Gets a read preference that forces reads to a secondary if one is available, otherwise to the primary.static ReadPreferencesecondaryPreferred(long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to a secondary that is less stale than the given maximumm if one is available, otherwise to the primary.static TaggableReadPreferencesecondaryPreferred(TagSet tagSet)Gets a read preference that forces reads to a secondary with the given set of tags, or the primary is none are available.static TaggableReadPreferencesecondaryPreferred(TagSet tagSet, long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to a secondary with the given set of tags that is less stale than the given maximum, or the primary is none are available.static TaggableReadPreferencesecondaryPreferred(List<TagSet> tagSetList)Gets a read preference that forces reads to a secondary with one of the given sets of tags.static TaggableReadPreferencesecondaryPreferred(List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)Gets a read preference that forces reads to a secondary with one of the given sets of tags that is less stale than the given maximum.abstract BsonDocumenttoDocument()Gets a document representing this read preference in the wire protocol.static ReadPreferencevalueOf(String name)Creates a read preference from the given read preference name.static TaggableReadPreferencevalueOf(String name, List<TagSet> tagSetList)Creates a taggable read preference from the given read preference name and list of tag sets.static TaggableReadPreferencevalueOf(String name, List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)Creates a taggable read preference from the given read preference name, list of tag sets, and max allowable staleness of secondaries.abstract ReadPreferencewithHedgeOptions(ReadPreferenceHedgeOptions hedgeOptions)Create a new ReadPreference instance with hedge options.abstract ReadPreferencewithMaxStalenessMS(Long maxStalenessMS, TimeUnit timeUnit)Create a new ReadPreference instance with the maximum acceptable staleness of a secondary in order to be considered for read operations.abstract ReadPreferencewithTagSet(TagSet tagSet)Create a new ReadPreference instance with a new tag set.abstract ReadPreferencewithTagSetList(List<TagSet> tagSet)Create a new ReadPreference instance with a new tag set list.
-
-
-
Method Detail
-
withTagSet
public abstract ReadPreference withTagSet(TagSet tagSet)
Create a new ReadPreference instance with a new tag set.Note: this method is not supported for a primary read preference.
- Parameters:
tagSet- the new tag set- Returns:
- a new ReadPreference instance with a new tag set
- Since:
- 4.1
-
withTagSetList
public abstract ReadPreference withTagSetList(List<TagSet> tagSet)
Create a new ReadPreference instance with a new tag set list.Note: this method is not supported for a primary read preference.
- Parameters:
tagSet- the new tag set list- Returns:
- a new ReadPreference instance with a new tag set list
- Since:
- 4.1
-
withMaxStalenessMS
public abstract ReadPreference withMaxStalenessMS(Long maxStalenessMS, TimeUnit timeUnit)
Create a new ReadPreference instance with the maximum acceptable staleness of a secondary in order to be considered for read operations.Note: this method is not supported for a primary read preference.
- Parameters:
maxStalenessMS- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- a new ReadPreference instance with a new maximum allowable staleness
- Since:
- 4.1
- Since server release
- 3.4
-
withHedgeOptions
public abstract ReadPreference withHedgeOptions(ReadPreferenceHedgeOptions hedgeOptions)
Create a new ReadPreference instance with hedge options.Note: this method is not supported for a primary read preference.
- Parameters:
hedgeOptions- the hedge options- Returns:
- a new ReadPreference instance with hedge options
- Since:
- 4.1
- Since server release
- 4.4
-
isSlaveOk
public abstract boolean isSlaveOk()
True if this read preference allows reading from a secondary member of a replica set.- Returns:
- if reading from a secondary is ok
-
getName
public abstract String getName()
Gets the name of this read preference.- Returns:
- the name
-
toDocument
public abstract BsonDocument toDocument()
Gets a document representing this read preference in the wire protocol.- Returns:
- the document
-
choose
public final List<ServerDescription> choose(ClusterDescription clusterDescription)
Chooses the servers from the given cluster than match this read preference.- Parameters:
clusterDescription- the cluster description- Returns:
- a list of matching server descriptions, which may be empty but may not be null
-
chooseForNonReplicaSet
protected abstract List<ServerDescription> chooseForNonReplicaSet(ClusterDescription clusterDescription)
-
chooseForReplicaSet
protected abstract List<ServerDescription> chooseForReplicaSet(ClusterDescription clusterDescription)
-
primary
public static ReadPreference primary()
Gets a read preference that forces read to the primary.- Returns:
- ReadPreference which reads from primary only
-
primaryPreferred
public static ReadPreference primaryPreferred()
Gets a read preference that forces reads to the primary if available, otherwise to a secondary.- Returns:
- ReadPreference which reads primary if available.
-
secondary
public static ReadPreference secondary()
Gets a read preference that forces reads to a secondary.- Returns:
- ReadPreference which reads secondary.
-
secondaryPreferred
public static ReadPreference secondaryPreferred()
Gets a read preference that forces reads to a secondary if one is available, otherwise to the primary.- Returns:
- ReadPreference which reads secondary if available, otherwise from primary.
-
nearest
public static ReadPreference nearest()
Gets a read preference that forces reads to a primary or a secondary.- Returns:
- ReadPreference which reads nearest
-
primaryPreferred
public static ReadPreference primaryPreferred(long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to the primary if available, otherwise to a secondary.- Parameters:
maxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads primary if available.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
secondary
public static ReadPreference secondary(long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to a secondary that is less stale than the given maximum.The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
maxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads secondary.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
secondaryPreferred
public static ReadPreference secondaryPreferred(long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to a secondary that is less stale than the given maximumm if one is available, otherwise to the primary.The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
*- Parameters:
maxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads secondary if available, otherwise from primary.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
nearest
public static ReadPreference nearest(long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to a primary or a secondary that is less stale than the given maximum.The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
maxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads nearest
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
primaryPreferred
public static TaggableReadPreference primaryPreferred(TagSet tagSet)
Gets a read preference that forces reads to the primary if available, otherwise to a secondary with the given set of tags.- Parameters:
tagSet- the set of tags to limit the list of secondaries to.- Returns:
- ReadPreference which reads primary if available, otherwise a secondary respective of tags.\
- Since:
- 2.13
-
secondary
public static TaggableReadPreference secondary(TagSet tagSet)
Gets a read preference that forces reads to a secondary with the given set of tags.- Parameters:
tagSet- the set of tags to limit the list of secondaries to- Returns:
- ReadPreference which reads secondary respective of tags.
- Since:
- 2.13
-
secondaryPreferred
public static TaggableReadPreference secondaryPreferred(TagSet tagSet)
Gets a read preference that forces reads to a secondary with the given set of tags, or the primary is none are available.- Parameters:
tagSet- the set of tags to limit the list of secondaries to- Returns:
- ReadPreference which reads secondary if available respective of tags, otherwise from primary irrespective of tags.
- Since:
- 2.13
-
nearest
public static TaggableReadPreference nearest(TagSet tagSet)
Gets a read preference that forces reads to the primary or a secondary with the given set of tags.- Parameters:
tagSet- the set of tags to limit the list of secondaries to- Returns:
- ReadPreference which reads nearest node respective of tags.
- Since:
- 2.13
-
primaryPreferred
public static TaggableReadPreference primaryPreferred(TagSet tagSet, long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to the primary if available, otherwise to a secondary with the given set of tags that is less stale than the given maximum.The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
tagSet- the set of tags to limit the list of secondaries to.maxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads primary if available, otherwise a secondary respective of tags.\
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
secondary
public static TaggableReadPreference secondary(TagSet tagSet, long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to a secondary with the given set of tags that is less stale than the given maximum.The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
tagSet- the set of tags to limit the list of secondaries tomaxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads secondary respective of tags.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
secondaryPreferred
public static TaggableReadPreference secondaryPreferred(TagSet tagSet, long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to a secondary with the given set of tags that is less stale than the given maximum, or the primary is none are available.The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
*- Parameters:
tagSet- the set of tags to limit the list of secondaries tomaxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads secondary if available respective of tags, otherwise from primary irrespective of tags.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
nearest
public static TaggableReadPreference nearest(TagSet tagSet, long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to the primary or a secondary with the given set of tags that is less stale than the given maximum.The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
tagSet- the set of tags to limit the list of secondaries tomaxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads nearest node respective of tags.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
primaryPreferred
public static TaggableReadPreference primaryPreferred(List<TagSet> tagSetList)
Gets a read preference that forces reads to the primary if available, otherwise to a secondary with one of the given sets of tags. The driver will look for a secondary with each tag set in the given list, stopping after one is found, or failing if no secondary can be found that matches any of the tag sets in the list.- Parameters:
tagSetList- the list of tag sets to limit the list of secondaries to- Returns:
- ReadPreference which reads primary if available, otherwise a secondary respective of tags.
- Since:
- 2.13
-
secondary
public static TaggableReadPreference secondary(List<TagSet> tagSetList)
Gets a read preference that forces reads to a secondary with one of the given sets of tags. The driver will look for a secondary with each tag set in the given list, stopping after one is found, or failing if no secondary can be found that matches any of the tag sets in the list.- Parameters:
tagSetList- the list of tag sets to limit the list of secondaries to- Returns:
- ReadPreference which reads secondary respective of tags.
- Since:
- 2.13
-
secondaryPreferred
public static TaggableReadPreference secondaryPreferred(List<TagSet> tagSetList)
Gets a read preference that forces reads to a secondary with one of the given sets of tags. The driver will look for a secondary with each tag set in the given list, stopping after one is found, or the primary if none are available.- Parameters:
tagSetList- the list of tag sets to limit the list of secondaries to- Returns:
- ReadPreference which reads secondary if available respective of tags, otherwise from primary irrespective of tags.
- Since:
- 2.13
-
nearest
public static TaggableReadPreference nearest(List<TagSet> tagSetList)
Gets a read preference that forces reads to the primary or a secondary with one of the given sets of tags. The driver will look for a secondary with each tag set in the given list, stopping after one is found, or the primary if none are available.- Parameters:
tagSetList- the list of tag sets to limit the list of secondaries to- Returns:
- ReadPreference which reads nearest node respective of tags.
- Since:
- 2.13
-
primaryPreferred
public static TaggableReadPreference primaryPreferred(List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to the primary if available, otherwise to a secondary with one of the given sets of tags that is less stale than the given maximum.The driver will look for a secondary with each tag set in the given list, stopping after one is found, or failing if no secondary can be found that matches any of the tag sets in the list.
The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
tagSetList- the list of tag sets to limit the list of secondaries tomaxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads primary if available, otherwise a secondary respective of tags.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
secondary
public static TaggableReadPreference secondary(List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to a secondary with one of the given sets of tags that is less stale than the given maximum.The driver will look for a secondary with each tag set in the given list, stopping after one is found, or failing if no secondary can be found that matches any of the tag sets in the list.
The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
tagSetList- the list of tag sets to limit the list of secondaries tomaxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads secondary respective of tags.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
secondaryPreferred
public static TaggableReadPreference secondaryPreferred(List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to a secondary with one of the given sets of tags that is less stale than the given maximum.The driver will look for a secondary with each tag set in the given list, stopping after one is found, or the primary if none are available.
The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
tagSetList- the list of tag sets to limit the list of secondaries tomaxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads secondary if available respective of tags, otherwise from primary irrespective of tags.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
nearest
public static TaggableReadPreference nearest(List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)
Gets a read preference that forces reads to the primary or a secondary with one of the given sets of tags that is less stale than the given maximum.The driver will look for a secondary with each tag set in the given list, stopping after one is found, or the primary if none are available.
The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
tagSetList- the list of tag sets to limit the list of secondaries tomaxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- ReadPreference which reads nearest node respective of tags.
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
valueOf
public static ReadPreference valueOf(String name)
Creates a read preference from the given read preference name.- Parameters:
name- the name of the read preference- Returns:
- the read preference
-
valueOf
public static TaggableReadPreference valueOf(String name, List<TagSet> tagSetList)
Creates a taggable read preference from the given read preference name and list of tag sets.- Parameters:
name- the name of the read preferencetagSetList- the list of tag sets- Returns:
- the taggable read preference
- Since:
- 2.13
-
valueOf
public static TaggableReadPreference valueOf(String name, List<TagSet> tagSetList, long maxStaleness, TimeUnit timeUnit)
Creates a taggable read preference from the given read preference name, list of tag sets, and max allowable staleness of secondaries.The driver estimates the staleness of each secondary, based on lastWriteDate values provided in server isMaster responses, and selects only those secondaries whose staleness is less than or equal to maxStaleness.
- Parameters:
name- the name of the read preferencetagSetList- the list of tag setsmaxStaleness- the max allowable staleness of secondaries. The minimum value is either 90 seconds, or the heartbeat frequency plus 10 seconds, whichever is greatest.timeUnit- the time unit of maxStaleness- Returns:
- the taggable read preference
- Since:
- 3.4
- See Also:
TaggableReadPreference.getMaxStaleness(TimeUnit)
-
-