-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsyncdemo.go
139 lines (112 loc) · 3.08 KB
/
syncdemo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// Copyright 2018-2019 The vogo Authors. All rights reserved.
// author: wongoo
package main
import (
"time"
"github.com/vogo/logger"
"github.com/vogo/zkclient"
)
func main() {
client := zkclient.NewClient([]string{"127.0.0.1:2181"})
if !client.ConnAlive() {
logger.Fatalf("failed to connect zookeeper")
}
if err := syncString(client); err != nil {
logger.Fatal(err)
}
if err := syncJson(client); err != nil {
logger.Fatal(err)
}
if err := syncMap(client); err != nil {
logger.Fatal(err)
}
}
func syncString(client *zkclient.Client) error {
var test string
logger.Infof("before set: %s", test)
if _, err := client.SyncWatchString("/test", &test, nil); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("string after sync: %s", test)
if err := client.SetString("/test", "hello world"); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("string after set 1: %s", test)
if err := client.SetString("/test", "hello"); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("string after set 2: %s", test)
if err := client.SetString("/test", ""); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("string after set 3: %s", test)
return nil
}
type user struct {
Name string
Sex int
}
func syncJson(client *zkclient.Client) error {
u := &user{}
path := "/test/user"
if _, err := client.SyncWatchJSON(path, u, nil); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("user after sync: %v", u)
if err := client.SetRawValue(path, []byte(`{"name":"wongoo", "sex":1}`)); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("user after set: %v", u)
if err := client.SetRawValue(path, []byte(`{"name":"jack", "sex":1}`)); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("user after set: %v", u)
if err := client.SetRawValue(path, []byte("{}")); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("user after clean: %v", u)
return nil
}
func syncMap(client *zkclient.Client) error {
path := "/test/users"
users := make(map[string]*user)
if _, err := client.SyncWatchJSONMap(path, users, true, nil); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("users after sync: %v", users)
if err := client.SetMapJSONValue(path, "u1", &user{Name: "wongoo", Sex: 1}); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("users after set u1: %v", users)
if err := client.SetMapJSONValue(path, "u1", &user{Name: "yang", Sex: 1}); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("users after change u1: %v", users)
if err := client.SetMapJSONValue(path, "u2", &user{Name: "jack", Sex: 0}); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("users after set u2: %v", users)
if err := client.Delete(zkclient.PathJoin(path, "u1")); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("users after delete u1: %v", users)
if err := client.Delete(zkclient.PathJoin(path, "u2")); err != nil {
return err
}
time.Sleep(time.Second)
logger.Infof("users after delete u2: %v", users)
return nil
}