Merge pull request #2299 from weaveworks/issues/fix-offset-abuse

Change the type of entry.Free to address.Count
This commit is contained in:
Adam Harrison committed 2016-05-18 12:04:54 +01:00
commit b16de0c71e
3 files changed
+12 -13

No files matched your search

+2 -3
View File
@@ -14,8 +14,7 @@ type entry struct {
Token address.Address // The start of this range
Peer mesh.PeerName // Who owns this range
Version uint32 // Version of this range
Free address.Offset // Number of free IPs in this range
// Note: Free should perhaps be an address.Count, but we can't change the wire protocol
Free address.Count // Number of free IPs in this range
}
func (e *entry) Equal(e2 *entry) bool {
@@ -23,7 +22,7 @@ func (e *entry) Equal(e2 *entry) bool {
e.Version == e2.Version
}
func (e *entry) update(peername mesh.PeerName, free address.Offset) {
func (e *entry) update(peername mesh.PeerName, free address.Count) {
e.Peer = peername
e.Version++
e.Free = free
+9 -9
View File
@@ -109,12 +109,12 @@ func (r *Ring) Range() address.Range {
// Returns the distance between two tokens on this ring, dealing
// with ranges which cross the origin
func (r *Ring) distance(start, end address.Address) address.Offset {
func (r *Ring) distance(start, end address.Address) address.Count {
if end > start {
return address.Offset(end - start)
return address.Count(end - start)
}
return address.Offset((r.End - start) + (end - r.Start))
return address.Count((r.End - start) + (end - r.Start))
}
// GrantRangeToHost modifies the ring such that range [start, end)
@@ -375,12 +375,12 @@ func (r *Ring) ClaimForPeers(peers []mesh.PeerName) {
defer r.updateExportedVariables()
totalSize := r.distance(r.Start, r.End)
share := totalSize/address.Offset(len(peers)) + 1
remainder := totalSize % address.Offset(len(peers))
share := totalSize/address.Count(len(peers)) + 1
remainder := totalSize % address.Count(len(peers))
pos := r.Start
for i, peer := range peers {
if address.Offset(i) == remainder {
if address.Count(i) == remainder {
share--
if share == 0 {
break
@@ -450,11 +450,11 @@ func (r *Ring) ReportFree(freespace map[address.Address]address.Count) {
maxSize := r.distance(entry.Token, next.Token)
common.Assert(free <= address.Count(maxSize))
if address.Count(entries[i].Free) == free {
if entries[i].Free == free {
return
}
entries[i].Free = address.Offset(free)
entries[i].Free = free
entries[i].Version++
}
}
@@ -473,7 +473,7 @@ func (ws weightedPeers) Swap(i, j int) { ws[i], ws[j] = ws[j], ws[i] }
// ChoosePeersToAskForSpace returns all peers we can ask for space in
// the range [start, end), in weighted-random order. Assumes start<end.
func (r *Ring) ChoosePeersToAskForSpace(start, end address.Address) []mesh.PeerName {
totalSpacePerPeer := make(map[mesh.PeerName]address.Offset)
totalSpacePerPeer := make(map[mesh.PeerName]address.Count)
// iterate through tokens
for i, entry := range r.Entries {
+1 -1
View File
@@ -151,7 +151,7 @@ func Length(a, b Address) Count {
return Count(a - b)
}
func Min(a, b Offset) Offset {
func Min(a, b Count) Count {
if a > b {
return b
}