kadircet created this revision. kadircet added a reviewer: sammccall. Herald added subscribers: usaxena95, arphaman. kadircet requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang.
By default gRPC has no idletimeout and some firewalls might drop idle connections after a certain period. This results in idle clients shouting into void until server resets the connection. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D97536 Files: clang-tools-extra/clangd/index/remote/server/Server.cpp Index: clang-tools-extra/clangd/index/remote/server/Server.cpp =================================================================== --- clang-tools-extra/clangd/index/remote/server/Server.cpp +++ clang-tools-extra/clangd/index/remote/server/Server.cpp @@ -80,6 +80,11 @@ "server-address", llvm::cl::init("0.0.0.0:50051"), llvm::cl::desc("Address of the invoked server. Defaults to 0.0.0.0:50051")); +llvm::cl::opt<size_t> IdleTimeoutSeconds( + "idle-timeout", llvm::cl::init(10), + llvm::cl::desc("Maximum time a channel may stay idle until server closes " + "the connection, in seconds. Defaults to 10.")); + static Key<grpc::ServerContext *> CurrentRequest; class RemoteIndexServer final : public v1::SymbolIndex::Service { @@ -311,6 +316,8 @@ grpc::ServerBuilder Builder; Builder.AddListeningPort(ServerAddress.str(), grpc::InsecureServerCredentials()); + Builder.AddChannelArgument(GRPC_ARG_MAX_CONNECTION_IDLE_MS, + IdleTimeoutSeconds * 1000); Builder.RegisterService(&Service); std::unique_ptr<grpc::Server> Server(Builder.BuildAndStart()); log("Server listening on {0}", ServerAddress);
Index: clang-tools-extra/clangd/index/remote/server/Server.cpp =================================================================== --- clang-tools-extra/clangd/index/remote/server/Server.cpp +++ clang-tools-extra/clangd/index/remote/server/Server.cpp @@ -80,6 +80,11 @@ "server-address", llvm::cl::init("0.0.0.0:50051"), llvm::cl::desc("Address of the invoked server. Defaults to 0.0.0.0:50051")); +llvm::cl::opt<size_t> IdleTimeoutSeconds( + "idle-timeout", llvm::cl::init(10), + llvm::cl::desc("Maximum time a channel may stay idle until server closes " + "the connection, in seconds. Defaults to 10.")); + static Key<grpc::ServerContext *> CurrentRequest; class RemoteIndexServer final : public v1::SymbolIndex::Service { @@ -311,6 +316,8 @@ grpc::ServerBuilder Builder; Builder.AddListeningPort(ServerAddress.str(), grpc::InsecureServerCredentials()); + Builder.AddChannelArgument(GRPC_ARG_MAX_CONNECTION_IDLE_MS, + IdleTimeoutSeconds * 1000); Builder.RegisterService(&Service); std::unique_ptr<grpc::Server> Server(Builder.BuildAndStart()); log("Server listening on {0}", ServerAddress);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits