Etcd: switch to using a directory prefix
This commit is contained in:
32
etcd.go
32
etcd.go
@@ -48,11 +48,11 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -70,13 +70,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
NS = "_mgmt" // root namespace for mgmt operations
|
NS = "_mgmt" // root namespace for mgmt operations
|
||||||
seedSentinel = "_seed" // you must not name your hostname this
|
seedSentinel = "_seed" // you must not name your hostname this
|
||||||
maxStartServerRetries = 3 // number of times to retry starting the etcd server
|
maxStartServerRetries = 3 // number of times to retry starting the etcd server
|
||||||
selfRemoveTimeout = 3 // give unnominated members a chance to self exit
|
selfRemoveTimeout = 3 // give unnominated members a chance to self exit
|
||||||
exitDelay = 3 // number of sec of inactivity after exit to clean up
|
exitDelay = 3 // number of sec of inactivity after exit to clean up
|
||||||
defaultIdealClusterSize = 5 // default ideal cluster size target for initial seed
|
defaultIdealClusterSize = 5 // default ideal cluster size target for initial seed
|
||||||
tempPrefix = "tmp-mgmt-etcd-" // XXX use some special mgmt tmp dir
|
|
||||||
DefaultClientURL = "127.0.0.1:2379"
|
DefaultClientURL = "127.0.0.1:2379"
|
||||||
DefaultServerURL = "127.0.0.1:2380"
|
DefaultServerURL = "127.0.0.1:2380"
|
||||||
)
|
)
|
||||||
@@ -175,15 +174,16 @@ type EmbdEtcd struct { // EMBeddeD etcd
|
|||||||
txnq chan *TN // txn queue
|
txnq chan *TN // txn queue
|
||||||
|
|
||||||
converger Converger // converged tracking
|
converger Converger // converged tracking
|
||||||
|
prefix string // folder prefix to use for misc storage
|
||||||
|
|
||||||
// etcd server related
|
// etcd server related
|
||||||
serverwg sync.WaitGroup // wait for server to shutdown
|
serverwg sync.WaitGroup // wait for server to shutdown
|
||||||
server *embed.Etcd // technically this contains the server struct
|
server *embed.Etcd // technically this contains the server struct
|
||||||
dataDir string // XXX: incorporate into the "/var" functionality...
|
dataDir string // our data dir, prefix + "etcd"
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEmbdEtcd creates the top level embedded etcd struct client and server obj
|
// NewEmbdEtcd creates the top level embedded etcd struct client and server obj
|
||||||
func NewEmbdEtcd(hostname string, seeds, clientURLs, serverURLs etcdtypes.URLs, noServer bool, idealClusterSize uint16, converger Converger) *EmbdEtcd {
|
func NewEmbdEtcd(hostname string, seeds, clientURLs, serverURLs etcdtypes.URLs, noServer bool, idealClusterSize uint16, converger Converger, prefix string) *EmbdEtcd {
|
||||||
endpoints := make(etcdtypes.URLsMap)
|
endpoints := make(etcdtypes.URLsMap)
|
||||||
if hostname == seedSentinel { // safety
|
if hostname == seedSentinel { // safety
|
||||||
return nil
|
return nil
|
||||||
@@ -212,6 +212,8 @@ func NewEmbdEtcd(hostname string, seeds, clientURLs, serverURLs etcdtypes.URLs,
|
|||||||
|
|
||||||
idealClusterSize: idealClusterSize,
|
idealClusterSize: idealClusterSize,
|
||||||
converger: converger,
|
converger: converger,
|
||||||
|
prefix: prefix,
|
||||||
|
dataDir: path.Join(prefix, "etcd"),
|
||||||
}
|
}
|
||||||
// TODO: add some sort of auto assign method for picking these defaults
|
// TODO: add some sort of auto assign method for picking these defaults
|
||||||
// add a default so that our local client can connect locally if needed
|
// add a default so that our local client can connect locally if needed
|
||||||
@@ -1535,7 +1537,7 @@ func (obj *EmbdEtcd) StartServer(newCluster bool, peerURLsMap etcdtypes.URLsMap)
|
|||||||
var err error
|
var err error
|
||||||
memberName := obj.hostname
|
memberName := obj.hostname
|
||||||
|
|
||||||
obj.dataDir, err = ioutil.TempDir("", tempPrefix)
|
err = os.MkdirAll(obj.dataDir, 0770)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
obj.DestroyServer()
|
obj.DestroyServer()
|
||||||
return err
|
return err
|
||||||
@@ -1594,14 +1596,6 @@ func (obj *EmbdEtcd) DestroyServer() error {
|
|||||||
}
|
}
|
||||||
log.Printf("Etcd: DestroyServer: Done closing...")
|
log.Printf("Etcd: DestroyServer: Done closing...")
|
||||||
|
|
||||||
// XXX have a more global mgmt data dir ("/var")
|
|
||||||
if obj.dataDir != "" {
|
|
||||||
if e := os.RemoveAll(obj.dataDir); e != nil {
|
|
||||||
err = e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Printf("Etcd: DestroyServer: Done removing data...")
|
|
||||||
|
|
||||||
obj.memberId = 0
|
obj.memberId = 0
|
||||||
if obj.server == nil { // skip the .Done() below because we didn't .Add(1) it.
|
if obj.server == nil { // skip the .Done() below because we didn't .Add(1) it.
|
||||||
return err
|
return err
|
||||||
|
|||||||
1
main.go
1
main.go
@@ -157,6 +157,7 @@ func run(c *cli.Context) error {
|
|||||||
c.Bool("no-server"),
|
c.Bool("no-server"),
|
||||||
idealClusterSize,
|
idealClusterSize,
|
||||||
converger,
|
converger,
|
||||||
|
prefix,
|
||||||
)
|
)
|
||||||
if err := EmbdEtcd.Startup(); err != nil { // startup (returns when etcd main loop is running)
|
if err := EmbdEtcd.Startup(); err != nil { // startup (returns when etcd main loop is running)
|
||||||
log.Printf("Main: Etcd: Startup failed: %v", err)
|
log.Printf("Main: Etcd: Startup failed: %v", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user