From 9dfdc62eb7eca771c11cce466926265f3cf4a85d Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Mon, 20 Sep 2021 15:18:48 -0400 Subject: [PATCH] proxy: move proxy package to internal (#6953) --- abci/client/client.go | 2 +- abci/client/creators.go | 35 ++ abci/client/doc.go | 4 +- abci/client/grpc_client.go | 2 +- abci/client/local_client.go | 2 +- abci/client/mocks/client.go | 116 +++--- abci/client/socket_client.go | 2 +- abci/client/socket_client_test.go | 8 +- abci/cmd/abci-cli/abci-cli.go | 6 +- abci/example/example_test.go | 4 +- abci/example/kvstore/kvstore_test.go | 14 +- abci/tests/client_server_test.go | 4 +- abci/tests/server/client.go | 10 +- abci/types/client.go | 1 + docs/tutorials/go-built-in.md | 6 +- internal/blocksync/v0/reactor_test.go | 5 +- internal/blocksync/v2/reactor_test.go | 347 +++++++++--------- internal/consensus/byzantine_test.go | 6 +- internal/consensus/common_test.go | 6 +- internal/consensus/reactor_test.go | 6 +- internal/consensus/replay.go | 2 +- internal/consensus/replay_file.go | 2 +- internal/consensus/replay_stubs.go | 7 +- internal/consensus/replay_test.go | 13 +- internal/consensus/wal_generator.go | 5 +- internal/mempool/v0/bench_test.go | 10 +- internal/mempool/v0/cache_test.go | 4 +- internal/mempool/v0/clist_mempool.go | 2 +- internal/mempool/v0/clist_mempool_test.go | 34 +- internal/mempool/v0/reactor_test.go | 4 +- internal/mempool/v1/mempool.go | 2 +- internal/mempool/v1/mempool_test.go | 7 +- {proxy => internal/proxy}/app_conn.go | 49 +-- {proxy => internal/proxy}/app_conn_test.go | 22 +- internal/proxy/client.go | 34 ++ .../proxy}/mocks/app_conn_consensus.go | 12 +- .../proxy}/mocks/app_conn_mempool.go | 20 +- .../proxy}/mocks/app_conn_query.go | 0 .../proxy}/mocks/app_conn_snapshot.go | 0 {proxy => internal/proxy}/multi_app_conn.go | 20 +- .../proxy}/multi_app_conn_test.go | 22 +- {proxy => internal/proxy}/version.go | 0 internal/statesync/reactor.go | 2 +- internal/statesync/reactor_test.go | 4 +- internal/statesync/syncer.go | 2 +- internal/statesync/syncer_test.go | 4 +- node/node.go | 5 +- node/node_test.go | 10 +- node/public.go | 4 +- node/setup.go | 5 +- proxy/client.go | 94 ----- proxy/mocks/client_creator.go | 36 -- rpc/client/mock/abci.go | 2 +- rpc/core/abci.go | 2 +- rpc/core/env.go | 2 +- rpc/grpc/types.pb.go | 7 +- rpc/test/helpers.go | 4 +- state/execution.go | 2 +- state/execution_test.go | 13 +- state/helpers_test.go | 5 +- test/e2e/app/main.go | 4 +- test/fuzz/mempool/v0/checktx.go | 6 +- test/fuzz/mempool/v1/checktx.go | 6 +- 63 files changed, 517 insertions(+), 559 deletions(-) create mode 100644 abci/client/creators.go create mode 100644 abci/types/client.go rename {proxy => internal/proxy}/app_conn.go (80%) rename {proxy => internal/proxy}/app_conn_test.go (88%) create mode 100644 internal/proxy/client.go rename {proxy => internal/proxy}/mocks/app_conn_consensus.go (92%) rename {proxy => internal/proxy}/mocks/app_conn_mempool.go (83%) rename {proxy => internal/proxy}/mocks/app_conn_query.go (100%) rename {proxy => internal/proxy}/mocks/app_conn_snapshot.go (100%) rename {proxy => internal/proxy}/multi_app_conn.go (90%) rename {proxy => internal/proxy}/multi_app_conn_test.go (80%) rename {proxy => internal/proxy}/version.go (100%) delete mode 100644 proxy/client.go delete mode 100644 proxy/mocks/client_creator.go diff --git a/abci/client/client.go b/abci/client/client.go index b6d34e422..93f8b9293 100644 --- a/abci/client/client.go +++ b/abci/client/client.go @@ -1,4 +1,4 @@ -package abcicli +package abciclient import ( "context" diff --git a/abci/client/creators.go b/abci/client/creators.go new file mode 100644 index 000000000..5a71becaf --- /dev/null +++ b/abci/client/creators.go @@ -0,0 +1,35 @@ +package abciclient + +import ( + "fmt" + + "github.com/tendermint/tendermint/abci/types" + tmsync "github.com/tendermint/tendermint/internal/libs/sync" +) + +// Creator creates new ABCI clients. +type Creator func() (Client, error) + +// NewLocalCreator returns a Creator for the given app, +// which will be running locally. +func NewLocalCreator(app types.Application) Creator { + mtx := new(tmsync.RWMutex) + + return func() (Client, error) { + return NewLocalClient(mtx, app), nil + } +} + +// NewRemoteCreator returns a Creator for the given address (e.g. +// "192.168.0.1") and transport (e.g. "tcp"). Set mustConnect to true if you +// want the client to connect before reporting success. +func NewRemoteCreator(addr, transport string, mustConnect bool) Creator { + return func() (Client, error) { + remoteApp, err := NewClient(addr, transport, mustConnect) + if err != nil { + return nil, fmt.Errorf("failed to connect to proxy: %w", err) + } + + return remoteApp, nil + } +} diff --git a/abci/client/doc.go b/abci/client/doc.go index eac40fe11..fd5a17075 100644 --- a/abci/client/doc.go +++ b/abci/client/doc.go @@ -1,4 +1,4 @@ -// Package abcicli provides an ABCI implementation in Go. +// Package abciclient provides an ABCI implementation in Go. // // There are 3 clients available: // 1. socket (unix or TCP) @@ -26,4 +26,4 @@ // // sync: waits for all Async calls to complete (essentially what Flush does in // the socket client) and calls Sync method. -package abcicli +package abciclient diff --git a/abci/client/grpc_client.go b/abci/client/grpc_client.go index 31bd6fae1..2bfa047bd 100644 --- a/abci/client/grpc_client.go +++ b/abci/client/grpc_client.go @@ -1,4 +1,4 @@ -package abcicli +package abciclient import ( "context" diff --git a/abci/client/local_client.go b/abci/client/local_client.go index 69457b5b0..06ff8171c 100644 --- a/abci/client/local_client.go +++ b/abci/client/local_client.go @@ -1,4 +1,4 @@ -package abcicli +package abciclient import ( "context" diff --git a/abci/client/mocks/client.go b/abci/client/mocks/client.go index 6726ce95e..664646e61 100644 --- a/abci/client/mocks/client.go +++ b/abci/client/mocks/client.go @@ -5,7 +5,7 @@ package mocks import ( context "context" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" log "github.com/tendermint/tendermint/libs/log" @@ -20,15 +20,15 @@ type Client struct { } // ApplySnapshotChunkAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) ApplySnapshotChunkAsync(_a0 context.Context, _a1 types.RequestApplySnapshotChunk) (*abcicli.ReqRes, error) { +func (_m *Client) ApplySnapshotChunkAsync(_a0 context.Context, _a1 types.RequestApplySnapshotChunk) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestApplySnapshotChunk) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestApplySnapshotChunk) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -66,15 +66,15 @@ func (_m *Client) ApplySnapshotChunkSync(_a0 context.Context, _a1 types.RequestA } // BeginBlockAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) BeginBlockAsync(_a0 context.Context, _a1 types.RequestBeginBlock) (*abcicli.ReqRes, error) { +func (_m *Client) BeginBlockAsync(_a0 context.Context, _a1 types.RequestBeginBlock) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestBeginBlock) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestBeginBlock) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -112,15 +112,15 @@ func (_m *Client) BeginBlockSync(_a0 context.Context, _a1 types.RequestBeginBloc } // CheckTxAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) CheckTxAsync(_a0 context.Context, _a1 types.RequestCheckTx) (*abcicli.ReqRes, error) { +func (_m *Client) CheckTxAsync(_a0 context.Context, _a1 types.RequestCheckTx) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestCheckTx) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestCheckTx) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -158,15 +158,15 @@ func (_m *Client) CheckTxSync(_a0 context.Context, _a1 types.RequestCheckTx) (*t } // CommitAsync provides a mock function with given fields: _a0 -func (_m *Client) CommitAsync(_a0 context.Context) (*abcicli.ReqRes, error) { +func (_m *Client) CommitAsync(_a0 context.Context) (*abciclient.ReqRes, error) { ret := _m.Called(_a0) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context) *abciclient.ReqRes); ok { r0 = rf(_a0) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -204,15 +204,15 @@ func (_m *Client) CommitSync(_a0 context.Context) (*types.ResponseCommit, error) } // DeliverTxAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) DeliverTxAsync(_a0 context.Context, _a1 types.RequestDeliverTx) (*abcicli.ReqRes, error) { +func (_m *Client) DeliverTxAsync(_a0 context.Context, _a1 types.RequestDeliverTx) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestDeliverTx) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestDeliverTx) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -250,15 +250,15 @@ func (_m *Client) DeliverTxSync(_a0 context.Context, _a1 types.RequestDeliverTx) } // EchoAsync provides a mock function with given fields: ctx, msg -func (_m *Client) EchoAsync(ctx context.Context, msg string) (*abcicli.ReqRes, error) { +func (_m *Client) EchoAsync(ctx context.Context, msg string) (*abciclient.ReqRes, error) { ret := _m.Called(ctx, msg) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, string) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, string) *abciclient.ReqRes); ok { r0 = rf(ctx, msg) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -296,15 +296,15 @@ func (_m *Client) EchoSync(ctx context.Context, msg string) (*types.ResponseEcho } // EndBlockAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) EndBlockAsync(_a0 context.Context, _a1 types.RequestEndBlock) (*abcicli.ReqRes, error) { +func (_m *Client) EndBlockAsync(_a0 context.Context, _a1 types.RequestEndBlock) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestEndBlock) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestEndBlock) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -356,15 +356,15 @@ func (_m *Client) Error() error { } // FlushAsync provides a mock function with given fields: _a0 -func (_m *Client) FlushAsync(_a0 context.Context) (*abcicli.ReqRes, error) { +func (_m *Client) FlushAsync(_a0 context.Context) (*abciclient.ReqRes, error) { ret := _m.Called(_a0) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context) *abciclient.ReqRes); ok { r0 = rf(_a0) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -393,15 +393,15 @@ func (_m *Client) FlushSync(_a0 context.Context) error { } // InfoAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) InfoAsync(_a0 context.Context, _a1 types.RequestInfo) (*abcicli.ReqRes, error) { +func (_m *Client) InfoAsync(_a0 context.Context, _a1 types.RequestInfo) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestInfo) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestInfo) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -439,15 +439,15 @@ func (_m *Client) InfoSync(_a0 context.Context, _a1 types.RequestInfo) (*types.R } // InitChainAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) InitChainAsync(_a0 context.Context, _a1 types.RequestInitChain) (*abcicli.ReqRes, error) { +func (_m *Client) InitChainAsync(_a0 context.Context, _a1 types.RequestInitChain) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestInitChain) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestInitChain) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -499,15 +499,15 @@ func (_m *Client) IsRunning() bool { } // ListSnapshotsAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) ListSnapshotsAsync(_a0 context.Context, _a1 types.RequestListSnapshots) (*abcicli.ReqRes, error) { +func (_m *Client) ListSnapshotsAsync(_a0 context.Context, _a1 types.RequestListSnapshots) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestListSnapshots) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestListSnapshots) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -545,15 +545,15 @@ func (_m *Client) ListSnapshotsSync(_a0 context.Context, _a1 types.RequestListSn } // LoadSnapshotChunkAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) LoadSnapshotChunkAsync(_a0 context.Context, _a1 types.RequestLoadSnapshotChunk) (*abcicli.ReqRes, error) { +func (_m *Client) LoadSnapshotChunkAsync(_a0 context.Context, _a1 types.RequestLoadSnapshotChunk) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestLoadSnapshotChunk) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestLoadSnapshotChunk) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -591,15 +591,15 @@ func (_m *Client) LoadSnapshotChunkSync(_a0 context.Context, _a1 types.RequestLo } // OfferSnapshotAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) OfferSnapshotAsync(_a0 context.Context, _a1 types.RequestOfferSnapshot) (*abcicli.ReqRes, error) { +func (_m *Client) OfferSnapshotAsync(_a0 context.Context, _a1 types.RequestOfferSnapshot) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestOfferSnapshot) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestOfferSnapshot) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -670,15 +670,15 @@ func (_m *Client) OnStop() { } // QueryAsync provides a mock function with given fields: _a0, _a1 -func (_m *Client) QueryAsync(_a0 context.Context, _a1 types.RequestQuery) (*abcicli.ReqRes, error) { +func (_m *Client) QueryAsync(_a0 context.Context, _a1 types.RequestQuery) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestQuery) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestQuery) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -751,7 +751,7 @@ func (_m *Client) SetLogger(_a0 log.Logger) { } // SetResponseCallback provides a mock function with given fields: _a0 -func (_m *Client) SetResponseCallback(_a0 abcicli.Callback) { +func (_m *Client) SetResponseCallback(_a0 abciclient.Callback) { _m.Called(_a0) } diff --git a/abci/client/socket_client.go b/abci/client/socket_client.go index 3fef8540d..d6477062c 100644 --- a/abci/client/socket_client.go +++ b/abci/client/socket_client.go @@ -1,4 +1,4 @@ -package abcicli +package abciclient import ( "bufio" diff --git a/abci/client/socket_client_test.go b/abci/client/socket_client_test.go index d61d729e1..53ba7b672 100644 --- a/abci/client/socket_client_test.go +++ b/abci/client/socket_client_test.go @@ -1,4 +1,4 @@ -package abcicli_test +package abciclient_test import ( "context" @@ -11,7 +11,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/server" "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/service" @@ -100,7 +100,7 @@ func TestHangingSyncCalls(t *testing.T) { } func setupClientServer(t *testing.T, app types.Application) ( - service.Service, abcicli.Client) { + service.Service, abciclient.Client) { // some port between 20k and 30k port := 20000 + rand.Int31()%10000 addr := fmt.Sprintf("localhost:%d", port) @@ -110,7 +110,7 @@ func setupClientServer(t *testing.T, app types.Application) ( err = s.Start() require.NoError(t, err) - c := abcicli.NewSocketClient(addr, true) + c := abciclient.NewSocketClient(addr, true) err = c.Start() require.NoError(t, err) diff --git a/abci/cmd/abci-cli/abci-cli.go b/abci/cmd/abci-cli/abci-cli.go index b9af27e22..9fae6fc05 100644 --- a/abci/cmd/abci-cli/abci-cli.go +++ b/abci/cmd/abci-cli/abci-cli.go @@ -15,7 +15,7 @@ import ( "github.com/tendermint/tendermint/libs/log" tmos "github.com/tendermint/tendermint/libs/os" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/code" "github.com/tendermint/tendermint/abci/example/kvstore" "github.com/tendermint/tendermint/abci/server" @@ -27,7 +27,7 @@ import ( // client is a global variable so it can be reused by the console var ( - client abcicli.Client + client abciclient.Client logger log.Logger ctx = context.Background() @@ -67,7 +67,7 @@ var RootCmd = &cobra.Command{ if client == nil { var err error - client, err = abcicli.NewClient(flagAddress, flagAbci, false) + client, err = abciclient.NewClient(flagAddress, flagAbci, false) if err != nil { return err } diff --git a/abci/example/example_test.go b/abci/example/example_test.go index fdfc5515e..cde8a15b1 100644 --- a/abci/example/example_test.go +++ b/abci/example/example_test.go @@ -17,7 +17,7 @@ import ( "github.com/tendermint/tendermint/libs/log" tmnet "github.com/tendermint/tendermint/libs/net" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/code" "github.com/tendermint/tendermint/abci/example/kvstore" abciserver "github.com/tendermint/tendermint/abci/server" @@ -61,7 +61,7 @@ func testStream(t *testing.T, app types.Application) { }) // Connect to the socket - client := abcicli.NewSocketClient(socket, false) + client := abciclient.NewSocketClient(socket, false) client.SetLogger(log.TestingLogger().With("module", "abci-client")) err = client.Start() require.NoError(t, err) diff --git a/abci/example/kvstore/kvstore_test.go b/abci/example/kvstore/kvstore_test.go index a52312a00..9d026bd87 100644 --- a/abci/example/kvstore/kvstore_test.go +++ b/abci/example/kvstore/kvstore_test.go @@ -12,7 +12,7 @@ import ( "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/service" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/code" abciserver "github.com/tendermint/tendermint/abci/server" "github.com/tendermint/tendermint/abci/types" @@ -229,7 +229,7 @@ func valsEqual(t *testing.T, vals1, vals2 []types.ValidatorUpdate) { } } -func makeSocketClientServer(app types.Application, name string) (abcicli.Client, service.Service, error) { +func makeSocketClientServer(app types.Application, name string) (abciclient.Client, service.Service, error) { // Start the listener socket := fmt.Sprintf("unix://%s.sock", name) logger := log.TestingLogger() @@ -241,7 +241,7 @@ func makeSocketClientServer(app types.Application, name string) (abcicli.Client, } // Connect to the socket - client := abcicli.NewSocketClient(socket, false) + client := abciclient.NewSocketClient(socket, false) client.SetLogger(logger.With("module", "abci-client")) if err := client.Start(); err != nil { if err = server.Stop(); err != nil { @@ -253,7 +253,7 @@ func makeSocketClientServer(app types.Application, name string) (abcicli.Client, return client, server, nil } -func makeGRPCClientServer(app types.Application, name string) (abcicli.Client, service.Service, error) { +func makeGRPCClientServer(app types.Application, name string) (abciclient.Client, service.Service, error) { // Start the listener socket := fmt.Sprintf("unix://%s.sock", name) logger := log.TestingLogger() @@ -265,7 +265,7 @@ func makeGRPCClientServer(app types.Application, name string) (abcicli.Client, s return nil, nil, err } - client := abcicli.NewGRPCClient(socket, true) + client := abciclient.NewGRPCClient(socket, true) client.SetLogger(logger.With("module", "abci-client")) if err := client.Start(); err != nil { if err := server.Stop(); err != nil { @@ -313,7 +313,7 @@ func TestClientServer(t *testing.T) { runClientTests(t, gclient) } -func runClientTests(t *testing.T, client abcicli.Client) { +func runClientTests(t *testing.T, client abciclient.Client) { // run some tests.... key := testKey value := key @@ -325,7 +325,7 @@ func runClientTests(t *testing.T, client abcicli.Client) { testClient(t, client, tx, key, value) } -func testClient(t *testing.T, app abcicli.Client, tx []byte, key, value string) { +func testClient(t *testing.T, app abciclient.Client, tx []byte, key, value string) { ar, err := app.DeliverTxSync(ctx, types.RequestDeliverTx{Tx: tx}) require.NoError(t, err) require.False(t, ar.IsErr(), ar) diff --git a/abci/tests/client_server_test.go b/abci/tests/client_server_test.go index 2ef64e66a..62dc6e07e 100644 --- a/abci/tests/client_server_test.go +++ b/abci/tests/client_server_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/assert" - abciclient "github.com/tendermint/tendermint/abci/client" + abciclientent "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" abciserver "github.com/tendermint/tendermint/abci/server" ) @@ -20,7 +20,7 @@ func TestClientServerNoAddrPrefix(t *testing.T) { err = server.Start() assert.NoError(t, err, "expected no error on server.Start") - client, err := abciclient.NewClient(addr, transport, true) + client, err := abciclientent.NewClient(addr, transport, true) assert.NoError(t, err, "expected no error on NewClient") err = client.Start() assert.NoError(t, err, "expected no error on client.Start") diff --git a/abci/tests/server/client.go b/abci/tests/server/client.go index 10d4a3e58..23adbe80d 100644 --- a/abci/tests/server/client.go +++ b/abci/tests/server/client.go @@ -7,14 +7,14 @@ import ( "fmt" mrand "math/rand" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/types" tmrand "github.com/tendermint/tendermint/libs/rand" ) var ctx = context.Background() -func InitChain(client abcicli.Client) error { +func InitChain(client abciclient.Client) error { total := 10 vals := make([]types.ValidatorUpdate, total) for i := 0; i < total; i++ { @@ -34,7 +34,7 @@ func InitChain(client abcicli.Client) error { return nil } -func Commit(client abcicli.Client, hashExp []byte) error { +func Commit(client abciclient.Client, hashExp []byte) error { res, err := client.CommitSync(ctx) data := res.Data if err != nil { @@ -51,7 +51,7 @@ func Commit(client abcicli.Client, hashExp []byte) error { return nil } -func DeliverTx(client abcicli.Client, txBytes []byte, codeExp uint32, dataExp []byte) error { +func DeliverTx(client abciclient.Client, txBytes []byte, codeExp uint32, dataExp []byte) error { res, _ := client.DeliverTxSync(ctx, types.RequestDeliverTx{Tx: txBytes}) code, data, log := res.Code, res.Data, res.Log if code != codeExp { @@ -70,7 +70,7 @@ func DeliverTx(client abcicli.Client, txBytes []byte, codeExp uint32, dataExp [] return nil } -func CheckTx(client abcicli.Client, txBytes []byte, codeExp uint32, dataExp []byte) error { +func CheckTx(client abciclient.Client, txBytes []byte, codeExp uint32, dataExp []byte) error { res, _ := client.CheckTxSync(ctx, types.RequestCheckTx{Tx: txBytes}) code, data, log := res.Code, res.Data, res.Log if code != codeExp { diff --git a/abci/types/client.go b/abci/types/client.go new file mode 100644 index 000000000..ab1254f4c --- /dev/null +++ b/abci/types/client.go @@ -0,0 +1 @@ +package types diff --git a/docs/tutorials/go-built-in.md b/docs/tutorials/go-built-in.md index e94fe171e..befcef778 100644 --- a/docs/tutorials/go-built-in.md +++ b/docs/tutorials/go-built-in.md @@ -430,7 +430,7 @@ func newTendermint(app abci.Application, configFile string) (*nm.Node, error) { config, pv, nodeKey, - proxy.NewLocalClientCreator(app), + abcicli.NewLocalClientCreator(app), nm.DefaultGenesisDocProviderFunc(config), nm.DefaultDBProvider, nm.DefaultMetricsProvider(config.Instrumentation), @@ -482,7 +482,7 @@ node, err := nm.NewNode( config, pv, nodeKey, - proxy.NewLocalClientCreator(app), + abcicli.NewLocalClientCreator(app), nm.DefaultGenesisDocProviderFunc(config), nm.DefaultDBProvider, nm.DefaultMetricsProvider(config.Instrumentation), @@ -495,7 +495,7 @@ if err != nil { `NewNode` requires a few things including a configuration file, a private validator, a node key and a few others in order to construct the full node. -Note we use `proxy.NewLocalClientCreator` here to create a local client instead +Note we use `abcicli.NewLocalClientCreator` here to create a local client instead of one communicating through a socket or gRPC. [viper](https://github.com/spf13/viper) is being used for reading the config, diff --git a/internal/blocksync/v0/reactor_test.go b/internal/blocksync/v0/reactor_test.go index a1ddc02cd..0d6bc9b18 100644 --- a/internal/blocksync/v0/reactor_test.go +++ b/internal/blocksync/v0/reactor_test.go @@ -7,16 +7,17 @@ import ( "github.com/stretchr/testify/require" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" cons "github.com/tendermint/tendermint/internal/consensus" "github.com/tendermint/tendermint/internal/mempool/mock" "github.com/tendermint/tendermint/internal/p2p" "github.com/tendermint/tendermint/internal/p2p/p2ptest" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/internal/test/factory" "github.com/tendermint/tendermint/libs/log" bcproto "github.com/tendermint/tendermint/proto/tendermint/blocksync" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" sf "github.com/tendermint/tendermint/state/test/factory" "github.com/tendermint/tendermint/store" @@ -97,7 +98,7 @@ func (rts *reactorTestSuite) addNode(t *testing.T, t.Helper() rts.nodes = append(rts.nodes, nodeID) - rts.app[nodeID] = proxy.NewAppConns(proxy.NewLocalClientCreator(&abci.BaseApplication{})) + rts.app[nodeID] = proxy.NewAppConns(abciclient.NewLocalCreator(&abci.BaseApplication{})) require.NoError(t, rts.app[nodeID].Start()) blockDB := dbm.NewMemDB() diff --git a/internal/blocksync/v2/reactor_test.go b/internal/blocksync/v2/reactor_test.go index 4120b3942..3e8b03ebb 100644 --- a/internal/blocksync/v2/reactor_test.go +++ b/internal/blocksync/v2/reactor_test.go @@ -13,6 +13,7 @@ import ( "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/internal/blocksync/v2/internal/behavior" @@ -20,11 +21,11 @@ import ( "github.com/tendermint/tendermint/internal/mempool/mock" "github.com/tendermint/tendermint/internal/p2p" "github.com/tendermint/tendermint/internal/p2p/conn" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/internal/test/factory" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/service" bcproto "github.com/tendermint/tendermint/proto/tendermint/blocksync" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" sf "github.com/tendermint/tendermint/state/test/factory" tmstore "github.com/tendermint/tendermint/store" @@ -163,7 +164,7 @@ func newTestReactor(t *testing.T, p testReactorParams) *BlockchainReactor { appl = &mockBlockApplier{} } else { app := &testApp{} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.NoError(t, err) @@ -187,176 +188,176 @@ func newTestReactor(t *testing.T, p testReactorParams) *BlockchainReactor { // future improvement in [#4482](https://github.com/tendermint/tendermint/issues/4482). // func TestReactorTerminationScenarios(t *testing.T) { -// config := cfg.ResetTestRoot("blockchain_reactor_v2_test") -// defer os.RemoveAll(config.RootDir) -// genDoc, privVals := randGenesisDoc(config.ChainID(), 1, false, 30) -// refStore, _, _ := newReactorStore(genDoc, privVals, 20) - -// params := testReactorParams{ -// logger: log.TestingLogger(), -// genDoc: genDoc, -// privVals: privVals, -// startHeight: 10, -// bufferSize: 100, -// mockA: true, -// } - -// type testEvent struct { -// evType string -// peer string -// height int64 -// } - -// tests := []struct { -// name string -// params testReactorParams -// msgs []testEvent -// }{ -// { -// name: "simple termination on max peer height - one peer", -// params: params, -// msgs: []testEvent{ -// {evType: "AddPeer", peer: "P1"}, -// {evType: "ReceiveS", peer: "P1", height: 13}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P1", height: 11}, -// {evType: "BlockReq"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P1", height: 12}, -// {evType: "Process"}, -// {evType: "ReceiveB", peer: "P1", height: 13}, -// {evType: "Process"}, -// }, -// }, -// { -// name: "simple termination on max peer height - two peers", -// params: params, -// msgs: []testEvent{ -// {evType: "AddPeer", peer: "P1"}, -// {evType: "AddPeer", peer: "P2"}, -// {evType: "ReceiveS", peer: "P1", height: 13}, -// {evType: "ReceiveS", peer: "P2", height: 15}, -// {evType: "BlockReq"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P1", height: 11}, -// {evType: "ReceiveB", peer: "P2", height: 12}, -// {evType: "Process"}, -// {evType: "BlockReq"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P1", height: 13}, -// {evType: "Process"}, -// {evType: "ReceiveB", peer: "P2", height: 14}, -// {evType: "Process"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P2", height: 15}, -// {evType: "Process"}, -// }, -// }, -// { -// name: "termination on max peer height - two peers, noBlock error", -// params: params, -// msgs: []testEvent{ -// {evType: "AddPeer", peer: "P1"}, -// {evType: "AddPeer", peer: "P2"}, -// {evType: "ReceiveS", peer: "P1", height: 13}, -// {evType: "ReceiveS", peer: "P2", height: 15}, -// {evType: "BlockReq"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveNB", peer: "P1", height: 11}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P2", height: 12}, -// {evType: "ReceiveB", peer: "P2", height: 11}, -// {evType: "Process"}, -// {evType: "BlockReq"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P2", height: 13}, -// {evType: "Process"}, -// {evType: "ReceiveB", peer: "P2", height: 14}, -// {evType: "Process"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P2", height: 15}, -// {evType: "Process"}, -// }, -// }, -// { -// name: "termination on max peer height - two peers, remove one peer", -// params: params, -// msgs: []testEvent{ -// {evType: "AddPeer", peer: "P1"}, -// {evType: "AddPeer", peer: "P2"}, -// {evType: "ReceiveS", peer: "P1", height: 13}, -// {evType: "ReceiveS", peer: "P2", height: 15}, -// {evType: "BlockReq"}, -// {evType: "BlockReq"}, -// {evType: "RemovePeer", peer: "P1"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P2", height: 12}, -// {evType: "ReceiveB", peer: "P2", height: 11}, -// {evType: "Process"}, -// {evType: "BlockReq"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P2", height: 13}, -// {evType: "Process"}, -// {evType: "ReceiveB", peer: "P2", height: 14}, -// {evType: "Process"}, -// {evType: "BlockReq"}, -// {evType: "ReceiveB", peer: "P2", height: 15}, -// {evType: "Process"}, -// }, -// }, -// } - -// for _, tt := range tests { -// tt := tt -// t.Run(tt.name, func(t *testing.T) { -// reactor := newTestReactor(params) -// reactor.Start() -// reactor.reporter = behavior.NewMockReporter() -// mockSwitch := &mockSwitchIo{switchedToConsensus: false} -// reactor.io = mockSwitch -// // time for go routines to start -// time.Sleep(time.Millisecond) - -// for _, step := range tt.msgs { -// switch step.evType { -// case "AddPeer": -// reactor.scheduler.send(bcAddNewPeer{peerID: p2p.ID(step.peer)}) -// case "RemovePeer": -// reactor.scheduler.send(bcRemovePeer{peerID: p2p.ID(step.peer)}) -// case "ReceiveS": -// reactor.scheduler.send(bcStatusResponse{ -// peerID: p2p.ID(step.peer), -// height: step.height, -// time: time.Now(), -// }) -// case "ReceiveB": -// reactor.scheduler.send(bcBlockResponse{ -// peerID: p2p.ID(step.peer), -// block: refStore.LoadBlock(step.height), -// size: 10, -// time: time.Now(), -// }) -// case "ReceiveNB": -// reactor.scheduler.send(bcNoBlockResponse{ -// peerID: p2p.ID(step.peer), -// height: step.height, -// time: time.Now(), -// }) -// case "BlockReq": -// reactor.scheduler.send(rTrySchedule{time: time.Now()}) -// case "Process": -// reactor.processor.send(rProcessBlock{}) -// } -// // give time for messages to propagate between routines -// time.Sleep(time.Millisecond) -// } - -// // time for processor to finish and reactor to switch to consensus -// time.Sleep(20 * time.Millisecond) -// assert.True(t, mockSwitch.hasSwitchedToConsensus()) -// reactor.Stop() -// }) -// } +// config := cfg.ResetTestRoot("blockchain_reactor_v2_test") +// defer os.RemoveAll(config.RootDir) +// genDoc, privVals := randGenesisDoc(config.ChainID(), 1, false, 30) +// refStore, _, _ := newReactorStore(genDoc, privVals, 20) + +// params := testReactorParams{ +// logger: log.TestingLogger(), +// genDoc: genDoc, +// privVals: privVals, +// startHeight: 10, +// bufferSize: 100, +// mockA: true, +// } + +// type testEvent struct { +// evType string +// peer string +// height int64 +// } + +// tests := []struct { +// name string +// params testReactorParams +// msgs []testEvent +// }{ +// { +// name: "simple termination on max peer height - one peer", +// params: params, +// msgs: []testEvent{ +// {evType: "AddPeer", peer: "P1"}, +// {evType: "ReceiveS", peer: "P1", height: 13}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P1", height: 11}, +// {evType: "BlockReq"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P1", height: 12}, +// {evType: "Process"}, +// {evType: "ReceiveB", peer: "P1", height: 13}, +// {evType: "Process"}, +// }, +// }, +// { +// name: "simple termination on max peer height - two peers", +// params: params, +// msgs: []testEvent{ +// {evType: "AddPeer", peer: "P1"}, +// {evType: "AddPeer", peer: "P2"}, +// {evType: "ReceiveS", peer: "P1", height: 13}, +// {evType: "ReceiveS", peer: "P2", height: 15}, +// {evType: "BlockReq"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P1", height: 11}, +// {evType: "ReceiveB", peer: "P2", height: 12}, +// {evType: "Process"}, +// {evType: "BlockReq"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P1", height: 13}, +// {evType: "Process"}, +// {evType: "ReceiveB", peer: "P2", height: 14}, +// {evType: "Process"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P2", height: 15}, +// {evType: "Process"}, +// }, +// }, +// { +// name: "termination on max peer height - two peers, noBlock error", +// params: params, +// msgs: []testEvent{ +// {evType: "AddPeer", peer: "P1"}, +// {evType: "AddPeer", peer: "P2"}, +// {evType: "ReceiveS", peer: "P1", height: 13}, +// {evType: "ReceiveS", peer: "P2", height: 15}, +// {evType: "BlockReq"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveNB", peer: "P1", height: 11}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P2", height: 12}, +// {evType: "ReceiveB", peer: "P2", height: 11}, +// {evType: "Process"}, +// {evType: "BlockReq"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P2", height: 13}, +// {evType: "Process"}, +// {evType: "ReceiveB", peer: "P2", height: 14}, +// {evType: "Process"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P2", height: 15}, +// {evType: "Process"}, +// }, +// }, +// { +// name: "termination on max peer height - two peers, remove one peer", +// params: params, +// msgs: []testEvent{ +// {evType: "AddPeer", peer: "P1"}, +// {evType: "AddPeer", peer: "P2"}, +// {evType: "ReceiveS", peer: "P1", height: 13}, +// {evType: "ReceiveS", peer: "P2", height: 15}, +// {evType: "BlockReq"}, +// {evType: "BlockReq"}, +// {evType: "RemovePeer", peer: "P1"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P2", height: 12}, +// {evType: "ReceiveB", peer: "P2", height: 11}, +// {evType: "Process"}, +// {evType: "BlockReq"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P2", height: 13}, +// {evType: "Process"}, +// {evType: "ReceiveB", peer: "P2", height: 14}, +// {evType: "Process"}, +// {evType: "BlockReq"}, +// {evType: "ReceiveB", peer: "P2", height: 15}, +// {evType: "Process"}, +// }, +// }, +// } + +// for _, tt := range tests { +// tt := tt +// t.Run(tt.name, func(t *testing.T) { +// reactor := newTestReactor(params) +// reactor.Start() +// reactor.reporter = behavior.NewMockReporter() +// mockSwitch := &mockSwitchIo{switchedToConsensus: false} +// reactor.io = mockSwitch +// // time for go routines to start +// time.Sleep(time.Millisecond) + +// for _, step := range tt.msgs { +// switch step.evType { +// case "AddPeer": +// reactor.scheduler.send(bcAddNewPeer{peerID: p2p.ID(step.peer)}) +// case "RemovePeer": +// reactor.scheduler.send(bcRemovePeer{peerID: p2p.ID(step.peer)}) +// case "ReceiveS": +// reactor.scheduler.send(bcStatusResponse{ +// peerID: p2p.ID(step.peer), +// height: step.height, +// time: time.Now(), +// }) +// case "ReceiveB": +// reactor.scheduler.send(bcBlockResponse{ +// peerID: p2p.ID(step.peer), +// block: refStore.LoadBlock(step.height), +// size: 10, +// time: time.Now(), +// }) +// case "ReceiveNB": +// reactor.scheduler.send(bcNoBlockResponse{ +// peerID: p2p.ID(step.peer), +// height: step.height, +// time: time.Now(), +// }) +// case "BlockReq": +// reactor.scheduler.send(rTrySchedule{time: time.Now()}) +// case "Process": +// reactor.processor.send(rProcessBlock{}) +// } +// // give time for messages to propagate between routines +// time.Sleep(time.Millisecond) +// } + +// // time for processor to finish and reactor to switch to consensus +// time.Sleep(20 * time.Millisecond) +// assert.True(t, mockSwitch.hasSwitchedToConsensus()) +// reactor.Stop() +// }) +// } // } func TestReactorHelperMode(t *testing.T) { @@ -482,7 +483,7 @@ func newReactorStore( require.Len(t, privVals, 1) app := &testApp{} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() if err != nil { diff --git a/internal/consensus/byzantine_test.go b/internal/consensus/byzantine_test.go index 1c6ec858b..f4a74ea6f 100644 --- a/internal/consensus/byzantine_test.go +++ b/internal/consensus/byzantine_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/internal/evidence" tmsync "github.com/tendermint/tendermint/internal/libs/sync" @@ -62,8 +62,8 @@ func TestByzantinePrevoteEquivocation(t *testing.T) { // one for mempool, one for consensus mtx := new(tmsync.RWMutex) - proxyAppConnMem := abcicli.NewLocalClient(mtx, app) - proxyAppConnCon := abcicli.NewLocalClient(mtx, app) + proxyAppConnMem := abciclient.NewLocalClient(mtx, app) + proxyAppConnCon := abciclient.NewLocalClient(mtx, app) // Make Mempool mempool := mempoolv0.NewCListMempool(thisConfig.Mempool, proxyAppConnMem, 0) diff --git a/internal/consensus/common_test.go b/internal/consensus/common_test.go index 17ba1ce2e..f5c31d02a 100644 --- a/internal/consensus/common_test.go +++ b/internal/consensus/common_test.go @@ -18,7 +18,7 @@ import ( dbm "github.com/tendermint/tm-db" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" @@ -410,8 +410,8 @@ func newStateWithConfigAndBlockStore( ) *State { // one for mempool, one for consensus mtx := new(tmsync.RWMutex) - proxyAppConnMem := abcicli.NewLocalClient(mtx, app) - proxyAppConnCon := abcicli.NewLocalClient(mtx, app) + proxyAppConnMem := abciclient.NewLocalClient(mtx, app) + proxyAppConnCon := abciclient.NewLocalClient(mtx, app) // Make Mempool mempool := mempoolv0.NewCListMempool(thisConfig.Mempool, proxyAppConnMem, 0) diff --git a/internal/consensus/reactor_test.go b/internal/consensus/reactor_test.go index 8c70ca1d5..571b6d832 100644 --- a/internal/consensus/reactor_test.go +++ b/internal/consensus/reactor_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" @@ -347,8 +347,8 @@ func TestReactorWithEvidence(t *testing.T) { // one for mempool, one for consensus mtx := new(tmsync.RWMutex) - proxyAppConnMem := abcicli.NewLocalClient(mtx, app) - proxyAppConnCon := abcicli.NewLocalClient(mtx, app) + proxyAppConnMem := abciclient.NewLocalClient(mtx, app) + proxyAppConnCon := abciclient.NewLocalClient(mtx, app) mempool := mempoolv0.NewCListMempool(thisConfig.Mempool, proxyAppConnMem, 0) mempool.SetLogger(log.TestingLogger().With("module", "mempool")) diff --git a/internal/consensus/replay.go b/internal/consensus/replay.go index 9b22f4631..2660797c8 100644 --- a/internal/consensus/replay.go +++ b/internal/consensus/replay.go @@ -11,8 +11,8 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/merkle" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/types" ) diff --git a/internal/consensus/replay_file.go b/internal/consensus/replay_file.go index 51cb090d7..b59024ae1 100644 --- a/internal/consensus/replay_file.go +++ b/internal/consensus/replay_file.go @@ -13,10 +13,10 @@ import ( dbm "github.com/tendermint/tm-db" cfg "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" tmos "github.com/tendermint/tendermint/libs/os" tmpubsub "github.com/tendermint/tendermint/libs/pubsub" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" diff --git a/internal/consensus/replay_stubs.go b/internal/consensus/replay_stubs.go index c79340a0c..7a3d2c34a 100644 --- a/internal/consensus/replay_stubs.go +++ b/internal/consensus/replay_stubs.go @@ -3,11 +3,12 @@ package consensus import ( "context" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/internal/libs/clist" mempl "github.com/tendermint/tendermint/internal/mempool" + "github.com/tendermint/tendermint/internal/proxy" tmstate "github.com/tendermint/tendermint/proto/tendermint/state" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) @@ -53,11 +54,11 @@ func (emptyMempool) CloseWAL() {} // the real app. func newMockProxyApp(appHash []byte, abciResponses *tmstate.ABCIResponses) proxy.AppConnConsensus { - clientCreator := proxy.NewLocalClientCreator(&mockProxyApp{ + clientCreator := abciclient.NewLocalCreator(&mockProxyApp{ appHash: appHash, abciResponses: abciResponses, }) - cli, _ := clientCreator.NewABCIClient() + cli, _ := clientCreator() err := cli.Start() if err != nil { panic(err) diff --git a/internal/consensus/replay_test.go b/internal/consensus/replay_test.go index 4d1c9c6b2..591796245 100644 --- a/internal/consensus/replay_test.go +++ b/internal/consensus/replay_test.go @@ -19,19 +19,20 @@ import ( "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/crypto" cryptoenc "github.com/tendermint/tendermint/crypto/encoding" mempl "github.com/tendermint/tendermint/internal/mempool" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/internal/test/factory" "github.com/tendermint/tendermint/libs/log" tmrand "github.com/tendermint/tendermint/libs/rand" "github.com/tendermint/tendermint/privval" tmstate "github.com/tendermint/tendermint/proto/tendermint/state" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" sf "github.com/tendermint/tendermint/state/test/factory" "github.com/tendermint/tendermint/store" @@ -740,7 +741,7 @@ func testHandshakeReplay(t *testing.T, sim *simulatorTestSuite, nBlocks int, mod filepath.Join(config.DBDir(), fmt.Sprintf("replay_test_%d_%d_a_r%d", nBlocks, mode, rand.Int()))) t.Cleanup(func() { require.NoError(t, kvstoreApp.Close()) }) - clientCreator2 := proxy.NewLocalClientCreator(kvstoreApp) + clientCreator2 := abciclient.NewLocalCreator(kvstoreApp) if nBlocks > 0 { // run nBlocks against a new client to build up the app state. // use a throwaway tendermint state @@ -890,7 +891,7 @@ func buildTMStateFromChain( kvstoreApp := kvstore.NewPersistentKVStoreApplication( filepath.Join(config.DBDir(), fmt.Sprintf("replay_test_%d_%d_t", nBlocks, mode))) defer kvstoreApp.Close() - clientCreator := proxy.NewLocalClientCreator(kvstoreApp) + clientCreator := abciclient.NewLocalCreator(kvstoreApp) proxyApp := proxy.NewAppConns(clientCreator) if err := proxyApp.Start(); err != nil { @@ -958,7 +959,7 @@ func TestHandshakePanicsIfAppReturnsWrongAppHash(t *testing.T) { // - 0x03 { app := &badApp{numBlocks: 3, allHashesAreWrong: true} - clientCreator := proxy.NewLocalClientCreator(app) + clientCreator := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(clientCreator) err := proxyApp.Start() require.NoError(t, err) @@ -982,7 +983,7 @@ func TestHandshakePanicsIfAppReturnsWrongAppHash(t *testing.T) { // - RANDOM HASH { app := &badApp{numBlocks: 3, onlyLastHashIsWrong: true} - clientCreator := proxy.NewLocalClientCreator(app) + clientCreator := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(clientCreator) err := proxyApp.Start() require.NoError(t, err) @@ -1225,7 +1226,7 @@ func TestHandshakeUpdatesValidators(t *testing.T) { val, _ := factory.RandValidator(true, 10) vals := types.NewValidatorSet([]*types.Validator{val}) app := &initChainApp{vals: types.TM2PB.ValidatorUpdates(vals)} - clientCreator := proxy.NewLocalClientCreator(app) + clientCreator := abciclient.NewLocalCreator(app) config := ResetConfig("handshake_test_") t.Cleanup(func() { _ = os.RemoveAll(config.RootDir) }) diff --git a/internal/consensus/wal_generator.go b/internal/consensus/wal_generator.go index 81c2125ca..4a47c7cc5 100644 --- a/internal/consensus/wal_generator.go +++ b/internal/consensus/wal_generator.go @@ -13,11 +13,12 @@ import ( "github.com/stretchr/testify/require" db "github.com/tendermint/tm-db" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" cfg "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/privval" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" @@ -64,7 +65,7 @@ func WALGenerateNBlocks(t *testing.T, wr io.Writer, numBlocks int) (err error) { blockStore := store.NewBlockStore(blockStoreDB) - proxyApp := proxy.NewAppConns(proxy.NewLocalClientCreator(app)) + proxyApp := proxy.NewAppConns(abciclient.NewLocalCreator(app)) proxyApp.SetLogger(logger.With("module", "proxy")) if err := proxyApp.Start(); err != nil { return fmt.Errorf("failed to start proxy app connections: %w", err) diff --git a/internal/mempool/v0/bench_test.go b/internal/mempool/v0/bench_test.go index 45123c9f6..acfaec283 100644 --- a/internal/mempool/v0/bench_test.go +++ b/internal/mempool/v0/bench_test.go @@ -6,14 +6,14 @@ import ( "sync/atomic" "testing" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" "github.com/tendermint/tendermint/internal/mempool" - "github.com/tendermint/tendermint/proxy" ) func BenchmarkReap(b *testing.B) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() mp.config.Size = 100000 @@ -34,7 +34,7 @@ func BenchmarkReap(b *testing.B) { func BenchmarkCheckTx(b *testing.B) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() @@ -56,7 +56,7 @@ func BenchmarkCheckTx(b *testing.B) { func BenchmarkParallelCheckTx(b *testing.B) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() @@ -81,7 +81,7 @@ func BenchmarkParallelCheckTx(b *testing.B) { func BenchmarkCheckDuplicateTx(b *testing.B) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() diff --git a/internal/mempool/v0/cache_test.go b/internal/mempool/v0/cache_test.go index fbb719231..389c0806c 100644 --- a/internal/mempool/v0/cache_test.go +++ b/internal/mempool/v0/cache_test.go @@ -7,16 +7,16 @@ import ( "github.com/stretchr/testify/require" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/internal/mempool" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) func TestCacheAfterUpdate(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() diff --git a/internal/mempool/v0/clist_mempool.go b/internal/mempool/v0/clist_mempool.go index 167fe0410..9edf067de 100644 --- a/internal/mempool/v0/clist_mempool.go +++ b/internal/mempool/v0/clist_mempool.go @@ -12,9 +12,9 @@ import ( "github.com/tendermint/tendermint/internal/libs/clist" tmsync "github.com/tendermint/tendermint/internal/libs/sync" "github.com/tendermint/tendermint/internal/mempool" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" tmmath "github.com/tendermint/tendermint/libs/math" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) diff --git a/internal/mempool/v0/clist_mempool_test.go b/internal/mempool/v0/clist_mempool_test.go index 6f3e6ebc0..6d023b5f6 100644 --- a/internal/mempool/v0/clist_mempool_test.go +++ b/internal/mempool/v0/clist_mempool_test.go @@ -15,6 +15,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" abciserver "github.com/tendermint/tendermint/abci/server" abci "github.com/tendermint/tendermint/abci/types" @@ -23,7 +24,6 @@ import ( "github.com/tendermint/tendermint/libs/log" tmrand "github.com/tendermint/tendermint/libs/rand" "github.com/tendermint/tendermint/libs/service" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) @@ -31,12 +31,12 @@ import ( // test. type cleanupFunc func() -func newMempoolWithApp(cc proxy.ClientCreator) (*CListMempool, cleanupFunc) { +func newMempoolWithApp(cc abciclient.Creator) (*CListMempool, cleanupFunc) { return newMempoolWithAppAndConfig(cc, cfg.ResetTestRoot("mempool_test")) } -func newMempoolWithAppAndConfig(cc proxy.ClientCreator, config *cfg.Config) (*CListMempool, cleanupFunc) { - appConnMem, _ := cc.NewABCIClient() +func newMempoolWithAppAndConfig(cc abciclient.Creator, config *cfg.Config) (*CListMempool, cleanupFunc) { + appConnMem, _ := cc() appConnMem.SetLogger(log.TestingLogger().With("module", "abci-client", "connection", "mempool")) err := appConnMem.Start() if err != nil { @@ -92,7 +92,7 @@ func checkTxs(t *testing.T, mp mempool.Mempool, count int, peerID uint16) types. func TestReapMaxBytesMaxGas(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() @@ -141,7 +141,7 @@ func TestReapMaxBytesMaxGas(t *testing.T) { func TestMempoolFilters(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() emptyTxArr := []types.Tx{[]byte{}} @@ -180,7 +180,7 @@ func TestMempoolFilters(t *testing.T) { func TestMempoolUpdate(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() @@ -216,7 +216,7 @@ func TestMempoolUpdate(t *testing.T) { func TestMempool_KeepInvalidTxsInCache(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) wcfg := cfg.DefaultConfig() wcfg.Mempool.KeepInvalidTxsInCache = true mp, cleanup := newMempoolWithAppAndConfig(cc, wcfg) @@ -264,7 +264,7 @@ func TestMempool_KeepInvalidTxsInCache(t *testing.T) { func TestTxsAvailable(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() mp.EnableTxsAvailable() @@ -308,12 +308,12 @@ func TestTxsAvailable(t *testing.T) { func TestSerialReap(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mp, cleanup := newMempoolWithApp(cc) defer cleanup() - appConnCon, _ := cc.NewABCIClient() + appConnCon, _ := cc() appConnCon.SetLogger(log.TestingLogger().With("module", "abci-client", "connection", "consensus")) err := appConnCon.Start() require.Nil(t, err) @@ -419,7 +419,7 @@ func TestSerialReap(t *testing.T) { func TestMempool_CheckTxChecksTxSize(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) mempl, cleanup := newMempoolWithApp(cc) defer cleanup() @@ -464,7 +464,7 @@ func TestMempool_CheckTxChecksTxSize(t *testing.T) { func TestMempoolTxsBytes(t *testing.T) { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) config := cfg.ResetTestRoot("mempool_test") config.Mempool.MaxTxsBytes = 10 mp, cleanup := newMempoolWithAppAndConfig(cc, config) @@ -507,7 +507,7 @@ func TestMempoolTxsBytes(t *testing.T) { // 6. zero after tx is rechecked and removed due to not being valid anymore app2 := kvstore.NewApplication() - cc = proxy.NewLocalClientCreator(app2) + cc = abciclient.NewLocalCreator(app2) mp, cleanup = newMempoolWithApp(cc) defer cleanup() @@ -518,7 +518,7 @@ func TestMempoolTxsBytes(t *testing.T) { require.NoError(t, err) assert.EqualValues(t, 8, mp.SizeBytes()) - appConnCon, _ := cc.NewABCIClient() + appConnCon, _ := cc() appConnCon.SetLogger(log.TestingLogger().With("module", "abci-client", "connection", "consensus")) err = appConnCon.Start() require.Nil(t, err) @@ -597,10 +597,10 @@ func newRemoteApp( addr string, app abci.Application, ) ( - clientCreator proxy.ClientCreator, + clientCreator abciclient.Creator, server service.Service, ) { - clientCreator = proxy.NewRemoteClientCreator(addr, "socket", true) + clientCreator = abciclient.NewRemoteCreator(addr, "socket", true) // Start server server = abciserver.NewSocketServer(addr, app) diff --git a/internal/mempool/v0/reactor_test.go b/internal/mempool/v0/reactor_test.go index 91729b37c..8bab45dd0 100644 --- a/internal/mempool/v0/reactor_test.go +++ b/internal/mempool/v0/reactor_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/require" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" @@ -17,7 +18,6 @@ import ( "github.com/tendermint/tendermint/libs/log" tmrand "github.com/tendermint/tendermint/libs/rand" protomem "github.com/tendermint/tendermint/proto/tendermint/mempool" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) @@ -55,7 +55,7 @@ func setup(t *testing.T, cfg *cfg.MempoolConfig, numNodes int, chBuf uint) *reac for nodeID := range rts.network.Nodes { rts.kvstores[nodeID] = kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(rts.kvstores[nodeID]) + cc := abciclient.NewLocalCreator(rts.kvstores[nodeID]) mempool, memCleanup := newMempoolWithApp(cc) t.Cleanup(memCleanup) diff --git a/internal/mempool/v1/mempool.go b/internal/mempool/v1/mempool.go index 46e7f5fcc..34e524159 100644 --- a/internal/mempool/v1/mempool.go +++ b/internal/mempool/v1/mempool.go @@ -12,9 +12,9 @@ import ( "github.com/tendermint/tendermint/internal/libs/clist" tmsync "github.com/tendermint/tendermint/internal/libs/sync" "github.com/tendermint/tendermint/internal/mempool" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" tmmath "github.com/tendermint/tendermint/libs/math" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) diff --git a/internal/mempool/v1/mempool_test.go b/internal/mempool/v1/mempool_test.go index df26be726..3b7eb02d0 100644 --- a/internal/mempool/v1/mempool_test.go +++ b/internal/mempool/v1/mempool_test.go @@ -15,13 +15,14 @@ import ( "time" "github.com/stretchr/testify/require" + + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/code" "github.com/tendermint/tendermint/abci/example/kvstore" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/internal/mempool" "github.com/tendermint/tendermint/libs/log" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) @@ -76,12 +77,12 @@ func setup(t testing.TB, cacheSize int, options ...TxMempoolOption) *TxMempool { t.Helper() app := &application{kvstore.NewApplication()} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) cfg := config.ResetTestRoot(strings.ReplaceAll(t.Name(), "/", "|")) cfg.Mempool.CacheSize = cacheSize - appConnMem, err := cc.NewABCIClient() + appConnMem, err := cc() require.NoError(t, err) require.NoError(t, appConnMem.Start()) diff --git a/proxy/app_conn.go b/internal/proxy/app_conn.go similarity index 80% rename from proxy/app_conn.go rename to internal/proxy/app_conn.go index 8eb90daf3..39860e2a2 100644 --- a/proxy/app_conn.go +++ b/internal/proxy/app_conn.go @@ -3,7 +3,7 @@ package proxy import ( "context" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/types" ) @@ -13,25 +13,25 @@ import ( // Enforce which abci msgs can be sent on a connection at the type level type AppConnConsensus interface { - SetResponseCallback(abcicli.Callback) + SetResponseCallback(abciclient.Callback) Error() error InitChainSync(context.Context, types.RequestInitChain) (*types.ResponseInitChain, error) BeginBlockSync(context.Context, types.RequestBeginBlock) (*types.ResponseBeginBlock, error) - DeliverTxAsync(context.Context, types.RequestDeliverTx) (*abcicli.ReqRes, error) + DeliverTxAsync(context.Context, types.RequestDeliverTx) (*abciclient.ReqRes, error) EndBlockSync(context.Context, types.RequestEndBlock) (*types.ResponseEndBlock, error) CommitSync(context.Context) (*types.ResponseCommit, error) } type AppConnMempool interface { - SetResponseCallback(abcicli.Callback) + SetResponseCallback(abciclient.Callback) Error() error - CheckTxAsync(context.Context, types.RequestCheckTx) (*abcicli.ReqRes, error) + CheckTxAsync(context.Context, types.RequestCheckTx) (*abciclient.ReqRes, error) CheckTxSync(context.Context, types.RequestCheckTx) (*types.ResponseCheckTx, error) - FlushAsync(context.Context) (*abcicli.ReqRes, error) + FlushAsync(context.Context) (*abciclient.ReqRes, error) FlushSync(context.Context) error } @@ -53,19 +53,19 @@ type AppConnSnapshot interface { } //----------------------------------------------------------------------------------------- -// Implements AppConnConsensus (subset of abcicli.Client) +// Implements AppConnConsensus (subset of abciclient.Client) type appConnConsensus struct { - appConn abcicli.Client + appConn abciclient.Client } -func NewAppConnConsensus(appConn abcicli.Client) AppConnConsensus { +func NewAppConnConsensus(appConn abciclient.Client) AppConnConsensus { return &appConnConsensus{ appConn: appConn, } } -func (app *appConnConsensus) SetResponseCallback(cb abcicli.Callback) { +func (app *appConnConsensus) SetResponseCallback(cb abciclient.Callback) { app.appConn.SetResponseCallback(cb) } @@ -87,7 +87,10 @@ func (app *appConnConsensus) BeginBlockSync( return app.appConn.BeginBlockSync(ctx, req) } -func (app *appConnConsensus) DeliverTxAsync(ctx context.Context, req types.RequestDeliverTx) (*abcicli.ReqRes, error) { +func (app *appConnConsensus) DeliverTxAsync( + ctx context.Context, + req types.RequestDeliverTx, +) (*abciclient.ReqRes, error) { return app.appConn.DeliverTxAsync(ctx, req) } @@ -103,19 +106,19 @@ func (app *appConnConsensus) CommitSync(ctx context.Context) (*types.ResponseCom } //------------------------------------------------ -// Implements AppConnMempool (subset of abcicli.Client) +// Implements AppConnMempool (subset of abciclient.Client) type appConnMempool struct { - appConn abcicli.Client + appConn abciclient.Client } -func NewAppConnMempool(appConn abcicli.Client) AppConnMempool { +func NewAppConnMempool(appConn abciclient.Client) AppConnMempool { return &appConnMempool{ appConn: appConn, } } -func (app *appConnMempool) SetResponseCallback(cb abcicli.Callback) { +func (app *appConnMempool) SetResponseCallback(cb abciclient.Callback) { app.appConn.SetResponseCallback(cb) } @@ -123,7 +126,7 @@ func (app *appConnMempool) Error() error { return app.appConn.Error() } -func (app *appConnMempool) FlushAsync(ctx context.Context) (*abcicli.ReqRes, error) { +func (app *appConnMempool) FlushAsync(ctx context.Context) (*abciclient.ReqRes, error) { return app.appConn.FlushAsync(ctx) } @@ -131,7 +134,7 @@ func (app *appConnMempool) FlushSync(ctx context.Context) error { return app.appConn.FlushSync(ctx) } -func (app *appConnMempool) CheckTxAsync(ctx context.Context, req types.RequestCheckTx) (*abcicli.ReqRes, error) { +func (app *appConnMempool) CheckTxAsync(ctx context.Context, req types.RequestCheckTx) (*abciclient.ReqRes, error) { return app.appConn.CheckTxAsync(ctx, req) } @@ -140,13 +143,13 @@ func (app *appConnMempool) CheckTxSync(ctx context.Context, req types.RequestChe } //------------------------------------------------ -// Implements AppConnQuery (subset of abcicli.Client) +// Implements AppConnQuery (subset of abciclient.Client) type appConnQuery struct { - appConn abcicli.Client + appConn abciclient.Client } -func NewAppConnQuery(appConn abcicli.Client) AppConnQuery { +func NewAppConnQuery(appConn abciclient.Client) AppConnQuery { return &appConnQuery{ appConn: appConn, } @@ -169,13 +172,13 @@ func (app *appConnQuery) QuerySync(ctx context.Context, reqQuery types.RequestQu } //------------------------------------------------ -// Implements AppConnSnapshot (subset of abcicli.Client) +// Implements AppConnSnapshot (subset of abciclient.Client) type appConnSnapshot struct { - appConn abcicli.Client + appConn abciclient.Client } -func NewAppConnSnapshot(appConn abcicli.Client) AppConnSnapshot { +func NewAppConnSnapshot(appConn abciclient.Client) AppConnSnapshot { return &appConnSnapshot{ appConn: appConn, } diff --git a/proxy/app_conn_test.go b/internal/proxy/app_conn_test.go similarity index 88% rename from proxy/app_conn_test.go rename to internal/proxy/app_conn_test.go index 458088635..f1ae7fe1a 100644 --- a/proxy/app_conn_test.go +++ b/internal/proxy/app_conn_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" "github.com/tendermint/tendermint/abci/server" "github.com/tendermint/tendermint/abci/types" @@ -17,20 +17,20 @@ import ( //---------------------------------------- type appConnTestI interface { - EchoAsync(ctx context.Context, msg string) (*abcicli.ReqRes, error) + EchoAsync(ctx context.Context, msg string) (*abciclient.ReqRes, error) FlushSync(context.Context) error InfoSync(context.Context, types.RequestInfo) (*types.ResponseInfo, error) } type appConnTest struct { - appConn abcicli.Client + appConn abciclient.Client } -func newAppConnTest(appConn abcicli.Client) appConnTestI { +func newAppConnTest(appConn abciclient.Client) appConnTestI { return &appConnTest{appConn} } -func (app *appConnTest) EchoAsync(ctx context.Context, msg string) (*abcicli.ReqRes, error) { +func (app *appConnTest) EchoAsync(ctx context.Context, msg string) (*abciclient.ReqRes, error) { return app.appConn.EchoAsync(ctx, msg) } @@ -48,7 +48,7 @@ var SOCKET = "socket" func TestEcho(t *testing.T) { sockPath := fmt.Sprintf("unix:///tmp/echo_%v.sock", tmrand.Str(6)) - clientCreator := NewRemoteClientCreator(sockPath, SOCKET, true) + clientCreator := abciclient.NewRemoteCreator(sockPath, SOCKET, true) // Start server s := server.NewSocketServer(sockPath, kvstore.NewApplication()) @@ -63,7 +63,7 @@ func TestEcho(t *testing.T) { }) // Start client - cli, err := clientCreator.NewABCIClient() + cli, err := clientCreator() if err != nil { t.Fatalf("Error creating ABCI client: %v", err.Error()) } @@ -96,7 +96,7 @@ func TestEcho(t *testing.T) { func BenchmarkEcho(b *testing.B) { b.StopTimer() // Initialize sockPath := fmt.Sprintf("unix:///tmp/echo_%v.sock", tmrand.Str(6)) - clientCreator := NewRemoteClientCreator(sockPath, SOCKET, true) + clientCreator := abciclient.NewRemoteCreator(sockPath, SOCKET, true) // Start server s := server.NewSocketServer(sockPath, kvstore.NewApplication()) @@ -111,7 +111,7 @@ func BenchmarkEcho(b *testing.B) { }) // Start client - cli, err := clientCreator.NewABCIClient() + cli, err := clientCreator() if err != nil { b.Fatalf("Error creating ABCI client: %v", err.Error()) } @@ -149,7 +149,7 @@ func BenchmarkEcho(b *testing.B) { func TestInfo(t *testing.T) { sockPath := fmt.Sprintf("unix:///tmp/echo_%v.sock", tmrand.Str(6)) - clientCreator := NewRemoteClientCreator(sockPath, SOCKET, true) + clientCreator := abciclient.NewRemoteCreator(sockPath, SOCKET, true) // Start server s := server.NewSocketServer(sockPath, kvstore.NewApplication()) @@ -164,7 +164,7 @@ func TestInfo(t *testing.T) { }) // Start client - cli, err := clientCreator.NewABCIClient() + cli, err := clientCreator() if err != nil { t.Fatalf("Error creating ABCI client: %v", err.Error()) } diff --git a/internal/proxy/client.go b/internal/proxy/client.go new file mode 100644 index 000000000..072ddf3e0 --- /dev/null +++ b/internal/proxy/client.go @@ -0,0 +1,34 @@ +package proxy + +import ( + "io" + + abciclient "github.com/tendermint/tendermint/abci/client" + "github.com/tendermint/tendermint/abci/example/kvstore" + "github.com/tendermint/tendermint/abci/types" +) + +// DefaultClientCreator returns a default ClientCreator, which will create a +// local client if addr is one of: 'kvstore', +// 'persistent_kvstore' or 'noop', otherwise - a remote client. +// +// The Closer is a noop except for persistent_kvstore applications, +// which will clean up the store. +func DefaultClientCreator(addr, transport, dbDir string) (abciclient.Creator, io.Closer) { + switch addr { + case "kvstore": + return abciclient.NewLocalCreator(kvstore.NewApplication()), noopCloser{} + case "persistent_kvstore": + app := kvstore.NewPersistentKVStoreApplication(dbDir) + return abciclient.NewLocalCreator(app), app + case "noop": + return abciclient.NewLocalCreator(types.NewBaseApplication()), noopCloser{} + default: + mustConnect := false // loop retrying + return abciclient.NewRemoteCreator(addr, transport, mustConnect), noopCloser{} + } +} + +type noopCloser struct{} + +func (noopCloser) Close() error { return nil } diff --git a/proxy/mocks/app_conn_consensus.go b/internal/proxy/mocks/app_conn_consensus.go similarity index 92% rename from proxy/mocks/app_conn_consensus.go rename to internal/proxy/mocks/app_conn_consensus.go index 03207706e..fa93b0931 100644 --- a/proxy/mocks/app_conn_consensus.go +++ b/internal/proxy/mocks/app_conn_consensus.go @@ -5,7 +5,7 @@ package mocks import ( context "context" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" mock "github.com/stretchr/testify/mock" @@ -64,15 +64,15 @@ func (_m *AppConnConsensus) CommitSync(_a0 context.Context) (*types.ResponseComm } // DeliverTxAsync provides a mock function with given fields: _a0, _a1 -func (_m *AppConnConsensus) DeliverTxAsync(_a0 context.Context, _a1 types.RequestDeliverTx) (*abcicli.ReqRes, error) { +func (_m *AppConnConsensus) DeliverTxAsync(_a0 context.Context, _a1 types.RequestDeliverTx) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestDeliverTx) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestDeliverTx) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -147,6 +147,6 @@ func (_m *AppConnConsensus) InitChainSync(_a0 context.Context, _a1 types.Request } // SetResponseCallback provides a mock function with given fields: _a0 -func (_m *AppConnConsensus) SetResponseCallback(_a0 abcicli.Callback) { +func (_m *AppConnConsensus) SetResponseCallback(_a0 abciclient.Callback) { _m.Called(_a0) } diff --git a/proxy/mocks/app_conn_mempool.go b/internal/proxy/mocks/app_conn_mempool.go similarity index 83% rename from proxy/mocks/app_conn_mempool.go rename to internal/proxy/mocks/app_conn_mempool.go index 2505160d6..5429d8f90 100644 --- a/proxy/mocks/app_conn_mempool.go +++ b/internal/proxy/mocks/app_conn_mempool.go @@ -5,7 +5,7 @@ package mocks import ( context "context" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" mock "github.com/stretchr/testify/mock" @@ -18,15 +18,15 @@ type AppConnMempool struct { } // CheckTxAsync provides a mock function with given fields: _a0, _a1 -func (_m *AppConnMempool) CheckTxAsync(_a0 context.Context, _a1 types.RequestCheckTx) (*abcicli.ReqRes, error) { +func (_m *AppConnMempool) CheckTxAsync(_a0 context.Context, _a1 types.RequestCheckTx) (*abciclient.ReqRes, error) { ret := _m.Called(_a0, _a1) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context, types.RequestCheckTx) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context, types.RequestCheckTx) *abciclient.ReqRes); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -78,15 +78,15 @@ func (_m *AppConnMempool) Error() error { } // FlushAsync provides a mock function with given fields: _a0 -func (_m *AppConnMempool) FlushAsync(_a0 context.Context) (*abcicli.ReqRes, error) { +func (_m *AppConnMempool) FlushAsync(_a0 context.Context) (*abciclient.ReqRes, error) { ret := _m.Called(_a0) - var r0 *abcicli.ReqRes - if rf, ok := ret.Get(0).(func(context.Context) *abcicli.ReqRes); ok { + var r0 *abciclient.ReqRes + if rf, ok := ret.Get(0).(func(context.Context) *abciclient.ReqRes); ok { r0 = rf(_a0) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*abcicli.ReqRes) + r0 = ret.Get(0).(*abciclient.ReqRes) } } @@ -115,6 +115,6 @@ func (_m *AppConnMempool) FlushSync(_a0 context.Context) error { } // SetResponseCallback provides a mock function with given fields: _a0 -func (_m *AppConnMempool) SetResponseCallback(_a0 abcicli.Callback) { +func (_m *AppConnMempool) SetResponseCallback(_a0 abciclient.Callback) { _m.Called(_a0) } diff --git a/proxy/mocks/app_conn_query.go b/internal/proxy/mocks/app_conn_query.go similarity index 100% rename from proxy/mocks/app_conn_query.go rename to internal/proxy/mocks/app_conn_query.go diff --git a/proxy/mocks/app_conn_snapshot.go b/internal/proxy/mocks/app_conn_snapshot.go similarity index 100% rename from proxy/mocks/app_conn_snapshot.go rename to internal/proxy/mocks/app_conn_snapshot.go diff --git a/proxy/multi_app_conn.go b/internal/proxy/multi_app_conn.go similarity index 90% rename from proxy/multi_app_conn.go rename to internal/proxy/multi_app_conn.go index 369b685ba..df49df287 100644 --- a/proxy/multi_app_conn.go +++ b/internal/proxy/multi_app_conn.go @@ -5,7 +5,7 @@ import ( "os" "syscall" - abcicli "github.com/tendermint/tendermint/abci/client" + abciclient "github.com/tendermint/tendermint/abci/client" tmlog "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/service" ) @@ -33,7 +33,7 @@ type AppConns interface { } // NewAppConns calls NewMultiAppConn. -func NewAppConns(clientCreator ClientCreator) AppConns { +func NewAppConns(clientCreator abciclient.Creator) AppConns { return NewMultiAppConn(clientCreator) } @@ -50,16 +50,16 @@ type multiAppConn struct { queryConn AppConnQuery snapshotConn AppConnSnapshot - consensusConnClient abcicli.Client - mempoolConnClient abcicli.Client - queryConnClient abcicli.Client - snapshotConnClient abcicli.Client + consensusConnClient abciclient.Client + mempoolConnClient abciclient.Client + queryConnClient abciclient.Client + snapshotConnClient abciclient.Client - clientCreator ClientCreator + clientCreator abciclient.Creator } // NewMultiAppConn makes all necessary abci connections to the application. -func NewMultiAppConn(clientCreator ClientCreator) AppConns { +func NewMultiAppConn(clientCreator abciclient.Creator) AppConns { multiAppConn := &multiAppConn{ clientCreator: clientCreator, } @@ -178,8 +178,8 @@ func (app *multiAppConn) stopAllClients() { } } -func (app *multiAppConn) abciClientFor(conn string) (abcicli.Client, error) { - c, err := app.clientCreator.NewABCIClient() +func (app *multiAppConn) abciClientFor(conn string) (abciclient.Client, error) { + c, err := app.clientCreator() if err != nil { return nil, fmt.Errorf("error creating ABCI client (%s connection): %w", conn, err) } diff --git a/proxy/multi_app_conn_test.go b/internal/proxy/multi_app_conn_test.go similarity index 80% rename from proxy/multi_app_conn_test.go rename to internal/proxy/multi_app_conn_test.go index 34b0d0830..55bcc7524 100644 --- a/proxy/multi_app_conn_test.go +++ b/internal/proxy/multi_app_conn_test.go @@ -8,27 +8,30 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + abciclient "github.com/tendermint/tendermint/abci/client" abcimocks "github.com/tendermint/tendermint/abci/client/mocks" - "github.com/tendermint/tendermint/proxy/mocks" ) func TestAppConns_Start_Stop(t *testing.T) { quitCh := make(<-chan struct{}) - clientCreatorMock := &mocks.ClientCreator{} - clientMock := &abcimocks.Client{} clientMock.On("SetLogger", mock.Anything).Return().Times(4) clientMock.On("Start").Return(nil).Times(4) clientMock.On("Stop").Return(nil).Times(4) clientMock.On("Quit").Return(quitCh).Times(4) - clientCreatorMock.On("NewABCIClient").Return(clientMock, nil).Times(4) + creatorCallCount := 0 + creator := func() (abciclient.Client, error) { + creatorCallCount++ + return clientMock, nil + } - appConns := NewAppConns(clientCreatorMock) + appConns := NewAppConns(creator) err := appConns.Start() require.NoError(t, err) @@ -39,6 +42,7 @@ func TestAppConns_Start_Stop(t *testing.T) { require.NoError(t, err) clientMock.AssertExpectations(t) + assert.Equal(t, 4, creatorCallCount) } // Upon failure, we call tmos.Kill @@ -56,8 +60,6 @@ func TestAppConns_Failure(t *testing.T) { var recvQuitCh <-chan struct{} // nolint:gosimple recvQuitCh = quitCh - clientCreatorMock := &mocks.ClientCreator{} - clientMock := &abcimocks.Client{} clientMock.On("SetLogger", mock.Anything).Return() clientMock.On("Start").Return(nil) @@ -66,9 +68,11 @@ func TestAppConns_Failure(t *testing.T) { clientMock.On("Quit").Return(recvQuitCh) clientMock.On("Error").Return(errors.New("EOF")).Once() - clientCreatorMock.On("NewABCIClient").Return(clientMock, nil) + creator := func() (abciclient.Client, error) { + return clientMock, nil + } - appConns := NewAppConns(clientCreatorMock) + appConns := NewAppConns(creator) err := appConns.Start() require.NoError(t, err) diff --git a/proxy/version.go b/internal/proxy/version.go similarity index 100% rename from proxy/version.go rename to internal/proxy/version.go diff --git a/internal/statesync/reactor.go b/internal/statesync/reactor.go index 6c0d26812..18c6acc2f 100644 --- a/internal/statesync/reactor.go +++ b/internal/statesync/reactor.go @@ -14,12 +14,12 @@ import ( "github.com/tendermint/tendermint/config" tmsync "github.com/tendermint/tendermint/internal/libs/sync" "github.com/tendermint/tendermint/internal/p2p" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/service" "github.com/tendermint/tendermint/light" "github.com/tendermint/tendermint/light/provider" ssproto "github.com/tendermint/tendermint/proto/tendermint/statesync" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" diff --git a/internal/statesync/reactor_test.go b/internal/statesync/reactor_test.go index 6373ed6ab..e2f2c8225 100644 --- a/internal/statesync/reactor_test.go +++ b/internal/statesync/reactor_test.go @@ -16,14 +16,14 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/internal/p2p" + "github.com/tendermint/tendermint/internal/proxy" + proxymocks "github.com/tendermint/tendermint/internal/proxy/mocks" "github.com/tendermint/tendermint/internal/statesync/mocks" "github.com/tendermint/tendermint/internal/test/factory" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/light/provider" ssproto "github.com/tendermint/tendermint/proto/tendermint/statesync" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/tendermint/tendermint/proxy" - proxymocks "github.com/tendermint/tendermint/proxy/mocks" smmocks "github.com/tendermint/tendermint/state/mocks" "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" diff --git a/internal/statesync/syncer.go b/internal/statesync/syncer.go index 559e98a8f..3591cb6b5 100644 --- a/internal/statesync/syncer.go +++ b/internal/statesync/syncer.go @@ -11,10 +11,10 @@ import ( "github.com/tendermint/tendermint/config" tmsync "github.com/tendermint/tendermint/internal/libs/sync" "github.com/tendermint/tendermint/internal/p2p" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/light" ssproto "github.com/tendermint/tendermint/proto/tendermint/statesync" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/types" ) diff --git a/internal/statesync/syncer_test.go b/internal/statesync/syncer_test.go index c1d6b462a..d965c20be 100644 --- a/internal/statesync/syncer_test.go +++ b/internal/statesync/syncer_test.go @@ -13,10 +13,10 @@ import ( abci "github.com/tendermint/tendermint/abci/types" tmsync "github.com/tendermint/tendermint/internal/libs/sync" + "github.com/tendermint/tendermint/internal/proxy" + proxymocks "github.com/tendermint/tendermint/internal/proxy/mocks" "github.com/tendermint/tendermint/internal/statesync/mocks" ssproto "github.com/tendermint/tendermint/proto/tendermint/statesync" - "github.com/tendermint/tendermint/proxy" - proxymocks "github.com/tendermint/tendermint/proxy/mocks" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/types" "github.com/tendermint/tendermint/version" diff --git a/node/node.go b/node/node.go index efa69a724..6ec28515d 100644 --- a/node/node.go +++ b/node/node.go @@ -14,6 +14,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/rs/cors" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/crypto" @@ -21,6 +22,7 @@ import ( "github.com/tendermint/tendermint/internal/mempool" "github.com/tendermint/tendermint/internal/p2p" "github.com/tendermint/tendermint/internal/p2p/pex" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/internal/statesync" "github.com/tendermint/tendermint/libs/log" tmnet "github.com/tendermint/tendermint/libs/net" @@ -30,7 +32,6 @@ import ( tmtime "github.com/tendermint/tendermint/libs/time" "github.com/tendermint/tendermint/privval" tmgrpc "github.com/tendermint/tendermint/privval/grpc" - "github.com/tendermint/tendermint/proxy" rpccore "github.com/tendermint/tendermint/rpc/core" grpccore "github.com/tendermint/tendermint/rpc/grpc" rpcserver "github.com/tendermint/tendermint/rpc/jsonrpc/server" @@ -119,7 +120,7 @@ func newDefaultNode(config *cfg.Config, logger log.Logger) (service.Service, err func makeNode(config *cfg.Config, privValidator types.PrivValidator, nodeKey types.NodeKey, - clientCreator proxy.ClientCreator, + clientCreator abciclient.Creator, genesisDocProvider genesisDocProvider, dbProvider cfg.DBProvider, logger log.Logger) (service.Service, error) { diff --git a/node/node_test.go b/node/node_test.go index 6925008a6..7512c732f 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -16,21 +16,21 @@ import ( dbm "github.com/tendermint/tm-db" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" cfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/tmhash" - "github.com/tendermint/tendermint/internal/evidence" "github.com/tendermint/tendermint/internal/mempool" mempoolv0 "github.com/tendermint/tendermint/internal/mempool/v0" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/internal/test/factory" "github.com/tendermint/tendermint/libs/log" tmrand "github.com/tendermint/tendermint/libs/rand" tmtime "github.com/tendermint/tendermint/libs/time" "github.com/tendermint/tendermint/privval" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/state/indexer" "github.com/tendermint/tendermint/store" @@ -214,7 +214,7 @@ func testFreeAddr(t *testing.T) string { func TestCreateProposalBlock(t *testing.T) { config := cfg.ResetTestRoot("node_create_proposal") defer os.RemoveAll(config.RootDir) - cc := proxy.NewLocalClientCreator(kvstore.NewApplication()) + cc := abciclient.NewLocalCreator(kvstore.NewApplication()) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.Nil(t, err) @@ -306,7 +306,7 @@ func TestCreateProposalBlock(t *testing.T) { func TestMaxTxsProposalBlockSize(t *testing.T) { config := cfg.ResetTestRoot("node_create_proposal") defer os.RemoveAll(config.RootDir) - cc := proxy.NewLocalClientCreator(kvstore.NewApplication()) + cc := abciclient.NewLocalCreator(kvstore.NewApplication()) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.Nil(t, err) @@ -368,7 +368,7 @@ func TestMaxTxsProposalBlockSize(t *testing.T) { func TestMaxProposalBlockSize(t *testing.T) { config := cfg.ResetTestRoot("node_create_proposal") defer os.RemoveAll(config.RootDir) - cc := proxy.NewLocalClientCreator(kvstore.NewApplication()) + cc := abciclient.NewLocalCreator(kvstore.NewApplication()) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.Nil(t, err) diff --git a/node/public.go b/node/public.go index 99a8226d0..c616eebac 100644 --- a/node/public.go +++ b/node/public.go @@ -4,11 +4,11 @@ package node import ( "fmt" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/service" "github.com/tendermint/tendermint/privval" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) @@ -28,7 +28,7 @@ func NewDefault(conf *config.Config, logger log.Logger) (service.Service, error) // value of the final argument. func New(conf *config.Config, logger log.Logger, - cf proxy.ClientCreator, + cf abciclient.Creator, gen *types.GenesisDoc, ) (service.Service, error) { nodeKey, err := types.LoadOrGenNodeKey(conf.NodeKeyFile()) diff --git a/node/setup.go b/node/setup.go index 1a7c1b3b2..a966da85c 100644 --- a/node/setup.go +++ b/node/setup.go @@ -12,6 +12,7 @@ import ( dbm "github.com/tendermint/tm-db" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/crypto" @@ -24,12 +25,12 @@ import ( mempoolv1 "github.com/tendermint/tendermint/internal/mempool/v1" "github.com/tendermint/tendermint/internal/p2p" "github.com/tendermint/tendermint/internal/p2p/pex" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/internal/statesync" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/service" tmstrings "github.com/tendermint/tendermint/libs/strings" protop2p "github.com/tendermint/tendermint/proto/tendermint/p2p" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/state/indexer" "github.com/tendermint/tendermint/state/indexer/sink" @@ -50,7 +51,7 @@ func initDBs(config *cfg.Config, dbProvider cfg.DBProvider) (blockStore *store.B return } -func createAndStartProxyAppConns(clientCreator proxy.ClientCreator, logger log.Logger) (proxy.AppConns, error) { +func createAndStartProxyAppConns(clientCreator abciclient.Creator, logger log.Logger) (proxy.AppConns, error) { proxyApp := proxy.NewAppConns(clientCreator) proxyApp.SetLogger(logger.With("module", "proxy")) if err := proxyApp.Start(); err != nil { diff --git a/proxy/client.go b/proxy/client.go deleted file mode 100644 index 929933e01..000000000 --- a/proxy/client.go +++ /dev/null @@ -1,94 +0,0 @@ -package proxy - -import ( - "fmt" - "io" - - abcicli "github.com/tendermint/tendermint/abci/client" - "github.com/tendermint/tendermint/abci/example/kvstore" - "github.com/tendermint/tendermint/abci/types" - tmsync "github.com/tendermint/tendermint/internal/libs/sync" -) - -//go:generate ../scripts/mockery_generate.sh ClientCreator - -// ClientCreator creates new ABCI clients. -type ClientCreator interface { - // NewABCIClient returns a new ABCI client. - NewABCIClient() (abcicli.Client, error) -} - -//---------------------------------------------------- -// local proxy uses a mutex on an in-proc app - -type localClientCreator struct { - mtx *tmsync.RWMutex - app types.Application -} - -// NewLocalClientCreator returns a ClientCreator for the given app, -// which will be running locally. -func NewLocalClientCreator(app types.Application) ClientCreator { - return &localClientCreator{ - mtx: new(tmsync.RWMutex), - app: app, - } -} - -func (l *localClientCreator) NewABCIClient() (abcicli.Client, error) { - return abcicli.NewLocalClient(l.mtx, l.app), nil -} - -//--------------------------------------------------------------- -// remote proxy opens new connections to an external app process - -type remoteClientCreator struct { - addr string - transport string - mustConnect bool -} - -// NewRemoteClientCreator returns a ClientCreator for the given address (e.g. -// "192.168.0.1") and transport (e.g. "tcp"). Set mustConnect to true if you -// want the client to connect before reporting success. -func NewRemoteClientCreator(addr, transport string, mustConnect bool) ClientCreator { - return &remoteClientCreator{ - addr: addr, - transport: transport, - mustConnect: mustConnect, - } -} - -func (r *remoteClientCreator) NewABCIClient() (abcicli.Client, error) { - remoteApp, err := abcicli.NewClient(r.addr, r.transport, r.mustConnect) - if err != nil { - return nil, fmt.Errorf("failed to connect to proxy: %w", err) - } - - return remoteApp, nil -} - -// DefaultClientCreator returns a default ClientCreator, which will create a -// local client if addr is one of: 'kvstore', -// 'persistent_kvstore' or 'noop', otherwise - a remote client. -// -// The Closer is a noop except for persistent_kvstore applications, -// which will clean up the store. -func DefaultClientCreator(addr, transport, dbDir string) (ClientCreator, io.Closer) { - switch addr { - case "kvstore": - return NewLocalClientCreator(kvstore.NewApplication()), noopCloser{} - case "persistent_kvstore": - app := kvstore.NewPersistentKVStoreApplication(dbDir) - return NewLocalClientCreator(app), app - case "noop": - return NewLocalClientCreator(types.NewBaseApplication()), noopCloser{} - default: - mustConnect := false // loop retrying - return NewRemoteClientCreator(addr, transport, mustConnect), noopCloser{} - } -} - -type noopCloser struct{} - -func (noopCloser) Close() error { return nil } diff --git a/proxy/mocks/client_creator.go b/proxy/mocks/client_creator.go deleted file mode 100644 index 0e4157c2f..000000000 --- a/proxy/mocks/client_creator.go +++ /dev/null @@ -1,36 +0,0 @@ -// Code generated by mockery. DO NOT EDIT. - -package mocks - -import ( - mock "github.com/stretchr/testify/mock" - abcicli "github.com/tendermint/tendermint/abci/client" -) - -// ClientCreator is an autogenerated mock type for the ClientCreator type -type ClientCreator struct { - mock.Mock -} - -// NewABCIClient provides a mock function with given fields: -func (_m *ClientCreator) NewABCIClient() (abcicli.Client, error) { - ret := _m.Called() - - var r0 abcicli.Client - if rf, ok := ret.Get(0).(func() abcicli.Client); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(abcicli.Client) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} diff --git a/rpc/client/mock/abci.go b/rpc/client/mock/abci.go index 0737deec0..960ee6501 100644 --- a/rpc/client/mock/abci.go +++ b/rpc/client/mock/abci.go @@ -4,8 +4,8 @@ import ( "context" abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/bytes" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/rpc/client" ctypes "github.com/tendermint/tendermint/rpc/core/types" "github.com/tendermint/tendermint/types" diff --git a/rpc/core/abci.go b/rpc/core/abci.go index ce705ba90..885ae2c23 100644 --- a/rpc/core/abci.go +++ b/rpc/core/abci.go @@ -2,8 +2,8 @@ package core import ( abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/bytes" - "github.com/tendermint/tendermint/proxy" ctypes "github.com/tendermint/tendermint/rpc/core/types" rpctypes "github.com/tendermint/tendermint/rpc/jsonrpc/types" ) diff --git a/rpc/core/env.go b/rpc/core/env.go index 7069bc4d4..091c8972b 100644 --- a/rpc/core/env.go +++ b/rpc/core/env.go @@ -10,9 +10,9 @@ import ( "github.com/tendermint/tendermint/internal/consensus" mempl "github.com/tendermint/tendermint/internal/mempool" "github.com/tendermint/tendermint/internal/p2p" + "github.com/tendermint/tendermint/internal/proxy" tmjson "github.com/tendermint/tendermint/libs/json" "github.com/tendermint/tendermint/libs/log" - "github.com/tendermint/tendermint/proxy" ctypes "github.com/tendermint/tendermint/rpc/core/types" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/state/indexer" diff --git a/rpc/grpc/types.pb.go b/rpc/grpc/types.pb.go index b9cbee03f..f2b92c878 100644 --- a/rpc/grpc/types.pb.go +++ b/rpc/grpc/types.pb.go @@ -6,14 +6,15 @@ package coregrpc import ( context "context" fmt "fmt" + io "io" + math "math" + math_bits "math/bits" + proto "github.com/gogo/protobuf/proto" types "github.com/tendermint/tendermint/abci/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/rpc/test/helpers.go b/rpc/test/helpers.go index 259450540..3a9a11108 100644 --- a/rpc/test/helpers.go +++ b/rpc/test/helpers.go @@ -6,13 +6,13 @@ import ( "os" "time" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" cfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/libs/log" tmnet "github.com/tendermint/tendermint/libs/net" "github.com/tendermint/tendermint/libs/service" nm "github.com/tendermint/tendermint/node" - "github.com/tendermint/tendermint/proxy" ctypes "github.com/tendermint/tendermint/rpc/core/types" core_grpc "github.com/tendermint/tendermint/rpc/grpc" rpcclient "github.com/tendermint/tendermint/rpc/jsonrpc/client" @@ -100,7 +100,7 @@ func StartTendermint(ctx context.Context, } else { logger = log.MustNewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo, false) } - papp := proxy.NewLocalClientCreator(app) + papp := abciclient.NewLocalCreator(app) node, err := nm.New(conf, logger, papp, nil) if err != nil { return nil, func(_ context.Context) error { return nil }, err diff --git a/state/execution.go b/state/execution.go index 05d5bdd52..f5380de7c 100644 --- a/state/execution.go +++ b/state/execution.go @@ -10,9 +10,9 @@ import ( cryptoenc "github.com/tendermint/tendermint/crypto/encoding" "github.com/tendermint/tendermint/internal/libs/fail" mempl "github.com/tendermint/tendermint/internal/mempool" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" tmstate "github.com/tendermint/tendermint/proto/tendermint/state" - "github.com/tendermint/tendermint/proxy" "github.com/tendermint/tendermint/types" ) diff --git a/state/execution_test.go b/state/execution_test.go index 8e0ec563a..e4d78e1b7 100644 --- a/state/execution_test.go +++ b/state/execution_test.go @@ -9,15 +9,16 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" cryptoenc "github.com/tendermint/tendermint/crypto/encoding" "github.com/tendermint/tendermint/crypto/tmhash" mmock "github.com/tendermint/tendermint/internal/mempool/mock" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/libs/log" tmtime "github.com/tendermint/tendermint/libs/time" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/state/mocks" sf "github.com/tendermint/tendermint/state/test/factory" @@ -34,7 +35,7 @@ var ( func TestApplyBlock(t *testing.T) { app := &testApp{} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.Nil(t, err) @@ -59,7 +60,7 @@ func TestApplyBlock(t *testing.T) { // TestBeginBlockValidators ensures we send absent validators list. func TestBeginBlockValidators(t *testing.T) { app := &testApp{} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.Nil(t, err) @@ -122,7 +123,7 @@ func TestBeginBlockValidators(t *testing.T) { // TestBeginBlockByzantineValidators ensures we send byzantine validators list. func TestBeginBlockByzantineValidators(t *testing.T) { app := &testApp{} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.Nil(t, err) @@ -347,7 +348,7 @@ func TestUpdateValidators(t *testing.T) { // TestEndBlockValidatorUpdates ensures we update validator set and send an event. func TestEndBlockValidatorUpdates(t *testing.T) { app := &testApp{} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.Nil(t, err) @@ -420,7 +421,7 @@ func TestEndBlockValidatorUpdates(t *testing.T) { // would result in empty set causes no panic, an error is raised and NextValidators is not updated func TestEndBlockValidatorUpdatesResultingInEmptySet(t *testing.T) { app := &testApp{} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() require.Nil(t, err) diff --git a/state/helpers_test.go b/state/helpers_test.go index 6d575e147..3590e642d 100644 --- a/state/helpers_test.go +++ b/state/helpers_test.go @@ -7,16 +7,17 @@ import ( dbm "github.com/tendermint/tm-db" + abciclient "github.com/tendermint/tendermint/abci/client" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" cryptoenc "github.com/tendermint/tendermint/crypto/encoding" + "github.com/tendermint/tendermint/internal/proxy" "github.com/tendermint/tendermint/internal/test/factory" tmrand "github.com/tendermint/tendermint/libs/rand" tmtime "github.com/tendermint/tendermint/libs/time" tmstate "github.com/tendermint/tendermint/proto/tendermint/state" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" sf "github.com/tendermint/tendermint/state/test/factory" "github.com/tendermint/tendermint/types" @@ -29,7 +30,7 @@ type paramsChangeTestCase struct { func newTestApp() proxy.AppConns { app := &testApp{} - cc := proxy.NewLocalClientCreator(app) + cc := abciclient.NewLocalCreator(app) return proxy.NewAppConns(cc) } diff --git a/test/e2e/app/main.go b/test/e2e/app/main.go index fd464220d..1d6806524 100644 --- a/test/e2e/app/main.go +++ b/test/e2e/app/main.go @@ -14,6 +14,7 @@ import ( "github.com/spf13/viper" "google.golang.org/grpc" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/server" "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/crypto/ed25519" @@ -28,7 +29,6 @@ import ( "github.com/tendermint/tendermint/privval" grpcprivval "github.com/tendermint/tendermint/privval/grpc" privvalproto "github.com/tendermint/tendermint/proto/tendermint/privval" - "github.com/tendermint/tendermint/proxy" rpcserver "github.com/tendermint/tendermint/rpc/jsonrpc/server" e2e "github.com/tendermint/tendermint/test/e2e/pkg" ) @@ -130,7 +130,7 @@ func startNode(cfg *Config) error { n, err := node.New(tmcfg, nodeLogger, - proxy.NewLocalClientCreator(app), + abciclient.NewLocalCreator(app), nil, ) if err != nil { diff --git a/test/fuzz/mempool/v0/checktx.go b/test/fuzz/mempool/v0/checktx.go index a90ec2290..62eda9729 100644 --- a/test/fuzz/mempool/v0/checktx.go +++ b/test/fuzz/mempool/v0/checktx.go @@ -3,19 +3,19 @@ package v0 import ( "context" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/internal/mempool" mempoolv0 "github.com/tendermint/tendermint/internal/mempool/v0" - "github.com/tendermint/tendermint/proxy" ) var mp mempool.Mempool func init() { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) - appConnMem, _ := cc.NewABCIClient() + cc := abciclient.NewLocalCreator(app) + appConnMem, _ := cc() err := appConnMem.Start() if err != nil { panic(err) diff --git a/test/fuzz/mempool/v1/checktx.go b/test/fuzz/mempool/v1/checktx.go index 6194f3bcb..2ed0b97ff 100644 --- a/test/fuzz/mempool/v1/checktx.go +++ b/test/fuzz/mempool/v1/checktx.go @@ -3,19 +3,19 @@ package v1 import ( "context" + abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/abci/example/kvstore" "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/internal/mempool" mempoolv1 "github.com/tendermint/tendermint/internal/mempool/v0" - "github.com/tendermint/tendermint/proxy" ) var mp mempool.Mempool func init() { app := kvstore.NewApplication() - cc := proxy.NewLocalClientCreator(app) - appConnMem, _ := cc.NewABCIClient() + cc := abciclient.NewLocalCreator(app) + appConnMem, _ := cc() err := appConnMem.Start() if err != nil { panic(err)