This patch adds TLS support for GrpcServer and AsyncGrpcClient by
implementing `GrpcCredentialsProvider` and using that to get channel
credentials. It adds `FlowGrpc` which is a flow global instance, and
initializes TLS credentials that are consistent with the ones provided
to FlowTransport.
- Added `FlowGrpc` to manage gRPC server initialization and TLS
configuration globally.
- `GrpcCredentialsProvider` abstracts secure/insecure communications
configurations for server/clients.
- Introduced `GrpcTlsCredentialProvider` for dynamic TLS certificate
reloading from filesystem and `GrpcTlsCredentialStaticProvider` for
static in-memory credentials.
- Updated `GrpcServer` to accept a `GrpcCredentialProvider`, enabling
dynamic TLS credential management.
- Modified `fdbserver` to use `FlowGrpc::init()` for gRPC server
initialization instead of `GrpcServer::initInstance()`, aligning it
with FlowTransport behavior.
- Modified `GrpcServer::run()` to use the provided
`GrpcCredentialProvider` instead of hardcoded insecure credentials.
Testing:
- Implemented a basic mTLS test case (`/fdbrpc/grpc/basic_tls`) to
verify secure gRPC connections using
`GrpcTlsCredentialStaticProvider`.
Todo:
- Generate certificates during testruns instead statically.
- Add test for `GrpcTlsCredentialProvider` which reads keys/certs from
filesystem and monitors changes.
- Verify peers rules/criterias like FDB --verify-peer feature.
This patch has two set of changes:
- Whenever a service is registered and removed from server, we need to restart gRPC server.
GrpcServer provides some methods that can be used by worker actors so that the life of
services registered by them can tied to the life of the worker role itself.
- Replace asio::thread_pool with AsyncTaskExecutor both in client and server.
This patch implements `AsyncTaskExecutor` for asynchronous execution of tasks in a separate thread
pool. We already have `IThreadPool` however its API is more well suited for bigger tasks. This just
provides an easier to use API.
There is `AsyncTaskThread` which is similar in nature, but this is not re-wrapping IThreadPool hence
has ability to have multiple worker threads. We can potentially replace that with this component by
setting `num_threads = 1`.
TODO: Move this to `flow/include` instead of here.
Add gRPC file transfer service
* grpc: Add file size check
* grpc: change test addresses
* Fix CI/CD failure
* Disable gRPC for build
* Fixes for new gRPC in new build image
* Move FileTransfer definitions to CPP file
* Implement gRPC support
* Move some CMake stuff around.
* Fix typo
* Add some test
* Add async client
* Add test for checking destroy
* [testing] Automatically discover unit-test and register as ctest
This patch adds `collect_unit_tests()` to CMake which searches over
the codebase and finds all the unit-tests written using Flow's TEST_CASE
macro and register as ctest.
The test then can be then run using ctest command or directly via Test
Explorer in VSCode.
* Fix some tests
* Use NetworkAddress
* Add another variant of call method
* Add a failed call test
* Refactor
* Cleanup shutdown
* Start working on streaming
* Implement server streaming
* Cleanup some unnecessary templating
* Cleanup some tests
* WIP Client Streaming
* WIP
* File Transfer WIP
* Remove UnitTest.h
* Take grpc addresses from command line
* startup grpc in fdbserver
* Cancel if future ref is 0
* noop
* Update some Cmake files
* Fix some build/run issues
* Review comments and remove file transfer
* Compile with gRPC present
* format
* Address review comments
* Add assert
* fix FLOW_GRPC_ENABLED flag
* include grpc/proto headers for generated files
* fix arm build not finding generated proto
* add debug message for protobuf generation
* add generated dir again
* add check for protoc compiler