Module: Familia::Connection::Middleware

Included in:
Familia::Connection
Defined in:
lib/familia/connection/middleware.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#enable_database_counterBoolean

Returns Whether Database command counter is enabled.

Returns:

  • (Boolean)

    Whether Database command counter is enabled



12
13
14
# File 'lib/familia/connection/middleware.rb', line 12

def enable_database_counter
  @enable_database_counter
end

#enable_database_loggingBoolean

Returns Whether Database command logging is enabled.

Returns:

  • (Boolean)

    Whether Database command logging is enabled



9
10
11
# File 'lib/familia/connection/middleware.rb', line 9

def enable_database_logging
  @enable_database_logging
end

Instance Method Details

#clear_fiber_connection!Object

Clears the fiber-local connection



32
33
34
35
# File 'lib/familia/connection/middleware.rb', line 32

def clear_fiber_connection!
  Fiber[:familia_connection] = nil
  Familia.trace :FIBER_CONNECTION, nil, 'Cleared' if Familia.debug?
end

#fiber_connection=(connection) ⇒ Object

Sets a versioned fiber-local connection



26
27
28
29
# File 'lib/familia/connection/middleware.rb', line 26

def fiber_connection=(connection)
  Fiber[:familia_connection] = [connection, middleware_version]
  Familia.trace :FIBER_CONNECTION, nil, "Set with version #{middleware_version}"
end

#increment_middleware_version!Object

Increments the middleware version, invalidating all cached connections



20
21
22
23
# File 'lib/familia/connection/middleware.rb', line 20

def increment_middleware_version!
  @middleware_version += 1
  Familia.trace :MIDDLEWARE_VERSION, nil, "Incremented to #{@middleware_version}"
end

#middleware_versionInteger

Returns Current middleware version for cache invalidation.

Returns:

  • (Integer)

    Current middleware version for cache invalidation



15
16
17
# File 'lib/familia/connection/middleware.rb', line 15

def middleware_version
  @middleware_version
end

#reconnect!Object

Note:

If no middleware is enabled, this method safely clears connection state but won't register any middleware until it's enabled.

Reconnects with fresh middleware registration

This method is useful when middleware needs to be applied to connection pools that were created before middleware was enabled. It:

  1. Clears the middleware registration flag to allow re-registration
  2. Re-runs the middleware registration logic
  3. Clears connection chain to force rebuild
  4. Increments middleware version to invalidate cached connections
  5. Clears fiber-local connections

The next connection request will use the updated middleware configuration. Existing connection pools will naturally create new connections with middleware as old connections are cycled out.

Examples:

Enable middleware and reconnect

Familia.enable_database_logging = true
Familia.reconnect!

In test suites

# Test file A creates pools
Familia.connection_provider = ->(uri) { pool.with { |c| c } }

# Test file B enables middleware
Familia.enable_database_logging = true
Familia.reconnect!  # Force new connections with middleware


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/familia/connection/middleware.rb', line 83

def reconnect!
  # Allow middleware to be re-registered
  @middleware_registered = false
  register_middleware_once

  # Clear connection chain to force rebuild
  @connection_chain = nil

  # Increment version to invalidate all cached connections
  increment_middleware_version!

  # Clear fiber-local connections
  clear_fiber_connection!

  Familia.trace :RECONNECT, nil, 'Connection chain cleared, will rebuild with current middleware on next use'
end