class Mongo::Session::ServerSession

An object representing the server-side session.

@api private

@since 2.5.0

Constants

DASH_REGEX

Regex for removing dashes from the UUID string.

@since 2.5.0

UUID_PACK

Pack directive for the UUID.

@since 2.5.0

Attributes

last_use[R]

The last time the server session was used.

@since 2.5.0

txn_num[R]

The current transaction number.

When a transaction is active, all operations in that transaction use the same transaction number. If the entire transaction is restarted (for example, by Session#with_transaction, in which case it would also invoke the block provided to it again), each transaction attempt has its own transaction number.

Transaction number is also used outside of transactions for retryable writes. In this case, each write operation has its own transaction number, but retries of a write operation use the same transaction number as the first write (which is how the server knows that subsequent writes are retries and should be ignored if the first write succeeded on the server but was not read by the client, for example).

@since 2.5.0

Public Class Methods

new() click to toggle source

Initialize a ServerSession.

@example

ServerSession.new

@since 2.5.0

# File lib/mongo/session/server_session.rb, line 66
def initialize
  set_last_use!
  session_id
  @txn_num = 0
end

Public Instance Methods

inspect() click to toggle source

Get a formatted string for use in inspection.

@example Inspect the session object.

session.inspect

@return [ String ] The session inspection.

@since 2.5.0

# File lib/mongo/session/server_session.rb, line 114
def inspect
  "#<Mongo::Session::ServerSession:0x#{object_id} session_id=#{session_id} last_use=#{@last_use}>"
end
next_txn_num() click to toggle source

Increment the current transaction number and return the new value.

@return [ Integer ] The updated transaction number.

@since 2.5.0

# File lib/mongo/session/server_session.rb, line 102
def next_txn_num
  @txn_num += 1
end
session_id() click to toggle source

The session id of this server session.

@example Get the session id.

server_session.session_id

@return [ BSON::Document ] The session id.

@since 2.5.0

# File lib/mongo/session/server_session.rb, line 92
def session_id
  @session_id ||= (bytes = [SecureRandom.uuid.gsub(DASH_REGEX, '')].pack(UUID_PACK)
                    BSON::Document.new(id: BSON::Binary.new(bytes, :uuid)))
end
set_last_use!() click to toggle source

Update the last_use attribute of the server session to now.

@example Set the last use field to now.

server_session.set_last_use!

@return [ Time ] The last time the session was used.

@since 2.5.0

# File lib/mongo/session/server_session.rb, line 80
def set_last_use!
  @last_use = Time.now
end