Browse Source

lessor: delete keys in deterministic order on revoke

Fixes #6558
Anthony Romano 9 years ago
parent
commit
4f9be94643
1 changed files with 10 additions and 1 deletions
  1. 10 1
      lease/lessor.go

+ 10 - 1
lease/lessor.go

@@ -18,6 +18,7 @@ import (
 	"encoding/binary"
 	"encoding/binary"
 	"errors"
 	"errors"
 	"math"
 	"math"
+	"sort"
 	"sync"
 	"sync"
 	"time"
 	"time"
 
 
@@ -228,8 +229,16 @@ func (le *lessor) Revoke(id LeaseID) error {
 	}
 	}
 
 
 	tid := le.rd.TxnBegin()
 	tid := le.rd.TxnBegin()
+
+	// sort keys so deletes are in same order among all members,
+	// otherwise the backened hashes will be different
+	keys := make([]string, 0, len(l.itemSet))
 	for item := range l.itemSet {
 	for item := range l.itemSet {
-		_, _, err := le.rd.TxnDeleteRange(tid, []byte(item.Key), nil)
+		keys = append(keys, item.Key)
+	}
+	sort.StringSlice(keys).Sort()
+	for _, key := range keys {
+		_, _, err := le.rd.TxnDeleteRange(tid, []byte(key), nil)
 		if err != nil {
 		if err != nil {
 			panic(err)
 			panic(err)
 		}
 		}