mirror of
https://github.com/HDT3213/godis.git
synced 2025-10-05 00:42:43 +08:00
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package cluster
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"github.com/hdt3213/godis/config"
|
|
"github.com/hdt3213/godis/lib/utils"
|
|
"github.com/hdt3213/godis/redis/client"
|
|
"github.com/jolestar/go-commons-pool/v2"
|
|
)
|
|
|
|
type connectionFactory struct {
|
|
Peer string
|
|
}
|
|
|
|
func (f *connectionFactory) MakeObject(ctx context.Context) (*pool.PooledObject, error) {
|
|
c, err := client.MakeClient(f.Peer)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
c.Start()
|
|
// all peers of cluster should use the same password
|
|
if config.Properties.RequirePass != "" {
|
|
c.Send(utils.ToCmdLine("AUTH", config.Properties.RequirePass))
|
|
}
|
|
return pool.NewPooledObject(c), nil
|
|
}
|
|
|
|
func (f *connectionFactory) DestroyObject(ctx context.Context, object *pool.PooledObject) error {
|
|
c, ok := object.Object.(*client.Client)
|
|
if !ok {
|
|
return errors.New("type mismatch")
|
|
}
|
|
c.Close()
|
|
return nil
|
|
}
|
|
|
|
func (f *connectionFactory) ValidateObject(ctx context.Context, object *pool.PooledObject) bool {
|
|
// do validate
|
|
return true
|
|
}
|
|
|
|
func (f *connectionFactory) ActivateObject(ctx context.Context, object *pool.PooledObject) error {
|
|
// do activate
|
|
return nil
|
|
}
|
|
|
|
func (f *connectionFactory) PassivateObject(ctx context.Context, object *pool.PooledObject) error {
|
|
// do passivate
|
|
return nil
|
|
}
|