Merge pull request #2293 from barakmich/etcd_underscore

migrate: stop deleting _etcd
This commit is contained in:
Barak Michener 2015-02-13 17:10:14 -05:00
commit b59390c9c3

View File

@ -63,6 +63,24 @@ type node struct {
Children map[string]*node // for directory Children map[string]*node // for directory
} }
func deepCopyNode(n *node, parent *node) *node {
out := &node{
Path: n.Path,
CreatedIndex: n.CreatedIndex,
ModifiedIndex: n.ModifiedIndex,
Parent: parent,
ExpireTime: n.ExpireTime,
ACL: n.ACL,
Value: n.Value,
Children: make(map[string]*node),
}
for k, v := range n.Children {
out.Children[k] = deepCopyNode(v, out)
}
return out
}
func replacePathNames(n *node, s1, s2 string) { func replacePathNames(n *node, s1, s2 string) {
n.Path = path.Clean(strings.Replace(n.Path, s1, s2, 1)) n.Path = path.Clean(strings.Replace(n.Path, s1, s2, 1))
for _, c := range n.Children { for _, c := range n.Children {
@ -87,9 +105,23 @@ func pullNodesFromEtcd(n *node) map[string]uint64 {
return out return out
} }
func fixEtcd(n *node) { func fixEtcd(etcdref *node) *node {
n.Path = "/0" n := &node{
machines := n.Children["machines"] Path: "/0",
CreatedIndex: etcdref.CreatedIndex,
ModifiedIndex: etcdref.ModifiedIndex,
ExpireTime: etcdref.ExpireTime,
ACL: etcdref.ACL,
Children: make(map[string]*node),
}
var machines *node
if machineOrig, ok := etcdref.Children["machines"]; ok {
machines = deepCopyNode(machineOrig, n)
}
if machines == nil {
return n
}
n.Children["members"] = &node{ n.Children["members"] = &node{
Path: "/0/members", Path: "/0/members",
CreatedIndex: machines.CreatedIndex, CreatedIndex: machines.CreatedIndex,
@ -97,6 +129,7 @@ func fixEtcd(n *node) {
ExpireTime: machines.ExpireTime, ExpireTime: machines.ExpireTime,
ACL: machines.ACL, ACL: machines.ACL,
Children: make(map[string]*node), Children: make(map[string]*node),
Parent: n,
} }
for name, c := range machines.Children { for name, c := range machines.Children {
q, err := url.ParseQuery(c.Value) q, err := url.ParseQuery(c.Value)
@ -121,29 +154,32 @@ func fixEtcd(n *node) {
ModifiedIndex: c.ModifiedIndex, ModifiedIndex: c.ModifiedIndex,
ExpireTime: c.ExpireTime, ExpireTime: c.ExpireTime,
ACL: c.ACL, ACL: c.ACL,
Children: map[string]*node{ Children: make(map[string]*node),
"attributes": &node{ Parent: n.Children["members"],
}
attrs := &node{
Path: path.Join("/0/members", m.ID.String(), "attributes"), Path: path.Join("/0/members", m.ID.String(), "attributes"),
CreatedIndex: c.CreatedIndex, CreatedIndex: c.CreatedIndex,
ModifiedIndex: c.ModifiedIndex, ModifiedIndex: c.ModifiedIndex,
ExpireTime: c.ExpireTime, ExpireTime: c.ExpireTime,
ACL: c.ACL, ACL: c.ACL,
Value: string(attrBytes), Value: string(attrBytes),
}, Parent: newNode,
"raftAttributes": &node{ }
newNode.Children["attributes"] = attrs
raftAttrs := &node{
Path: path.Join("/0/members", m.ID.String(), "raftAttributes"), Path: path.Join("/0/members", m.ID.String(), "raftAttributes"),
CreatedIndex: c.CreatedIndex, CreatedIndex: c.CreatedIndex,
ModifiedIndex: c.ModifiedIndex, ModifiedIndex: c.ModifiedIndex,
ExpireTime: c.ExpireTime, ExpireTime: c.ExpireTime,
ACL: c.ACL, ACL: c.ACL,
Value: string(raftBytes), Value: string(raftBytes),
}, Parent: newNode,
},
} }
newNode.Children["raftAttributes"] = raftAttrs
n.Children["members"].Children[m.ID.String()] = newNode n.Children["members"].Children[m.ID.String()] = newNode
} }
delete(n.Children, "machines") return n
} }
func mangleRoot(n *node) *node { func mangleRoot(n *node) *node {
@ -157,10 +193,10 @@ func mangleRoot(n *node) *node {
} }
newRoot.Children["1"] = n newRoot.Children["1"] = n
etcd := n.Children["_etcd"] etcd := n.Children["_etcd"]
delete(n.Children, "_etcd")
replacePathNames(n, "/", "/1/") replacePathNames(n, "/", "/1/")
fixEtcd(etcd) newZero := fixEtcd(etcd)
newRoot.Children["0"] = etcd newZero.Parent = newRoot
newRoot.Children["0"] = newZero
return newRoot return newRoot
} }