implement Scylla database
This commit is contained in:
62
vendor/github.com/hailocab/go-hostpool/host_entry.go
generated
vendored
Normal file
62
vendor/github.com/hailocab/go-hostpool/host_entry.go
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
package hostpool
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// --- hostEntry - this is due to get upgraded
|
||||
|
||||
type hostEntry struct {
|
||||
host string
|
||||
nextRetry time.Time
|
||||
retryCount int16
|
||||
retryDelay time.Duration
|
||||
dead bool
|
||||
epsilonCounts []int64
|
||||
epsilonValues []int64
|
||||
epsilonIndex int
|
||||
epsilonValue float64
|
||||
epsilonPercentage float64
|
||||
}
|
||||
|
||||
func (h *hostEntry) canTryHost(now time.Time) bool {
|
||||
if !h.dead {
|
||||
return true
|
||||
}
|
||||
if h.nextRetry.Before(now) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (h *hostEntry) willRetryHost(maxRetryInterval time.Duration) {
|
||||
h.retryCount += 1
|
||||
newDelay := h.retryDelay * 2
|
||||
if newDelay < maxRetryInterval {
|
||||
h.retryDelay = newDelay
|
||||
} else {
|
||||
h.retryDelay = maxRetryInterval
|
||||
}
|
||||
h.nextRetry = time.Now().Add(h.retryDelay)
|
||||
}
|
||||
|
||||
func (h *hostEntry) getWeightedAverageResponseTime() float64 {
|
||||
var value float64
|
||||
var lastValue float64
|
||||
|
||||
// start at 1 so we start with the oldest entry
|
||||
for i := 1; i <= epsilonBuckets; i += 1 {
|
||||
pos := (h.epsilonIndex + i) % epsilonBuckets
|
||||
bucketCount := h.epsilonCounts[pos]
|
||||
// Changing the line below to what I think it should be to get the weights right
|
||||
weight := float64(i) / float64(epsilonBuckets)
|
||||
if bucketCount > 0 {
|
||||
currentValue := float64(h.epsilonValues[pos]) / float64(bucketCount)
|
||||
value += currentValue * weight
|
||||
lastValue = currentValue
|
||||
} else {
|
||||
value += lastValue * weight
|
||||
}
|
||||
}
|
||||
return value
|
||||
}
|
Reference in New Issue
Block a user