Etcd: switch to using a directory prefix

This commit is contained in:
James Shubin
2016-08-06 07:27:38 -04:00
parent ad1e48aa2d
commit 1d0e187838
2 changed files with 14 additions and 19 deletions

32
etcd.go
View File

@@ -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

View File

@@ -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)