les: use single command format for lespay/reply

This commit is contained in:
Zsolt Felfoldi 2019-11-28 00:45:43 +01:00
parent 8c9f0eb7bf
commit 9c7e7176b0
4 changed files with 19 additions and 25 deletions

View file

@ -407,10 +407,8 @@ func (api *PrivateLespayAPI) makeCall(ctx context.Context, remote bool, nodeStr
if api.clientHandler == nil {
return nil, errors.New("client handler not available")
}
cancelFn = api.clientHandler.makeLespayCall(peer, [][]byte{cmd}, func(replies [][]byte) bool {
if len(replies) == 1 {
reply = replies[0]
}
cancelFn = api.clientHandler.makeLespayCall(peer, cmd, func(r []byte) bool {
reply = r
close(delivered)
return reply != nil
})

View file

@ -41,7 +41,7 @@ type clientHandler struct {
downloader *downloader.Downloader
backend *LightEthereum
lespayReplyHandlers map[uint64]func([][]byte) bool
lespayReplyHandlers map[uint64]func([]byte) bool
lespayReplyLock sync.Mutex
closeCh chan struct{}
@ -54,7 +54,7 @@ func newClientHandler(ulcServers []string, ulcFraction int, checkpoint *params.T
checkpoint: checkpoint,
backend: backend,
closeCh: make(chan struct{}),
lespayReplyHandlers: make(map[uint64]func([][]byte) bool),
lespayReplyHandlers: make(map[uint64]func([]byte) bool),
}
if ulcServers != nil {
ulc, err := newULC(ulcServers, ulcFraction)
@ -321,7 +321,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
p.Log().Trace("Received tx status response")
var resp struct {
ReqID uint64
Replies [][]byte
Reply []byte
}
if err := msg.Decode(&resp); err != nil {
fmt.Println("LespayReply decode err", err)
@ -332,7 +332,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
if handler := h.lespayReplyHandlers[resp.ReqID]; handler != nil {
fmt.Println("handler found")
delete(h.lespayReplyHandlers, resp.ReqID)
responseError = !handler(resp.Replies)
responseError = !handler(resp.Reply)
} else {
fmt.Println("handler not found")
responseError = true
@ -358,12 +358,12 @@ func (h *clientHandler) handleMsg(p *peer) error {
return nil
}
func (h *clientHandler) makeLespayCall(p *peer, cmds [][]byte, handler func([][]byte) bool) func() bool {
func (h *clientHandler) makeLespayCall(p *peer, cmd []byte, handler func([]byte) bool) func() bool {
reqID := genReqID()
h.lespayReplyLock.Lock()
h.lespayReplyHandlers[reqID] = handler
h.lespayReplyLock.Unlock()
if p.SendLespay(reqID, cmds) != nil {
if p.SendLespay(reqID, cmd) != nil {
h.lespayReplyLock.Lock()
delete(h.lespayReplyHandlers, reqID)
h.lespayReplyLock.Unlock()

View file

@ -502,15 +502,15 @@ func (p *peer) SendTxs(reqID, cost uint64, txs rlp.RawValue) error {
}
// SendLespay sends a set of commands to the service token sale module
func (p *peer) SendLespay(reqID uint64, cmds [][]byte) error {
p.Log().Debug("Sending batch of lespay commands", "size", len(cmds))
return sendRequest(p.rw, LespayMsg, reqID, 0, cmds)
func (p *peer) SendLespay(reqID uint64, cmd []byte) error {
p.Log().Debug("Sending batch of lespay commands", "size", len(cmd))
return sendRequest(p.rw, LespayMsg, reqID, 0, cmd)
}
// ReplyLespay sends a set of replies to lespay commands
func (p *peer) ReplyLespay(reqID uint64, replies [][]byte) error {
p.Log().Debug("Sending batch of lespay replies", "size", len(replies))
return sendRequest(p.rw, LespayReplyMsg, reqID, 0, replies)
func (p *peer) ReplyLespay(reqID uint64, reply []byte) error {
p.Log().Debug("Sending batch of lespay replies", "size", len(reply))
return sendRequest(p.rw, LespayReplyMsg, reqID, 0, reply)
}
type keyValueEntry struct {

View file

@ -835,21 +835,17 @@ func (h *serverHandler) handleMsg(p *peer, wg *sync.WaitGroup) error {
}
var req struct {
ReqID uint64
Cmds [][]byte
Cmd []byte
}
if err := msg.Decode(&req); err != nil {
clientErrorMeter.Mark(1)
return errResp(ErrDecode, "msg %v: %v", msg, err)
}
replies := h.server.tokenSale.runCommands(req.Cmds, p.ID(), p.freeClientId())
p.ReplyLespay(req.ReqID, replies)
reply := h.server.tokenSale.runCommand(req.Cmd, p.ID(), p.freeClientId())
p.ReplyLespay(req.ReqID, reply)
if metrics.EnabledExpensive {
miscOutLespayPacketsMeter.Mark(1)
var size int64
for _, r := range replies {
size += int64(len(r))
}
miscOutLespayTrafficMeter.Mark(size)
miscOutLespayTrafficMeter.Mark(int64(len(reply)))
}
default: