mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 00:52:16 +08:00

* Create libpqToPGX feature toggle * Refactor PostgreSQL datasource to support PGX with feature toggle - Updated `ProvideService` to accept feature toggles for enabling PGX. - Modified integration tests to use the new PGX connection method. - Introduced new functions for handling PGX connections and queries. - Enhanced TLS configuration handling for PostgreSQL connections. - Updated existing tests to ensure compatibility with PGX and new connection methods. * Update PostgreSQL datasource to enhance connection pooling and error handling - Increased `MaxOpenConns` to 10 in integration tests for improved connection management. - Refactored connection handling in `newPostgresPGX` to return a connection pool instead of a single connection. - Updated health check error handling to utilize context and feature toggles for better error reporting. - Adjusted `DisposePGX` method to close the connection pool properly. - Enhanced query execution to acquire connections from the pool, ensuring efficient resource usage. * Cleanup * Revert postgres_test unnecessary changes * Rename feature toggle from `libpqToPGX` to `postgresDSUsePGX` * Add null check to dispose method * Fix lint issues * Refactor connection string generation * Address comment in health check file * Rename p to pool * Refactor executeQueryPGX and split into multiple functions * Fix lint issues * The returning error message from PGX is enough no need to separate the error code. * Move TLS handling to newPostgresPGX function * Disable ssl for integration tests * Use MaxIdleConns option * Remove old feature toggle * Rename`generateConnectionConfigPGX` to `generateConnectionStringPGX` * Add back part of the error messages * Don't show max idle connections option when PGX enabled * Address comments from Sriram * Add back Sriram's changes * PostgreSQL: Rework tls manager to use temporary files instead (#105330) * Rework tls manager to use temporary files instead * Lint and test fixes * Update pkg/tsdb/grafana-postgresql-datasource/postgres.go Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> * Update betterer --------- Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> --------- Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package postgres
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/lib/pq"
|
|
"golang.org/x/net/proxy"
|
|
)
|
|
|
|
// we wrap the proxy.Dialer to become dialer that the postgres module accepts
|
|
func newPostgresProxyDialer(dialer proxy.Dialer) pq.Dialer {
|
|
return &postgresProxyDialer{d: dialer}
|
|
}
|
|
|
|
var _ pq.Dialer = (&postgresProxyDialer{})
|
|
|
|
// postgresProxyDialer implements the postgres dialer using a proxy dialer, as their functions differ slightly
|
|
type postgresProxyDialer struct {
|
|
d proxy.Dialer
|
|
}
|
|
|
|
// Dial uses the normal proxy dial function with the updated dialer
|
|
func (p *postgresProxyDialer) Dial(network, addr string) (c net.Conn, err error) {
|
|
return p.d.Dial(network, addr)
|
|
}
|
|
|
|
// DialTimeout uses the normal postgres dial timeout function with the updated dialer
|
|
func (p *postgresProxyDialer) DialTimeout(network, address string, timeout time.Duration) (net.Conn, error) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
|
defer cancel()
|
|
|
|
return p.d.(proxy.ContextDialer).DialContext(ctx, network, address)
|
|
}
|
|
|
|
type PgxDialFunc = func(ctx context.Context, network string, address string) (net.Conn, error)
|
|
|
|
func newPgxDialFunc(dialer proxy.Dialer) PgxDialFunc {
|
|
return func(ctx context.Context, network string, addr string) (net.Conn, error) {
|
|
return dialer.Dial(network, addr)
|
|
}
|
|
}
|