mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00

When using the embed functionality, you can't call the Server.Stop() function until StartEtcd returns, which can block until there is a call to Server.Stop() in error situations. Since we have a catch-22, the ReadyNotify() can be called manually by the user if they wish to wait for the server startup, or in parallel with a timeout if they wish to cancel it after some time. Chzz pointed out that this is also more consistent with the etcdserver.Start() behaviour too. purpleidea pointed out that this is actually more correct too, because we can now register the stop interrupt handler before we block on startup.
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
// Copyright 2016 The etcd Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
/*
|
|
Package embed provides bindings for embedding an etcd server in a program.
|
|
|
|
Launch an embedded etcd server using the configuration defaults:
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/coreos/etcd/embed"
|
|
)
|
|
|
|
func main() {
|
|
cfg := embed.NewConfig()
|
|
cfg.Dir = "default.etcd"
|
|
e, err := embed.StartEtcd(cfg)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer e.Close()
|
|
select {
|
|
case <-e.Server.ReadyNotify():
|
|
log.Printf("Server is ready!")
|
|
case <-time.After(60 * time.Second):
|
|
e.Server.Stop() // trigger a shutdown
|
|
log.Printf("Server took too long to start!")
|
|
}
|
|
log.Fatal(<-e.Err())
|
|
}
|
|
*/
|
|
package embed
|