mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
les: reworked setParams and forClients error handling
This commit is contained in:
parent
97e965ab7f
commit
0f331b1a45
2 changed files with 24 additions and 17 deletions
30
les/api.go
30
les/api.go
|
|
@ -71,8 +71,9 @@ func (api *PrivateLightServerAPI) ServerInfo() map[string]interface{} {
|
||||||
// ClientInfo returns information about clients listed in the ids list or matching the given tags
|
// ClientInfo returns information about clients listed in the ids list or matching the given tags
|
||||||
func (api *PrivateLightServerAPI) ClientInfo(ids []enode.ID) map[enode.ID]map[string]interface{} {
|
func (api *PrivateLightServerAPI) ClientInfo(ids []enode.ID) map[enode.ID]map[string]interface{} {
|
||||||
res := make(map[enode.ID]map[string]interface{})
|
res := make(map[enode.ID]map[string]interface{})
|
||||||
api.server.clientPool.forClients(ids, func(client *clientInfo, id enode.ID) {
|
api.server.clientPool.forClients(ids, func(client *clientInfo, id enode.ID) error {
|
||||||
res[id] = api.clientInfo(client, id)
|
res[id] = api.clientInfo(client, id)
|
||||||
|
return nil
|
||||||
})
|
})
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
@ -91,8 +92,9 @@ func (api *PrivateLightServerAPI) PriorityClientInfo(start, stop enode.ID, maxCo
|
||||||
ids = ids[:maxCount]
|
ids = ids[:maxCount]
|
||||||
}
|
}
|
||||||
if len(ids) != 0 {
|
if len(ids) != 0 {
|
||||||
api.server.clientPool.forClients(ids, func(client *clientInfo, id enode.ID) {
|
api.server.clientPool.forClients(ids, func(client *clientInfo, id enode.ID) error {
|
||||||
res[id] = api.clientInfo(client, id)
|
res[id] = api.clientInfo(client, id)
|
||||||
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
@ -166,8 +168,11 @@ func (api *PrivateLightServerAPI) setParams(params map[string]interface{}, clien
|
||||||
err = fmt.Errorf("invalid client parameter '%s'", name)
|
err = fmt.Errorf("invalid client parameter '%s'", name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
return updateFactors, err
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateBalance updates the balance of a client (either overwrites it or adds to it).
|
// UpdateBalance updates the balance of a client (either overwrites it or adds to it).
|
||||||
|
|
@ -183,21 +188,17 @@ func (api *PrivateLightServerAPI) UpdateBalance(id enode.ID, value int64, meta s
|
||||||
// SetClientParams sets client parameters for all clients listed in the ids list
|
// SetClientParams sets client parameters for all clients listed in the ids list
|
||||||
// or all connected clients if the list is empty
|
// or all connected clients if the list is empty
|
||||||
func (api *PrivateLightServerAPI) SetClientParams(ids []enode.ID, params map[string]interface{}) error {
|
func (api *PrivateLightServerAPI) SetClientParams(ids []enode.ID, params map[string]interface{}) error {
|
||||||
var finalErr error
|
return api.server.clientPool.forClients(ids, func(client *clientInfo, id enode.ID) error {
|
||||||
api.server.clientPool.forClients(ids, func(client *clientInfo, id enode.ID) {
|
|
||||||
if client != nil {
|
if client != nil {
|
||||||
update, err := api.setParams(params, client, nil, nil)
|
update, err := api.setParams(params, client, nil, nil)
|
||||||
if err != nil {
|
|
||||||
finalErr = err
|
|
||||||
}
|
|
||||||
if update {
|
if update {
|
||||||
client.updatePriceFactors()
|
client.updatePriceFactors()
|
||||||
}
|
}
|
||||||
|
return err
|
||||||
} else {
|
} else {
|
||||||
finalErr = fmt.Errorf("client %064x is not connected", id[:])
|
return fmt.Errorf("client %064x is not connected", id[:])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return finalErr
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDefaultParams sets the default parameters applicable to clients connected in the future
|
// SetDefaultParams sets the default parameters applicable to clients connected in the future
|
||||||
|
|
@ -299,12 +300,13 @@ func NewPrivateDebugAPI(server *LesServer) *PrivateDebugAPI {
|
||||||
|
|
||||||
// FreezeClient forces a temporary client freeze which normally happens when the server is overloaded
|
// FreezeClient forces a temporary client freeze which normally happens when the server is overloaded
|
||||||
func (api *PrivateDebugAPI) FreezeClient(id enode.ID) error {
|
func (api *PrivateDebugAPI) FreezeClient(id enode.ID) error {
|
||||||
err := fmt.Errorf("client %064x is not connected", id[:])
|
return api.server.clientPool.forClients([]enode.ID{id}, func(c *clientInfo, id enode.ID) error {
|
||||||
api.server.clientPool.forClients([]enode.ID{id}, func(c *clientInfo, id enode.ID) {
|
if c == nil {
|
||||||
|
return fmt.Errorf("client %064x is not connected", id[:])
|
||||||
|
}
|
||||||
c.peer.freezeClient()
|
c.peer.freezeClient()
|
||||||
err = nil
|
return nil
|
||||||
})
|
})
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrivateLightAPI provides an API to access the LES light server or light client.
|
// PrivateLightAPI provides an API to access the LES light server or light client.
|
||||||
|
|
|
||||||
|
|
@ -343,19 +343,24 @@ func (f *clientPool) disconnect(p clientPeer) {
|
||||||
// forClients iterates through a list of clients, calling the callback for each one.
|
// forClients iterates through a list of clients, calling the callback for each one.
|
||||||
// If a client is not connected then clientInfo is nil. If the specified list is empty
|
// If a client is not connected then clientInfo is nil. If the specified list is empty
|
||||||
// then the callback is called for all connected clients.
|
// then the callback is called for all connected clients.
|
||||||
func (f *clientPool) forClients(ids []enode.ID, callback func(*clientInfo, enode.ID)) {
|
func (f *clientPool) forClients(ids []enode.ID, callback func(*clientInfo, enode.ID) error) error {
|
||||||
f.lock.Lock()
|
f.lock.Lock()
|
||||||
defer f.lock.Unlock()
|
defer f.lock.Unlock()
|
||||||
|
|
||||||
if len(ids) > 0 {
|
if len(ids) > 0 {
|
||||||
for _, id := range ids {
|
for _, id := range ids {
|
||||||
callback(f.connectedMap[id], id)
|
if err := callback(f.connectedMap[id], id); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for _, c := range f.connectedMap {
|
for _, c := range f.connectedMap {
|
||||||
callback(c, c.id)
|
if err := callback(c, c.id); err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// setDefaultFactors sets the default price factors applied to subsequently connected clients
|
// setDefaultFactors sets the default price factors applied to subsequently connected clients
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue