Skip to content

Commit 0e281c7

Browse files
Merge pull request #5 from GetStream/chore-cluster-names
support for cluster names from the env
2 parents 5c4d5c9 + 0b5d805 commit 0e281c7

File tree

4 files changed

+59
-15
lines changed

4 files changed

+59
-15
lines changed

cmd/main.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ package main
22

33
import (
44
"context"
5-
"fmt"
65
"log"
76
"net/http"
87
"os"
98
"os/signal"
10-
"strings"
119
"syscall"
1210
"time"
1311

@@ -19,29 +17,30 @@ import (
1917
)
2018

2119
func main() {
22-
// Read PD addresses from env: TIKV_PD_ADDRS="127.0.0.1:2379,127.0.0.1:2381"
20+
// Read PD addresses from env: TIKV_PD_ADDRS="127.0.0.1:2379|My Cluster 1,127.0.0.1:2381;server-2.com:2379|Cluster 2"
2321
pdAddrsEnv := os.Getenv("TIKV_PD_ADDRS")
2422
if pdAddrsEnv == "" {
2523
log.Fatal("TIKV_PD_ADDRS env var is required (comma-separated PD addresses)")
2624
}
27-
clusterStrs := strings.Split(strings.Trim(pdAddrsEnv, ";"), ";")
28-
pdAddrs := utils.SplitAndTrim(clusterStrs[0], ",")
29-
25+
clusters := utils.GetClusters(pdAddrsEnv)
26+
if len(clusters) == 0 {
27+
log.Fatal("no clusters found")
28+
}
3029
ctx := context.Background()
3130

3231
// Create TiKV RawKV client for default cluster
33-
cli, err := rawkv.NewClient(ctx, pdAddrs, config.DefaultConfig().Security)
32+
cli, err := rawkv.NewClient(ctx, clusters[0].PDAddrs, config.DefaultConfig().Security)
3433
if err != nil {
3534
log.Fatalf("failed to create TiKV RawKV client: %v", err)
3635
}
3736

3837
log.Printf("Connected to default TiKV cluster ID: %d", cli.ClusterID())
3938

40-
srv := server.New(cli, pdAddrs)
39+
srv := server.New(cli, clusters[0].PDAddrs, clusters[0].Name)
4140
defer srv.Close()
4241

43-
for i, cluster := range clusterStrs[1:] {
44-
srv.AddCluster(ctx, fmt.Sprintf("cluster-%d", time.Now().Unix()+int64(i)), utils.SplitAndTrim(cluster, ","))
42+
for _, cluster := range clusters[1:] {
43+
srv.AddCluster(ctx, cluster.Name, cluster.PDAddrs)
4544
}
4645

4746
mux := http.NewServeMux()

pkg/server/server.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,19 @@ type Server struct {
2525
}
2626

2727
// New creates a new Server instance with an initial connection
28-
func New(client *rawkv.Client, pdAddrs []string) *Server {
28+
func New(client *rawkv.Client, pdAddrs []string, name string) *Server {
2929
defaultConn := &ClusterConnection{
30-
Name: "default",
30+
Name: name,
3131
PDAddrs: pdAddrs,
3232
Client: client,
3333
ClusterID: client.ClusterID(),
3434
}
3535

3636
return &Server{
3737
clusters: map[string]*ClusterConnection{
38-
"default": defaultConn,
38+
name: defaultConn,
3939
},
40-
activeCluster: "default",
40+
activeCluster: name,
4141
defaultPDAddrs: pdAddrs,
4242
}
4343
}

pkg/types/cluster.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package types
2+
3+
type Cluster struct {
4+
Name string `json:"name"`
5+
PDAddrs []string `json:"pd_addrs"`
6+
}

pkg/utils/string.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
package utils
22

3-
import "strings"
3+
import (
4+
"crypto/rand"
5+
"encoding/hex"
6+
"fmt"
7+
"strings"
8+
9+
"github.com/GetStream/tikv-ui/pkg/types"
10+
)
411

512
// SplitAndTrim splits a string by separator and trims whitespace from each part
613
func SplitAndTrim(s, sep string) []string {
@@ -14,3 +21,35 @@ func SplitAndTrim(s, sep string) []string {
1421
}
1522
return out
1623
}
24+
25+
func GetClusters(s string) []types.Cluster {
26+
parts := SplitAndTrim(s, ";")
27+
clusters := make([]types.Cluster, 0, len(parts))
28+
for _, part := range parts {
29+
clusters = append(clusters, GetCluster(part))
30+
}
31+
return clusters
32+
}
33+
34+
func GetCluster(s string) types.Cluster {
35+
parts := SplitAndTrim(s, "|")
36+
if len(parts) < 2 {
37+
hex, _ := RandHex(5)
38+
return types.Cluster{
39+
Name: fmt.Sprintf("cluster-%s", hex),
40+
PDAddrs: SplitAndTrim(parts[0], ","),
41+
}
42+
}
43+
return types.Cluster{
44+
Name: parts[1],
45+
PDAddrs: SplitAndTrim(parts[0], ","),
46+
}
47+
}
48+
49+
func RandHex(n int) (string, error) {
50+
b := make([]byte, n)
51+
if _, err := rand.Read(b); err != nil {
52+
return "", err
53+
}
54+
return hex.EncodeToString(b), nil
55+
}

0 commit comments

Comments
 (0)