|
package p2p |
|
|
|
const FederatedID = "federated" |
|
|
|
type FederatedServer struct { |
|
listenAddr, service, p2ptoken string |
|
requestTable map[string]int |
|
loadBalanced bool |
|
} |
|
|
|
func NewFederatedServer(listenAddr, service, p2pToken string, loadBalanced bool) *FederatedServer { |
|
return &FederatedServer{ |
|
listenAddr: listenAddr, |
|
service: service, |
|
p2ptoken: p2pToken, |
|
requestTable: map[string]int{}, |
|
loadBalanced: loadBalanced, |
|
} |
|
} |
|
|
|
func (fs *FederatedServer) SelectLeastUsedServer() string { |
|
|
|
|
|
|
|
var min int |
|
var minKey string |
|
for k, v := range fs.requestTable { |
|
if min == 0 || v < min { |
|
min = v |
|
minKey = k |
|
} |
|
} |
|
return minKey |
|
} |
|
|
|
func (fs *FederatedServer) RecordRequest(nodeID string) { |
|
|
|
fs.requestTable[nodeID]++ |
|
} |
|
|
|
func (fs *FederatedServer) EnsureRecordExist(nodeID string) { |
|
|
|
_, ok := fs.requestTable[nodeID] |
|
if !ok { |
|
fs.requestTable[nodeID] = 0 |
|
} |
|
} |
|
|