Class: Isono::NodeModules::DataStore

Inherits:
Base
  • Object
show all
Includes:
Logger
Defined in:
lib/isono/node_modules/data_store.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#node

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Logger

included, initialize

Methods inherited from Base

#config_section, #initialize, #manifest, #value_object

Constructor Details

This class inherits a constructor from Isono::NodeModules::Base

Instance Attribute Details

#db_writer_threadObject (readonly)

Returns the value of attribute db_writer_thread.



68
69
70
# File 'lib/isono/node_modules/data_store.rb', line 68

def db_writer_thread
  @db_writer_thread
end

Class Method Details

.barrier(&blk) ⇒ Object



45
46
47
48
49
# File 'lib/isono/node_modules/data_store.rb', line 45

def self.barrier(&blk)
  @instance.db_writer_thread.barrier {
    process_single_tx(blk)
  }
end

.create_instance(node) ⇒ Object



35
36
37
# File 'lib/isono/node_modules/data_store.rb', line 35

def self.create_instance(node)
  @instance = self.new(node)
end

.disconnected?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/isono/node_modules/data_store.rb', line 64

def self.disconnected?
  Sequel::DATABASES.first.nil? || Sequel::DATABASES.first.pool.size == 0
end

.pass(&blk) ⇒ Object



39
40
41
42
43
# File 'lib/isono/node_modules/data_store.rb', line 39

def self.pass(&blk)
  @instance.db_writer_thread.pass {
    process_single_tx(blk)
  }
end

.process_single_tx(blk) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/isono/node_modules/data_store.rb', line 51

def self.process_single_tx(blk)
  @instance.establish_connection
  db = Sequel::DATABASES.first
  begin
    db.transaction {
      blk.call
    }
  rescue Sequel::DatabaseError, Sequel::DatabaseConnectionError => e
    db.disconnect
    raise e
  end
end

Instance Method Details

#establish_connectionObject



80
81
82
# File 'lib/isono/node_modules/data_store.rb', line 80

def establish_connection
  config_section.connection_block.call(self)
end