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



284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
# File 'lib/neo4j_bolt.rb', line 284

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



277
278
279
280
281
282
# File 'lib/neo4j_bolt.rb', line 277

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