Browse Source

abci: socket server shutdown response handler (#7547)

pull/7549/head
Sam Kleinman 3 years ago
committed by GitHub
parent
commit
692701a551
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 7 deletions
  1. +19
    -7
      abci/server/socket_server.go
  2. +5
    -0
      abci/tests/client_server_test.go

+ 19
- 7
abci/server/socket_server.go View File

@ -259,14 +259,26 @@ func (s *SocketServer) handleResponses(
responses <-chan *types.Response, responses <-chan *types.Response,
) { ) {
bw := bufio.NewWriter(conn) bw := bufio.NewWriter(conn)
for res := range responses {
if err := types.WriteMessage(res, bw); err != nil {
closeConn <- fmt.Errorf("error writing message: %w", err)
return
}
if err := bw.Flush(); err != nil {
closeConn <- fmt.Errorf("error flushing write buffer: %w", err)
for {
select {
case <-ctx.Done():
return return
case res := <-responses:
if err := types.WriteMessage(res, bw); err != nil {
select {
case <-ctx.Done():
case closeConn <- fmt.Errorf("error writing message: %w", err):
}
return
}
if err := bw.Flush(); err != nil {
select {
case <-ctx.Done():
case closeConn <- fmt.Errorf("error flushing write buffer: %w", err):
}
return
}
} }
} }
} }

+ 5
- 0
abci/tests/client_server_test.go View File

@ -4,6 +4,7 @@ import (
"context" "context"
"testing" "testing"
"github.com/fortytw2/leaktest"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
abciclientent "github.com/tendermint/tendermint/abci/client" abciclientent "github.com/tendermint/tendermint/abci/client"
@ -13,6 +14,8 @@ import (
) )
func TestClientServerNoAddrPrefix(t *testing.T) { func TestClientServerNoAddrPrefix(t *testing.T) {
t.Cleanup(leaktest.Check(t))
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
@ -27,9 +30,11 @@ func TestClientServerNoAddrPrefix(t *testing.T) {
assert.NoError(t, err, "expected no error on NewServer") assert.NoError(t, err, "expected no error on NewServer")
err = server.Start(ctx) err = server.Start(ctx)
assert.NoError(t, err, "expected no error on server.Start") assert.NoError(t, err, "expected no error on server.Start")
t.Cleanup(server.Wait)
client, err := abciclientent.NewClient(logger, addr, transport, true) client, err := abciclientent.NewClient(logger, addr, transport, true)
assert.NoError(t, err, "expected no error on NewClient") assert.NoError(t, err, "expected no error on NewClient")
err = client.Start(ctx) err = client.Start(ctx)
assert.NoError(t, err, "expected no error on client.Start") assert.NoError(t, err, "expected no error on client.Start")
t.Cleanup(client.Wait)
} }

Loading…
Cancel
Save