Module: Neo4jBolt::DriverRegistry

Defined in:
lib/neo4j_bolt.rb

Overview

Owns one process-wide upstream driver and its connection pool. Leases let cleanup wait for in-flight sessions without serializing independent queries.

Constant Summary collapse

LEASE_KEY =
:neo4j_bolt_driver_leases

Class Method Summary collapse

Class Method Details

.cleanupObject



260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
# File 'lib/neo4j_bolt.rb', line 260

def cleanup
  if Thread.current.thread_variable_get(LEASE_KEY).to_i.positive?
    raise Error, "cleanup_neo4j cannot run while this thread is using Neo4j"
  end

  driver = nil
  cleanup_started = false
  mutex.synchronize do
    condition.wait(mutex) while @closing
    @closing = true
    cleanup_started = true
    condition.wait(mutex) until leases.zero?
    driver = @driver
    @driver = nil
  end

  driver&.close
ensure
  if cleanup_started
    mutex.synchronize do
      @closing = false
      condition.broadcast
    end
  end
end

.with_driverObject



253
254
255
256
257
258
# File 'lib/neo4j_bolt.rb', line 253

def with_driver
  driver = acquire
  yield driver
ensure
  release if driver
end