MCPcopy Create free account
hub / github.com/bytebase/bytebase / Open

Method Open

backend/plugin/db/redis/redis.go:49–157  ·  view source on GitHub ↗

Open opens the redis driver.

(_ context.Context, _ storepb.Engine, config db.ConnectionConfig)

Source from the content-addressed store, hash-verified

47
48// Open opens the redis driver.
49func (d *Driver) Open(_ context.Context, _ storepb.Engine, config db.ConnectionConfig) (db.Driver, error) {
50 tlscfg, err := util.GetTLSConfig(config.DataSource)
51 if err != nil {
52 return nil, errors.Wrap(err, "redis: failed to get tls config")
53 }
54 db := 0
55 if config.ConnectionContext.DatabaseName != "" {
56 database, err := strconv.Atoi(config.ConnectionContext.DatabaseName)
57 if err != nil {
58 return nil, errors.Wrapf(err, "failed to convert database %s to int", config.ConnectionContext.DatabaseName)
59 }
60 db = database
61 }
62 d.databaseName = fmt.Sprintf("%d", db)
63 switch config.DataSource.GetRedisType() {
64 case storepb.DataSource_REDIS_TYPE_UNSPECIFIED, storepb.DataSource_STANDALONE:
65 options := &redis.Options{
66 Addr: fmt.Sprintf("%s:%s", config.DataSource.Host, config.DataSource.Port),
67 Username: config.DataSource.Username,
68 Password: config.Password,
69 TLSConfig: tlscfg,
70 DB: db,
71 }
72 if config.DataSource.GetSshHost() != "" {
73 sshClient, err := util.GetSSHClient(config.DataSource)
74 if err != nil {
75 return nil, err
76 }
77 d.sshClient = sshClient
78
79 options.Dialer = func(_ context.Context, network, addr string) (net.Conn, error) {
80 conn, err := sshClient.Dial(network, addr)
81 if err != nil {
82 return nil, err
83 }
84 return &util.NoDeadlineConn{Conn: conn}, nil
85 }
86 }
87 client := redis.NewClient(options)
88 d.databaseName = fmt.Sprintf("%d", db)
89 d.rdb = client
90 case storepb.DataSource_SENTINEL:
91 sentinelAddrs := make([]string, 0, 1+len(config.DataSource.GetAdditionalAddresses()))
92 sentinelAddrs = append(sentinelAddrs, fmt.Sprintf("%s:%s", config.DataSource.Host, config.DataSource.Port))
93 for _, sentinelAddr := range config.DataSource.GetAdditionalAddresses() {
94 sentinelAddrs = append(sentinelAddrs, fmt.Sprintf("%s:%s", sentinelAddr.Host, sentinelAddr.Port))
95 }
96 options := &redis.FailoverOptions{
97 MasterName: config.DataSource.GetMasterName(),
98 Username: config.DataSource.GetMasterUsername(),
99 Password: config.DataSource.GetMasterPassword(),
100 SentinelUsername: config.DataSource.Username,
101 SentinelPassword: config.Password,
102 SentinelAddrs: sentinelAddrs,
103 DB: db,
104 TLSConfig: tlscfg,
105 }
106 if config.DataSource.GetSshHost() != "" {

Callers

nothing calls this directly

Implementers 15

MockDriverbackend/plugin/advisor/utils_for_tests
Driverbackend/plugin/db/bigquery/bigquery.go
Driverbackend/plugin/db/mongodb/mongodb.go
Driverbackend/plugin/db/trino/trino.go
Driverbackend/plugin/db/redshift/redshift.go
Driverbackend/plugin/db/oracle/oracle.go
Driverbackend/plugin/db/dynamodb/dynamodb.go
Driverbackend/plugin/db/cosmosdb/cosmosdb.go
Driverbackend/plugin/db/spanner/spanner.go
Driverbackend/plugin/db/mssql/mssql.go
Driverbackend/plugin/db/mysql/mysql.go
Driverbackend/plugin/db/pg/pg.go

Calls 11

GetTLSConfigFunction · 0.92
GetSSHClientFunction · 0.92
ErrorfMethod · 0.80
DialMethod · 0.65
StringMethod · 0.65
GetRedisTypeMethod · 0.45
GetSshHostMethod · 0.45
GetMasterNameMethod · 0.45
GetMasterUsernameMethod · 0.45
GetMasterPasswordMethod · 0.45

Tested by

no test coverage detected