mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-10-21 15:57:24 +08:00
migrated multi host connection pool from godropbox package
removing unneeded dependencies, which involved etcd versions.
This commit is contained in:
97
weed/wdclient/net2/connection_pool.go
Normal file
97
weed/wdclient/net2/connection_pool.go
Normal file
@@ -0,0 +1,97 @@
|
||||
package net2
|
||||
|
||||
import (
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
type ConnectionOptions struct {
|
||||
// The maximum number of connections that can be active per host at any
|
||||
// given time (A non-positive value indicates the number of connections
|
||||
// is unbounded).
|
||||
MaxActiveConnections int32
|
||||
|
||||
// The maximum number of idle connections per host that are kept alive by
|
||||
// the connection pool.
|
||||
MaxIdleConnections uint32
|
||||
|
||||
// The maximum amount of time an idle connection can alive (if specified).
|
||||
MaxIdleTime *time.Duration
|
||||
|
||||
// This limits the number of concurrent Dial calls (there's no limit when
|
||||
// DialMaxConcurrency is non-positive).
|
||||
DialMaxConcurrency int
|
||||
|
||||
// Dial specifies the dial function for creating network connections.
|
||||
// If Dial is nil, net.DialTimeout is used, with timeout set to 1 second.
|
||||
Dial func(network string, address string) (net.Conn, error)
|
||||
|
||||
// This specifies the now time function. When the function is non-nil, the
|
||||
// connection pool will use the specified function instead of time.Now to
|
||||
// generate the current time.
|
||||
NowFunc func() time.Time
|
||||
|
||||
// This specifies the timeout for any Read() operation.
|
||||
// Note that setting this to 0 (i.e. not setting it) will make
|
||||
// read operations block indefinitely.
|
||||
ReadTimeout time.Duration
|
||||
|
||||
// This specifies the timeout for any Write() operation.
|
||||
// Note that setting this to 0 (i.e. not setting it) will make
|
||||
// write operations block indefinitely.
|
||||
WriteTimeout time.Duration
|
||||
}
|
||||
|
||||
func (o ConnectionOptions) getCurrentTime() time.Time {
|
||||
if o.NowFunc == nil {
|
||||
return time.Now()
|
||||
} else {
|
||||
return o.NowFunc()
|
||||
}
|
||||
}
|
||||
|
||||
// A generic interface for managed connection pool. All connection pool
|
||||
// implementations must be threadsafe.
|
||||
type ConnectionPool interface {
|
||||
// This returns the number of active connections that are on loan.
|
||||
NumActive() int32
|
||||
|
||||
// This returns the highest number of active connections for the entire
|
||||
// lifetime of the pool.
|
||||
ActiveHighWaterMark() int32
|
||||
|
||||
// This returns the number of idle connections that are in the pool.
|
||||
NumIdle() int
|
||||
|
||||
// This associates (network, address) to the connection pool; afterwhich,
|
||||
// the user can get connections to (network, address).
|
||||
Register(network string, address string) error
|
||||
|
||||
// This dissociate (network, address) from the connection pool;
|
||||
// afterwhich, the user can no longer get connections to
|
||||
// (network, address).
|
||||
Unregister(network string, address string) error
|
||||
|
||||
// This returns the list of registered (network, address) entries.
|
||||
ListRegistered() []NetworkAddress
|
||||
|
||||
// This gets an active connection from the connection pool. The connection
|
||||
// will remain active until one of the following is called:
|
||||
// 1. conn.ReleaseConnection()
|
||||
// 2. conn.DiscardConnection()
|
||||
// 3. pool.Release(conn)
|
||||
// 4. pool.Discard(conn)
|
||||
Get(network string, address string) (ManagedConn, error)
|
||||
|
||||
// This releases an active connection back to the connection pool.
|
||||
Release(conn ManagedConn) error
|
||||
|
||||
// This discards an active connection from the connection pool.
|
||||
Discard(conn ManagedConn) error
|
||||
|
||||
// Enter the connection pool into lame duck mode. The connection pool
|
||||
// will no longer return connections, and all idle connections are closed
|
||||
// immediately (including active connections that are released back to the
|
||||
// pool afterward).
|
||||
EnterLameDuckMode()
|
||||
}
|
Reference in New Issue
Block a user