本文整理汇总了Golang中github.com/sorintlab/stolon/pkg/store.NewStore函数的典型用法代码示例。如果您正苦于以下问题:Golang NewStore函数的具体用法?Golang NewStore怎么用?Golang NewStore使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewStore函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: NewClusterChecker
func NewClusterChecker(uid string, cfg config) (*ClusterChecker, error) {
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Config{
Backend: store.Backend(cfg.storeBackend),
Endpoints: cfg.storeEndpoints,
CertFile: cfg.storeCertFile,
KeyFile: cfg.storeKeyFile,
CAFile: cfg.storeCAFile,
SkipTLSVerify: cfg.storeSkipTlsVerify,
})
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
return &ClusterChecker{
uid: uid,
listenAddress: cfg.listenAddress,
port: cfg.port,
stopListening: cfg.stopListening,
e: e,
endPollonProxyCh: make(chan error),
}, nil
}
开发者ID:sorintlab,项目名称:stolon,代码行数:25,代码来源:proxy.go
示例2: spec
func spec(cmd *cobra.Command, args []string) {
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Backend(cfg.storeBackend), cfg.storeEndpoints)
if err != nil {
die("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
cd, _, err := getClusterData(e)
if err != nil {
die("%v", err)
}
if cd.Cluster == nil {
die("no cluster spec available")
}
if cd.Cluster.Spec == nil {
die("no cluster spec available")
}
specj, err := json.MarshalIndent(cd.Cluster.Spec, "", "\t")
if err != nil {
die("failed to marshall spec: %v", err)
}
stdout("%s", specj)
}
开发者ID:sgotti,项目名称:stolon,代码行数:26,代码来源:spec.go
示例3: configReplace
func configReplace(cmd *cobra.Command, args []string) {
if crOpts.file == "" {
die("no config file provided (--file/-f option)")
}
config := []byte{}
var err error
if crOpts.file == "-" {
config, err = ioutil.ReadAll(os.Stdin)
if err != nil {
die("cannot read config file from stdin: %v", err)
}
} else {
config, err = ioutil.ReadFile(crOpts.file)
if err != nil {
die("cannot read provided config file: %v", err)
}
}
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Backend(cfg.storeBackend), cfg.storeEndpoints)
if err != nil {
die("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
if err = replaceConfig(e, config); err != nil {
die("error: %v", err)
}
}
开发者ID:giannisalinetti,项目名称:stolon,代码行数:31,代码来源:config_replace.go
示例4: configGet
func configGet(cmd *cobra.Command, args []string) {
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Backend(cfg.storeBackend), cfg.storeEndpoints)
if err != nil {
die("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
cfg, err := getConfig(e)
if err != nil {
die("error: %v", err)
}
if cfg == nil {
stdout("config is not defined")
os.Exit(0)
}
cfgj, err := json.MarshalIndent(cfg, "", "\t")
if err != nil {
die("failed to marshall config: %v", err)
}
stdout(string(cfgj))
}
开发者ID:giannisalinetti,项目名称:stolon,代码行数:26,代码来源:config_get.go
示例5: NewTestEtcd
func NewTestEtcd(t *testing.T, dir string, a ...string) (*TestStore, error) {
u := uuid.NewV4()
id := fmt.Sprintf("%x", u[:4])
dataDir := filepath.Join(dir, "etcd")
// Hack to find a free tcp port
ln, err := net.Listen("tcp", "localhost:0")
if err != nil {
return nil, err
}
defer ln.Close()
ln2, err := net.Listen("tcp", "localhost:0")
if err != nil {
return nil, err
}
defer ln2.Close()
listenAddress := ln.Addr().(*net.TCPAddr).IP.String()
port := strconv.Itoa(ln.Addr().(*net.TCPAddr).Port)
listenAddress2 := ln2.Addr().(*net.TCPAddr).IP.String()
port2 := strconv.Itoa(ln2.Addr().(*net.TCPAddr).Port)
args := []string{}
args = append(args, fmt.Sprintf("--name=%s", id))
args = append(args, fmt.Sprintf("--data-dir=%s", dataDir))
args = append(args, fmt.Sprintf("--listen-client-urls=http://%s:%s", listenAddress, port))
args = append(args, fmt.Sprintf("--advertise-client-urls=http://%s:%s", listenAddress, port))
args = append(args, fmt.Sprintf("--listen-peer-urls=http://%s:%s", listenAddress2, port2))
args = append(args, fmt.Sprintf("--initial-advertise-peer-urls=http://%s:%s", listenAddress2, port2))
args = append(args, fmt.Sprintf("--initial-cluster=%s=http://%s:%s", id, listenAddress2, port2))
args = append(args, a...)
storeEndpoints := fmt.Sprintf("%s:%s", listenAddress, port)
kvstore, err := store.NewStore(store.ETCD, storeEndpoints)
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
bin := os.Getenv("ETCD_BIN")
if bin == "" {
return nil, fmt.Errorf("missing ETCD_BIN env")
}
te := &TestStore{
t: t,
Process: Process{
t: t,
id: id,
name: "etcd",
bin: bin,
args: args,
},
listenAddress: listenAddress,
port: port,
store: kvstore,
storeBackend: store.ETCD,
}
return te, nil
}
开发者ID:sgotti,项目名称:stolon,代码行数:60,代码来源:utils.go
示例6: TestInitialClusterConfig
func TestInitialClusterConfig(t *testing.T) {
dir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer os.RemoveAll(dir)
tstore, err := NewTestStore(dir)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tstore.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tstore.WaitUp(10 * time.Second); err != nil {
t.Fatalf("error waiting on store up: %v", err)
}
defer tstore.Stop()
clusterName := uuid.NewV4().String()
storeEndpoints := fmt.Sprintf("%s:%s", tstore.listenAddress, tstore.port)
storePath := filepath.Join(common.StoreBasePath, clusterName)
kvstore, err := store.NewStore(tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
tmpFile, err := ioutil.TempFile(dir, "initial-cluster-config.json")
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer tmpFile.Close()
tmpFile.WriteString(`{ "synchronous_replication": true }`)
ts, err := NewTestSentinel(dir, clusterName, tstore.storeBackend, storeEndpoints, fmt.Sprintf("--initial-cluster-config=%s", tmpFile.Name()))
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := ts.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer ts.Stop()
if err := WaitClusterInitialized(e, 30*time.Second); err != nil {
t.Fatal("expected cluster initialized")
}
cv, _, err := e.GetClusterView()
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if !*cv.Config.SynchronousReplication {
t.Fatal("expected cluster config with InitWithMultipleKeepers enabled")
}
}
开发者ID:giannisalinetti,项目名称:stolon,代码行数:59,代码来源:init_test.go
示例7: TestInitialClusterSpec
func TestInitialClusterSpec(t *testing.T) {
t.Parallel()
dir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer os.RemoveAll(dir)
tstore := setupStore(t, dir)
defer tstore.Stop()
clusterName := uuid.NewV4().String()
storeEndpoints := fmt.Sprintf("%s:%s", tstore.listenAddress, tstore.port)
storePath := filepath.Join(common.StoreBasePath, clusterName)
kvstore, err := store.NewStore(tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
initialClusterSpec := &cluster.ClusterSpec{
InitMode: cluster.ClusterInitModeNew,
SleepInterval: cluster.Duration{Duration: 2 * time.Second},
FailInterval: cluster.Duration{Duration: 5 * time.Second},
ConvergenceTimeout: cluster.Duration{Duration: 30 * time.Second},
SynchronousReplication: true,
}
initialClusterSpecFile, err := writeClusterSpec(dir, initialClusterSpec)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
ts, err := NewTestSentinel(t, dir, clusterName, tstore.storeBackend, storeEndpoints, fmt.Sprintf("--initial-cluster-spec=%s", initialClusterSpecFile))
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := ts.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer ts.Stop()
if err := WaitClusterPhase(e, cluster.ClusterPhaseInitializing, 60*time.Second); err != nil {
t.Fatal("expected cluster in initializing phase")
}
cd, _, err := e.GetClusterData()
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if !cd.Cluster.Spec.SynchronousReplication {
t.Fatal("expected cluster spec with SynchronousReplication enabled")
}
}
开发者ID:sgotti,项目名称:stolon,代码行数:57,代码来源:init_test.go
示例8: NewTestEtcd
func NewTestEtcd(t *testing.T, dir string, a ...string) (*TestStore, error) {
u := uuid.NewV4()
uid := fmt.Sprintf("%x", u[:4])
dataDir := filepath.Join(dir, "etcd")
listenAddress, port, err := getFreePort(true, false)
if err != nil {
return nil, err
}
listenAddress2, port2, err := getFreePort(true, false)
if err != nil {
return nil, err
}
args := []string{}
args = append(args, fmt.Sprintf("--name=%s", uid))
args = append(args, fmt.Sprintf("--data-dir=%s", dataDir))
args = append(args, fmt.Sprintf("--listen-client-urls=http://%s:%s", listenAddress, port))
args = append(args, fmt.Sprintf("--advertise-client-urls=http://%s:%s", listenAddress, port))
args = append(args, fmt.Sprintf("--listen-peer-urls=http://%s:%s", listenAddress2, port2))
args = append(args, fmt.Sprintf("--initial-advertise-peer-urls=http://%s:%s", listenAddress2, port2))
args = append(args, fmt.Sprintf("--initial-cluster=%s=http://%s:%s", uid, listenAddress2, port2))
args = append(args, a...)
storeEndpoints := fmt.Sprintf("%s:%s", listenAddress, port)
storeConfig := store.Config{
Backend: store.ETCD,
Endpoints: storeEndpoints,
}
kvstore, err := store.NewStore(storeConfig)
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
bin := os.Getenv("ETCD_BIN")
if bin == "" {
return nil, fmt.Errorf("missing ETCD_BIN env")
}
tstore := &TestStore{
t: t,
Process: Process{
t: t,
uid: uid,
name: "etcd",
bin: bin,
args: args,
},
listenAddress: listenAddress,
port: port,
store: kvstore,
storeBackend: store.ETCD,
}
return tstore, nil
}
开发者ID:sorintlab,项目名称:stolon,代码行数:56,代码来源:utils.go
示例9: testFailoverFailed
// Tests standby elected as new master but fails to become master. Then old
// master comes back and is re-elected as master.
func testFailoverFailed(t *testing.T, syncRepl bool) {
dir, err := ioutil.TempDir("", "stolon")
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer os.RemoveAll(dir)
clusterName := uuid.NewV4().String()
tks, tss, tstore := setupServers(t, clusterName, dir, 2, 1, syncRepl, false)
defer shutdown(tks, tss, tstore)
storeEndpoints := fmt.Sprintf("%s:%s", tstore.listenAddress, tstore.port)
storePath := filepath.Join(common.StoreBasePath, clusterName)
kvstore, err := store.NewStore(tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
master, standbys, err := getRoles(t, tks)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
standby := standbys[0]
if err := populate(t, master); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := write(t, master, 1, 1); err != nil {
t.Fatalf("unexpected err: %v", err)
}
// Stop the keeper process on master, should also stop the database
t.Logf("Stopping current master keeper: %s", master.id)
master.Stop()
// Wait for cluster data containing standy as master
if err := WaitClusterDataMaster(standby.id, e, 30*time.Second); err != nil {
t.Fatalf("expected master %q in cluster view", standby.id)
}
// Stopping standby before reading the new cluster data and promoting
t.Logf("Stopping current stanby keeper: %s", master.id)
standby.Stop()
t.Logf("Starting previous master keeper: %s", master.id)
master.Start()
// Wait for cluster data containing previous master as master
if err := WaitClusterDataMaster(master.id, e, 30*time.Second); err != nil {
t.Fatalf("expected master %q in cluster view", master.id)
}
}
开发者ID:sgotti,项目名称:stolon,代码行数:56,代码来源:ha_test.go
示例10: NewSentinel
func NewSentinel(uid string, cfg *config, stop chan bool, end chan bool) (*Sentinel, error) {
var initialClusterSpec *cluster.ClusterSpec
if cfg.initialClusterSpecFile != "" {
configData, err := ioutil.ReadFile(cfg.initialClusterSpecFile)
if err != nil {
return nil, fmt.Errorf("cannot read provided initial cluster config file: %v", err)
}
if err := json.Unmarshal(configData, &initialClusterSpec); err != nil {
return nil, fmt.Errorf("cannot parse provided initial cluster config: %v", err)
}
log.Debug("initialClusterSpec dump", zap.String("initialClusterSpec", spew.Sdump(initialClusterSpec)))
if err := initialClusterSpec.Validate(); err != nil {
return nil, fmt.Errorf("invalid initial cluster: %v", err)
}
}
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Config{
Backend: store.Backend(cfg.storeBackend),
Endpoints: cfg.storeEndpoints,
CertFile: cfg.storeCertFile,
KeyFile: cfg.storeKeyFile,
CAFile: cfg.storeCAFile,
SkipTLSVerify: cfg.storeSkipTlsVerify,
})
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
candidate := leadership.NewCandidate(kvstore, filepath.Join(storePath, common.SentinelLeaderKey), uid, store.MinTTL)
return &Sentinel{
uid: uid,
cfg: cfg,
e: e,
candidate: candidate,
leader: false,
initialClusterSpec: initialClusterSpec,
stop: stop,
end: end,
UIDFn: common.UID,
// This is just to choose a pseudo random keeper so
// use math.rand (no need for crypto.rand) without an
// initial seed.
RandFn: rand.Intn,
sleepInterval: cluster.DefaultSleepInterval,
requestTimeout: cluster.DefaultRequestTimeout,
}, nil
}
开发者ID:sorintlab,项目名称:stolon,代码行数:52,代码来源:sentinel.go
示例11: NewStore
func NewStore() (*store.StoreManager, error) {
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Config{
Backend: store.Backend(cfg.storeBackend),
Endpoints: cfg.storeEndpoints,
CertFile: cfg.storeCertFile,
KeyFile: cfg.storeKeyFile,
CAFile: cfg.storeCAFile,
SkipTLSVerify: cfg.storeSkipTlsVerify,
})
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
return store.NewStoreManager(kvstore, storePath), nil
}
开发者ID:sorintlab,项目名称:stolon,代码行数:16,代码来源:stolonctl.go
示例12: NewClusterChecker
func NewClusterChecker(id string, cfg config) (*ClusterChecker, error) {
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Backend(cfg.storeBackend), cfg.storeEndpoints)
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
return &ClusterChecker{
id: id,
listenAddress: cfg.listenAddress,
port: cfg.port,
stopListening: cfg.stopListening,
e: e,
endPollonProxyCh: make(chan error),
}, nil
}
开发者ID:giannisalinetti,项目名称:stolon,代码行数:18,代码来源:proxy.go
示例13: getClusters
func getClusters(storeBasePath string) ([]string, error) {
kvstore, err := store.NewStore(store.Backend(cfg.storeBackend), cfg.storeEndpoints)
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
clusters := []string{}
pairs, err := kvstore.List(storeBasePath)
if err != nil {
if err != libkvstore.ErrKeyNotFound {
return nil, err
}
return clusters, nil
}
for _, pair := range pairs {
clusters = append(clusters, filepath.Base(pair.Key))
}
sort.Strings(clusters)
return clusters, nil
}
开发者ID:sgotti,项目名称:stolon,代码行数:20,代码来源:listclusters.go
示例14: configPatch
func configPatch(cmd *cobra.Command, args []string) {
if len(args) > 1 {
die("too many arguments")
}
if cpOpts.file == "" && len(args) < 1 {
die("no patch provided as argument and no patch file provided (--file/-f option)")
}
if cpOpts.file != "" && len(args) == 1 {
die("only one of patch provided as argument or patch file must provided (--file/-f option)")
}
config := []byte{}
if len(args) == 1 {
config = []byte(args[0])
} else {
var err error
if cpOpts.file == "-" {
config, err = ioutil.ReadAll(os.Stdin)
if err != nil {
die("cannot read config file from stdin: %v", err)
}
} else {
config, err = ioutil.ReadFile(cpOpts.file)
if err != nil {
die("cannot read provided config file: %v", err)
}
}
}
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Backend(cfg.storeBackend), cfg.storeEndpoints)
if err != nil {
die("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
if err = patchConfig(e, config); err != nil {
die("failed to patch config: %v", err)
}
}
开发者ID:giannisalinetti,项目名称:stolon,代码行数:40,代码来源:config_patch.go
示例15: NewPostgresKeeper
func NewPostgresKeeper(id string, cfg config, stop chan bool, end chan error) (*PostgresKeeper, error) {
storePath := filepath.Join(common.StoreBasePath, cfg.clusterName)
kvstore, err := store.NewStore(store.Backend(cfg.storeBackend), cfg.storeEndpoints)
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
p := &PostgresKeeper{id: id,
dataDir: cfg.dataDir,
e: e,
listenAddress: cfg.listenAddress,
port: cfg.port,
pgListenAddress: cfg.pgListenAddress,
pgPort: cfg.pgPort,
stop: stop,
end: end,
}
return p, nil
}
开发者ID:giannisalinetti,项目名称:stolon,代码行数:22,代码来源:keeper.go
示例16: TestProxyListening
func TestProxyListening(t *testing.T) {
dir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer os.RemoveAll(dir)
clusterName := uuid.NewV4().String()
tstore, err := NewTestStore(dir)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
storeEndpoints := fmt.Sprintf("%s:%s", tstore.listenAddress, tstore.port)
tp, err := NewTestProxy(dir, clusterName, tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tp.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer tp.Stop()
log.Printf("test proxy start with store down. Should not listen")
// tp should not listen because it cannot talk with store
if err := tp.WaitNotListening(10 * time.Second); err != nil {
t.Fatalf("expecting tp not listening due to failed store communication, but it's listening.")
}
tp.Stop()
if err := tstore.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tstore.WaitUp(10 * time.Second); err != nil {
t.Fatalf("error waiting on store up: %v", err)
}
defer func() {
if tstore.cmd != nil {
tstore.Stop()
}
}()
storePath := filepath.Join(common.StoreBasePath, clusterName)
kvstore, err := store.NewStore(tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
pair, err := e.SetClusterData(cluster.KeepersState{},
&cluster.ClusterView{
Version: 1,
Config: &cluster.NilConfig{
SleepInterval: &cluster.Duration{5 * time.Second},
KeeperFailInterval: &cluster.Duration{10 * time.Second},
},
ProxyConf: &cluster.ProxyConf{
// fake pg address, not relevant
Host: "localhost",
Port: "5432",
},
}, nil)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
// test proxy start with the store up
log.Printf("test proxy start with the store up. Should listen")
if err := tp.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
// tp should listen
if err := tp.WaitListening(10 * time.Second); err != nil {
t.Fatalf("expecting tp listening, but it's not listening.")
}
log.Printf("test proxy error communicating with store. Should stop listening")
// Stop store
tstore.Stop()
if err := tstore.WaitDown(10 * time.Second); err != nil {
t.Fatalf("error waiting on store down: %v", err)
}
// tp should not listen because it cannot talk with the store
if err := tp.WaitNotListening(10 * time.Second); err != nil {
t.Fatalf("expecting tp not listening due to failed store communication, but it's listening.")
}
log.Printf("test proxy communication with store restored. Should start listening")
// Start store
if err := tstore.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tstore.WaitUp(10 * time.Second); err != nil {
t.Fatalf("error waiting on store up: %v", err)
//.........这里部分代码省略.........
开发者ID:giannisalinetti,项目名称:stolon,代码行数:101,代码来源:proxy_test.go
示例17: testInitExisting
func testInitExisting(t *testing.T, merge bool) {
clusterName := uuid.NewV4().String()
dir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer os.RemoveAll(dir)
tstore := setupStore(t, dir)
defer tstore.Stop()
storeEndpoints := fmt.Sprintf("%s:%s", tstore.listenAddress, tstore.port)
storePath := filepath.Join(common.StoreBasePath, clusterName)
kvstore, err := store.NewStore(tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
initialClusterSpec := &cluster.ClusterSpec{
InitMode: cluster.ClusterInitModeNew,
SleepInterval: cluster.Duration{Duration: 2 * time.Second},
FailInterval: cluster.Duration{Duration: 5 * time.Second},
ConvergenceTimeout: cluster.Duration{Duration: 30 * time.Second},
PGParameters: cluster.PGParameters{
"archive_mode": "on",
},
}
initialClusterSpecFile, err := writeClusterSpec(dir, initialClusterSpec)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
ts, err := NewTestSentinel(t, dir, clusterName, tstore.storeBackend, storeEndpoints, fmt.Sprintf("--initial-cluster-spec=%s", initialClusterSpecFile))
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := ts.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
tk, err := NewTestKeeper(t, dir, clusterName, pgSUUsername, pgSUPassword, pgReplUsername, pgReplPassword, tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tk.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := WaitClusterPhase(e, cluster.ClusterPhaseNormal, 60*time.Second); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tk.WaitDBUp(60 * time.Second); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := populate(t, tk); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := write(t, tk, 1, 1); err != nil {
t.Fatalf("unexpected err: %v", err)
}
// Now initialize a new cluster with the existing keeper
initialClusterSpec = &cluster.ClusterSpec{
InitMode: cluster.ClusterInitModeExisting,
SleepInterval: cluster.Duration{Duration: 2 * time.Second},
FailInterval: cluster.Duration{Duration: 5 * time.Second},
ConvergenceTimeout: cluster.Duration{Duration: 30 * time.Second},
MergePgParameters: &merge,
ExistingConfig: &cluster.ExistingConfig{
KeeperUID: tk.id,
},
}
initialClusterSpecFile, err = writeClusterSpec(dir, initialClusterSpec)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
// time.Sleep(1 * time.Hour)
t.Logf("reinitializing cluster")
// Initialize cluster with new spec
err = StolonCtl(clusterName, tstore.storeBackend, storeEndpoints, "init", "-y", "-f", initialClusterSpecFile)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := WaitClusterPhase(e, cluster.ClusterPhaseInitializing, 60*time.Second); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := WaitClusterPhase(e, cluster.ClusterPhaseNormal, 60*time.Second); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tk.WaitDBUp(60 * time.Second); err != nil {
t.Fatalf("unexpected err: %v", err)
}
//.........这里部分代码省略.........
开发者ID:sgotti,项目名称:stolon,代码行数:101,代码来源:init_test.go
示例18: NewTestConsul
func NewTestConsul(dir string, a ...string) (*TestStore, error) {
u := uuid.NewV4()
id := fmt.Sprintf("%x", u[:4])
dataDir := filepath.Join(dir, "consul")
listenAddress, portHTTP, err := getFreeTCPPort()
if err != nil {
return nil, err
}
_, portRPC, err := getFreeTCPPort()
if err != nil {
return nil, err
}
_, portSerfLan, err := getFreeTCPUDPPort()
if err != nil {
return nil, err
}
_, portSerfWan, err := getFreeTCPUDPPort()
if err != nil {
return nil, err
}
_, portServer, err := getFreeTCPPort()
if err != nil {
return nil, err
}
f, err := ioutil.TempFile(dir, "consul.json")
if err != nil {
return nil, err
}
defer f.Close()
f.WriteString(fmt.Sprintf(`{
"ports": {
"dns": -1,
"http": %s,
"rpc": %s,
"serf_lan": %s,
"serf_wan": %s,
"server": %s
}
}`, portHTTP, portRPC, portSerfLan, portSerfWan, portServer))
args := []string{}
args = append(args, "agent")
args = append(args, "-server")
args = append(args, fmt.Sprintf("-config-file=%s", f.Name()))
args = append(args, fmt.Sprintf("-data-dir=%s", dataDir))
args = append(args, fmt.Sprintf("-bind=%s", listenAddress))
args = append(args, fmt.Sprintf("-advertise=%s", listenAddress))
args = append(args, "-bootstrap-expect=1")
args = append(args, a...)
storeEndpoints := fmt.Sprintf("%s:%s", listenAddress, portHTTP)
kvstore, err := store.NewStore(store.CONSUL, storeEndpoints)
if err != nil {
return nil, fmt.Errorf("cannot create store: %v", err)
}
bin := os.Getenv("CONSUL_BIN")
if bin == "" {
return nil, fmt.Errorf("missing CONSUL_BIN env")
}
te := &TestStore{
Process: Process{
id: id,
name: "consul",
bin: bin,
args: args,
},
listenAddress: listenAddress,
port: portHTTP,
store: kvstore,
storeBackend: store.CONSUL,
}
return te, nil
}
开发者ID:giannisalinetti,项目名称:stolon,代码行数:79,代码来源:utils.go
示例19: TestInitUsers
func TestInitUsers(t *testing.T) {
t.Parallel()
dir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer os.RemoveAll(dir)
tstore := setupStore(t, dir)
defer tstore.Stop()
storeEndpoints := fmt.Sprintf("%s:%s", tstore.listenAddress, tstore.port)
// Test pg-repl-username == pg-su-username but password different
clusterName := uuid.NewV4().String()
tk, err := NewTestKeeper(t, dir, clusterName, "user01", "password01", "user01", "password02", tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tk.StartExpect(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer tk.Stop()
if err := tk.cmd.Expect("provided superuser name and replication user name are the same but provided passwords are different"); err != nil {
t.Fatalf("expecting keeper reporting provided superuser name and replication user name are the same but provided passwords are different")
}
// Test pg-repl-username == pg-su-username
clusterName = uuid.NewV4().String()
storePath := filepath.Join(common.StoreBasePath, clusterName)
kvstore, err := store.NewStore(tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
initialClusterSpec := &cluster.ClusterSpec{
InitMode: cluster.ClusterInitModeNew,
SleepInterval: cluster.Duration{Duration: 2 * time.Second},
FailInterval: cluster.Duration{Duration: 5 * time.Second},
ConvergenceTimeout: cluster.Duration{Duration: 30 * time.Second},
}
initialClusterSpecFile, err := writeClusterSpec(dir, initialClusterSpec)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
ts, err := NewTestSentinel(t, dir, clusterName, tstore.storeBackend, storeEndpoints, fmt.Sprintf("--initial-cluster-spec=%s", initialClusterSpecFile))
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := ts.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer ts.Stop()
if err := WaitClusterPhase(e, cluster.ClusterPhaseInitializing, 30*time.Second); err != nil {
t.Fatal("expected cluster in initializing phase")
}
tk2, err := NewTestKeeper(t, dir, clusterName, "user01", "password", "user01", "password", tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tk2.StartExpect(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer tk2.Stop()
if err := tk2.cmd.ExpectTimeout("replication role added to superuser", 60*time.Second); err != nil {
t.Fatalf("expecting keeper reporting replication role added to superuser")
}
// Test pg-repl-username != pg-su-username and pg-su-password defined
clusterName = uuid.NewV4().String()
storePath = filepath.Join(common.StoreBasePath, clusterName)
kvstore, err = store.NewStore(tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("cannot create store: %v", err)
}
e = store.NewStoreManager(kvstore, storePath)
ts2, err := NewTestSentinel(t, dir, clusterName, tstore.storeBackend, storeEndpoints, fmt.Sprintf("--initial-cluster-spec=%s", initialClusterSpecFile))
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := ts2.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer ts2.Stop()
if err := WaitClusterPhase(e, cluster.ClusterPhaseInitializing, 60*time.Second); err != nil {
t.Fatal("expected cluster in initializing phase")
}
tk3, err := NewTestKeeper(t, dir, clusterName, "user01", "password", "user02", "password", tstore.storeBackend, storeEndpoints)
if err != nil {
//.........这里部分代码省略.........
开发者ID:sgotti,项目名称:stolon,代码行数:101,代码来源:init_test.go
示例20: TestServerParameters
func TestServerParameters(t *testing.T) {
t.Parallel()
dir, err := ioutil.TempDir("", "")
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer os.RemoveAll(dir)
tstore, err := NewTestStore(t, dir)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tstore.Start(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tstore.WaitUp(10 * time.Second); err != nil {
t.Fatalf("error waiting on store up: %v", err)
}
storeEndpoints := fmt.Sprintf("%s:%s", tstore.listenAddress, tstore.port)
defer tstore.Stop()
clusterName := uuid.NewV4().String()
storePath := filepath.Join(common.StoreBasePath, clusterName)
kvstore, err := store.NewStore(tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("cannot create store: %v", err)
}
e := store.NewStoreManager(kvstore, storePath)
tk, err := NewTestKeeper(t, dir, clusterName, pgSUUsername, pgSUPassword, pgReplUsername, pgReplPassword, tstore.storeBackend, storeEndpoints)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
cd := &cluster.ClusterData{
FormatVersion: cluster.CurrentCDFormatVersion,
Cluster: &cluster.Cluster{
UID: "01",
Generation: 1,
Spec: &cluster.ClusterSpec{
FailInterval: cluster.Duration{Duration: 10 * time.Second},
},
Status: cluster.ClusterStatus{
CurrentGeneration: 1,
Phase: cluster.ClusterPhaseNormal,
Master: tk.id,
},
},
Keepers: cluster.Keepers{
tk.id: &cluster.Keeper{
UID: tk.id,
Spec: &cluster.KeeperSpec{},
Status: cluster.KeeperStatus{
Healthy: true,
},
},
},
DBs: cluster.DBs{
"01": &cluster.DB{
UID: "01",
Generation: 1,
ChangeTime: time.Time{},
Spec: &cluster.DBSpec{
KeeperUID: tk.id,
InitMode: cluster.DBInitModeNew,
Role: common.RoleMaster,
},
Status: cluster.DBStatus{
Healthy: false,
CurrentGeneration: 1,
},
},
},
}
cd.Cluster.Spec.SetDefaults()
pair, err := e.AtomicPutClusterData(cd, nil)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if err := tk.StartExpect(); err != nil {
t.Fatalf("unexpected err: %v", err)
}
defer tk.Stop()
if err := tk.WaitDBUp(60 * time.Second); err != nil {
t.Fatalf("unexpected err: %v", err)
}
cd.DBs["01"].Spec.PGParameters = map[string]string{
"unexistent_parameter": "value",
}
pair, err = e.AtomicPutClusterData(cd, pair)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
//.........这里部分代码省略.........
开发者ID:sgotti,项目名称:stolon,代码行数:101,代码来源:config_test.go
注:本文中的github.com/sorintlab/stolon/pkg/store.NewStore函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论