Class: Mongo::ClusterTime Private

Inherits:
BSON::Document
  • Object
show all
Defined in:
lib/mongo/cluster_time.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

ClusterTime encapsulates cluster time storage and operations.

The primary operation performed on the cluster time is advancing it: given another cluster time, pick the newer of the two.

This class provides comparison methods that are used to figure out which cluster time is newer, and provides diagnostics in lint mode when the actual time is missing from a cluster time document.

API:

  • private

Defined Under Namespace

Modules: Consumer

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(elements = nil) ⇒ ClusterTime

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of ClusterTime.

API:

  • private



30
31
32
33
34
35
36
# File 'lib/mongo/cluster_time.rb', line 30

def initialize(elements = nil)
  super

  if Lint.enabled? && !self['clusterTime']
    raise ArgumentError, 'Creating a cluster time without clusterTime field'
  end
end

Class Method Details

.[](doc) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Converts a BSON::Document to a ClusterTime.

doc can be nil, in which case nil is returned.

API:

  • private



97
98
99
100
101
102
103
# File 'lib/mongo/cluster_time.rb', line 97

def [](doc)
  if doc.nil? || doc.is_a?(ClusterTime)
    doc
  else
    ClusterTime.new(doc)
  end
end

Instance Method Details

#<(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



78
79
80
# File 'lib/mongo/cluster_time.rb', line 78

def <(other)
  (self <=> other) == -1
end

#<=(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



75
76
77
# File 'lib/mongo/cluster_time.rb', line 75

def <=(other)
  (self <=> other) != 1
end

#<=>(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Compares two ClusterTime instances by comparing their timestamps.

API:

  • private



56
57
58
59
60
61
62
63
64
# File 'lib/mongo/cluster_time.rb', line 56

def <=>(other)
  if self['clusterTime'] && other['clusterTime']
    self['clusterTime'] <=> other['clusterTime']
  elsif !self['clusterTime']
    raise ArgumentError, "Cannot compare cluster times when receiver is missing clusterTime key: #{inspect}"
  else other['clusterTime']
    raise ArgumentError, "Cannot compare cluster times when other is missing clusterTime key: #{other.inspect}"
  end
end

#==(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Compares two ClusterTime instances by comparing their timestamps.

API:

  • private



83
84
85
86
87
88
89
90
91
# File 'lib/mongo/cluster_time.rb', line 83

def ==(other)
  if self['clusterTime'] && other['clusterTime'] &&
    self['clusterTime'] == other['clusterTime']
  then
    true
  else
    false
  end
end

#>(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



72
73
74
# File 'lib/mongo/cluster_time.rb', line 72

def >(other)
  (self <=> other) == 1
end

#>=(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Older Rubies do not implement other logical operators through <=>. TODO revise whether these methods are needed when jira.mongodb.org/browse/RUBY-1622 is implemented.

API:

  • private



69
70
71
# File 'lib/mongo/cluster_time.rb', line 69

def >=(other)
  (self <=> other) != -1
end

#advance(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Advances the cluster time in the receiver to the cluster time in other.

other can be nil or be behind the cluster time in the receiver; in these cases the receiver is returned unmodified. If receiver is advanced, a new ClusterTime object is returned.

Return value is nil or a ClusterTime instance.

API:

  • private



45
46
47
48
49
50
51
52
53
# File 'lib/mongo/cluster_time.rb', line 45

def advance(other)
  if self['clusterTime'] && other['clusterTime'] &&
    other['clusterTime'] > self['clusterTime']
  then
    ClusterTime[other]
  else
    self
  end
end