This module provides a robust connection pooling implementation for managing reusable resources like database connections. It handles connection lifecycle, validation, and efficient resource allocation with minimal overhead.
import db.mysql
import pool
import time
// Define your connection factory function
fn create_conn() !&pool.ConnectionPoolable {
config := mysql.Config{
host: '127.0.0.1'
port: 3306
username: 'root'
password: '12345678'
dbname: 'mysql'
}
db := mysql.connect(config)!
return &db
}
// Configure pool parameters
config := pool.ConnectionPoolConfig{
max_conns: 50
min_idle_conns: 5
max_lifetime: 2 * time.hour
idle_timeout: 30 * time.minute
get_timeout: 5 * time.second
}
// Create connection pool
mut my_pool := pool.new_connection_pool(create_conn, config)!
// Acquire connection
mut conn := my_pool.get()!
// Convert `conn` to a `mysql.DB` object
mut db := conn as mysql.DB
// Use connection `db`
// ... your operations ...
// db.exec()
// Return connection to pool
my_pool.put(conn)!
// When application exits
my_pool.close()
| Parameter | Default Value | Description |
|---------------------|-----------------------|--------------------------------------|
| max_conns | 20 | Maximum connections in pool |
| min_idle_conns | 5 | Minimum idle connections to maintain |
| max_lifetime | 1 hour | Max connection lifetime |
| idle_timeout | 30 minutes | Idle connection timeout |
| get_timeout | 5 seconds | Connection acquisition timeout |
| retry_base_delay | 1 second | Base delay for connection retries |
| max_retry_delay | 30 seconds | Maximum retry delay |
| max_retry_attempts| 5 | Maximum connection creation attempts |
new_config := pool.ConnectionPoolConfig{
max_conns: 100
min_idle_conns: 10
// ... other parameters ...
}
my_pool.update_config(new_config)!
// After connection maintenance/outage
my_pool.signal_recovery_event()
stats := my_pool.stats()
println("Active connections: ${stats.active_conns}")
println("Idle connections: ${stats.idle_conns}")
println("Waiting clients: ${stats.waiting_clients}")
low: Routine maintenancemedium: Connection acquisition failurehigh: Configuration changesurgent: Connection recovery eventsmin_idle_conns to balance startup time and memorymax_lifetime according to your backend connection limitscreation_errors statistic to detect connection issuesevicted_count to identify connection health problems// ConnectionPoolable connection interface implementation
struct MyConnection {
// Your connection state
}
fn (mut c MyConnection) validate() !bool {
// Connection health check logic
return true
}
fn (mut c MyConnection) close() ! {
// Physical close logic
}
fn (mut c MyConnection) reset() ! {
// Reset connection to initial state
}