Merge pull request #3172 from weaveworks/issues/3170-fix-upgrade

weave-kube reclaim: check for upgrade case
This commit is contained in:
Bryan Boreham authored and GitHub committed 2017-11-15 17:59:54 +00:00
commit 4dda216398
4 files changed
+76 -11

No files matched your search

+3 -3
View File
@@ -182,7 +182,7 @@ func main() {
logLevel string
)
flag.BoolVar(&justReclaim, "reclaim", false, "reclaim IP space from dead peers")
flag.BoolVar(&justCheck, "check-peer-exists", false, "return success if peer name is stored in annotation")
flag.BoolVar(&justCheck, "check-peer-new", false, "return success if peer name is not stored in annotation")
flag.StringVar(&peerName, "peer-name", "unknown", "name of this Weave Net peer")
flag.StringVar(&nodeName, "node-name", "unknown", "name of this Kubernetes node")
flag.StringVar(&logLevel, "log-level", "info", "logging level (debug, info, warning, error)")
@@ -204,9 +204,9 @@ func main() {
common.Log.Fatalf("[kube-peers] Could not check peer list: %v", err)
}
if exists {
os.Exit(0)
} else {
os.Exit(9)
} else {
os.Exit(0)
}
}
peers, err := getKubePeers(c)
+14 -7
View File
@@ -95,16 +95,23 @@ if [ -z "$PEERNAME" ]; then
exit 2
fi
# If this peer name is not stored in the list, either we are a
# brand-new peer or we were removed by another peer while temporarily
# absent. In order to avoid a CRDT clash for the latter case, clean up
if ! /home/weave/kube-peers -check-peer-exists -peer-name="$PEERNAME" -log-level=debug ; then
if [ -f ${DB_PREFIX}data.db ]; then
echo "Peer not in list; removing persisted data" >&2
rm -f ${DB_PREFIX}data.db
# Check if peer reclaim is in use - we don't want to delete persisted data on an upgrade
if /usr/bin/weaveutil get-db-flag "$DB_PREFIX" peer-reclaim >/dev/null ; then
# If this peer name is not stored in the list, either we are a
# brand-new peer or we were removed by another peer while temporarily
# absent. In order to avoid a CRDT clash for the latter case, clean up
if /home/weave/kube-peers -check-peer-new -peer-name="$PEERNAME" -log-level=debug ; then
if [ -f ${DB_PREFIX}data.db ]; then
echo "Peer not in list; removing persisted data" >&2
rm -f ${DB_PREFIX}data.db
fi
fi
fi
# flag that peer reclaim is now in use - note we have to do this before
# weaver is running as the DB can only be opened by one process at a time
/usr/bin/weaveutil set-db-flag "$DB_PREFIX" peer-reclaim ok
post_start_actions() {
# Wait for weave process to become responsive
while true ; do
+54
View File
@@ -0,0 +1,54 @@
// Get/set arbitrary flags in the Weave Net persistence DB
package main
import (
"fmt"
"github.com/weaveworks/weave/db"
)
const dbFlagPrefix = "flag:"
func getDBFlag(args []string) error {
if len(args) != 2 {
cmdUsage("check-db-flag", "<db-prefix> <flag-name>")
}
dbPrefix := args[0]
flagName := args[1]
d, err := db.NewBoltDBReadOnly(dbPrefix)
if err != nil {
return err
}
defer d.Close()
var value string
nameFound, err := d.Load(dbFlagPrefix+flagName, &value)
if err != nil {
return err
}
if !nameFound {
return fmt.Errorf("")
}
fmt.Print(value)
return nil
}
func setDBFlag(args []string) error {
if len(args) != 3 {
cmdUsage("set-db-flag", "<db-prefix> <flag-name> <flag-value>")
}
dbPrefix := args[0]
flagName := args[1]
value := args[2]
d, err := db.NewBoltDB(dbPrefix)
if err != nil {
return err
}
defer d.Close()
err = d.Save(dbFlagPrefix+flagName, value)
if err != nil {
return err
}
return nil
}
+5 -1
View File
@@ -50,6 +50,8 @@ func init() {
"swarm-manager-peers": swarmManagerPeers,
"is-docker-plugin-enabled": isDockerPluginEnabled,
"rewrite-etc-hosts": rewriteEtcHosts,
"get-db-flag": getDBFlag,
"set-db-flag": setDBFlag,
}
}
@@ -83,7 +85,9 @@ func main() {
os.Exit(1)
}
if err := cmd(os.Args[2:]); err != nil {
fmt.Fprintln(os.Stderr, err)
if err.Error() != "" {
fmt.Fprintln(os.Stderr, err)
}
os.Exit(1)
}
}