Merge pull request #3172 from weaveworks/issues/3170-fix-upgrade
weave-kube reclaim: check for upgrade case
This commit is contained in:
4 files changed
+76
-11
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user