Module: SpannerEmulatorToolkit

Defined in:
lib/spanner_emulator_toolkit.rb,
lib/spanner_emulator_toolkit/client.rb,
lib/spanner_emulator_toolkit/version.rb,
lib/spanner_emulator_toolkit/configuration.rb,
lib/spanner_emulator_toolkit/reset_sessions.rb

Defined Under Namespace

Classes: Configuration, Error

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.clientObject

raises error unless database already exists



9
10
11
12
13
# File 'lib/spanner_emulator_toolkit/client.rb', line 9

def client
  configuration.validate!

  thread_local_client
end

.configurationObject



13
14
15
# File 'lib/spanner_emulator_toolkit.rb', line 13

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



17
18
19
# File 'lib/spanner_emulator_toolkit.rb', line 17

def configure
  yield(configuration)
end

.create_databaseObject

no-op if database already exists



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/spanner_emulator_toolkit/client.rb', line 62

def create_database
  return if database_exists?

  create_instance

  logger.debug "creating database: #{configuration.database_id}"
  instance.create_database(
    configuration.database_id,
    statements: configuration.schema_statements
  ).wait_until_done!
end

.create_instanceObject

no-op if instance already exists



45
46
47
48
49
50
51
52
# File 'lib/spanner_emulator_toolkit/client.rb', line 45

def create_instance
  return if instance_exists?

  logger.debug "creating instance: #{configuration.instance_id}"
  project.create_instance(
    configuration.instance_id, name: configuration.instance_id
  ).wait_until_done!
end

.databaseObject



32
33
34
# File 'lib/spanner_emulator_toolkit/client.rb', line 32

def database
  instance&.database(configuration.database_id)
end

.database_exists?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/spanner_emulator_toolkit/client.rb', line 40

def database_exists?
  !instance&.database(configuration.database_id).nil?
end

.database_pathObject



81
82
83
# File 'lib/spanner_emulator_toolkit/client.rb', line 81

def database_path
  client.database.path
end

.drop_databaseObject



74
75
76
77
78
79
# File 'lib/spanner_emulator_toolkit/client.rb', line 74

def drop_database
  return unless database_exists?

  logger.debug "dropping database: #{configuration.database_id}"
  client.database.drop
end

.drop_instanceObject



54
55
56
57
58
59
# File 'lib/spanner_emulator_toolkit/client.rb', line 54

def drop_instance
  return unless instance_exists?

  logger.debug "dropping instance: #{configuration.instance_id}"
  instance.delete
end

.instanceObject

returns nil unless instance already exists



28
29
30
# File 'lib/spanner_emulator_toolkit/client.rb', line 28

def instance
  project.instance(configuration.instance_id)
end

.instance_exists?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/spanner_emulator_toolkit/client.rb', line 36

def instance_exists?
  !instance.nil?
end

.loggerObject



21
22
23
# File 'lib/spanner_emulator_toolkit.rb', line 21

def logger
  configuration.logger
end

.projectObject



21
22
23
24
25
# File 'lib/spanner_emulator_toolkit/client.rb', line 21

def project
  configuration.validate!

  thread_local_project
end

.reset_clientObject

Resets the client instance.



16
17
18
19
# File 'lib/spanner_emulator_toolkit/client.rb', line 16

def reset_client
  @client = nil
  self
end

.reset_sessions!Object

reset all sessions on all databases on all instances for the configured emulator project



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/spanner_emulator_toolkit/reset_sessions.rb', line 8

def reset_sessions!
  configuration.validate!

  logger.debug "resetting sessions"
  project.instances.all do |instance|
    logger.debug "instance: #{instance.path}"
    instance.databases.all do |database|
      logger.debug "  database: #{database.path}"
      each_session_for_database(database) do |session|
        logger.debug "    session: #{session.path}"
        tx = session.create_empty_transaction
        session.rollback tx.transaction_id
      rescue => e
        logger.debug "    error resetting session: #{e.details}"
      end
    end
  end
end