diff --git a/ChangeLog.md b/ChangeLog.md index 11290362..fad8ed83 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,5 +1,21 @@ # ChangeLog +## [1.9.1] - 2024-12-31 + +### Added +- + +### Fixed +- + +### Changed +- gRPC client timeout deadline is variable and can be set from start.sh +- Versioning: Proto Major - Proto Minor - Code + +### Developers +- [NaderZare](https://github.com/naderzare) + +======= ## [1.1.3] - 2024-12-15 ### Added diff --git a/src/coach/main_coach.cpp b/src/coach/main_coach.cpp index e577816d..5a7f9317 100644 --- a/src/coach/main_coach.cpp +++ b/src/coach/main_coach.cpp @@ -83,6 +83,7 @@ main( int argc, char **argv ) bool add_20_to_grpc_port_if_right_side = false; std::string grpc_ip = "localhost"; std::string rpc_type = "thrift"; + int rpc_timeout = 3; for (int i = 0; i < argc; ++i) { if (std::string(argv[i]) == "--rpc-port") { @@ -100,12 +101,16 @@ main( int argc, char **argv ) if (std::string(argv[i]) == "--rpc-type") { rpc_type = argv[i+1]; } + if (std::string(argv[i]) == "--rpc-timeout") { + rpc_timeout = std::stoi(argv[i+1]); + } } agent.SetFirstRpcPort(grpc_port); agent.SetUseSameRpcPort(use_same_grpc_port); agent.SetAdd20ToRpcPortIfRightSide(add_20_to_grpc_port_if_right_side); agent.SetRpcIp(grpc_ip); + agent.SetRpcTimeout(rpc_timeout); bool use_thrift = rpc_type=="thrift"; #ifndef USE_GRPC diff --git a/src/coach/sample_coach.cpp b/src/coach/sample_coach.cpp index 8319b05b..659af104 100644 --- a/src/coach/sample_coach.cpp +++ b/src/coach/sample_coach.cpp @@ -213,7 +213,8 @@ SampleCoach::actionImpl() M_rpc_server_address, M_first_rpc_port, M_use_same_rpc_port, - M_add_20_to_rpc_port_if_right_side); + M_add_20_to_rpc_port_if_right_side, + M_rpc_timeout); #endif } else @@ -224,7 +225,8 @@ SampleCoach::actionImpl() M_rpc_server_address, M_first_rpc_port, M_use_same_rpc_port, - M_add_20_to_rpc_port_if_right_side); + M_add_20_to_rpc_port_if_right_side, + M_rpc_timeout); #endif } } diff --git a/src/grpc-client/grpc_client_coach.cpp b/src/grpc-client/grpc_client_coach.cpp index c4b43ec0..c913b057 100644 --- a/src/grpc-client/grpc_client_coach.cpp +++ b/src/grpc-client/grpc_client_coach.cpp @@ -32,9 +32,12 @@ void GrpcClientCoach::init(rcsc::SoccerAgent *agent, std::string target, int port, bool use_same_grpc_port, - bool add_20_to_grpc_port_if_right_side) + bool add_20_to_grpc_port_if_right_side, + int rpc_timeout) { M_agent = static_cast(agent); + M_rpc_timeout = rpc_timeout; + M_rpc_timeout = rpc_timeout; M_unum = 12; M_team_name = M_agent->world().ourTeamName(); if (add_20_to_grpc_port_if_right_side) @@ -57,6 +60,9 @@ void GrpcClientCoach::getActions() state.set_allocated_register_response(response); protos::CoachActions actions; ClientContext context; + // Set the deadline to M_rpc_timeout second from now + auto deadline = std::chrono::system_clock::now() + std::chrono::seconds(M_rpc_timeout); + context.set_deadline(deadline); Status status = M_stub_->GetCoachActions(&context, state, &actions); if (!status.ok()) { diff --git a/src/grpc-client/grpc_client_coach.h b/src/grpc-client/grpc_client_coach.h index d2b9c3f4..d53624e7 100644 --- a/src/grpc-client/grpc_client_coach.h +++ b/src/grpc-client/grpc_client_coach.h @@ -12,7 +12,8 @@ class GrpcClientCoach : public GrpcClient { std::string target="localhost", int port=50051, bool use_same_grpc_port=true, - bool add_20_to_grpc_port_if_right_side=false) override; + bool add_20_to_grpc_port_if_right_side=false, + int rpc_timeout=3) override; void getActions(); State generateState() const; diff --git a/src/grpc-client/grpc_client_player.cpp b/src/grpc-client/grpc_client_player.cpp index feadca2e..9e66463a 100644 --- a/src/grpc-client/grpc_client_player.cpp +++ b/src/grpc-client/grpc_client_player.cpp @@ -90,9 +90,11 @@ void GrpcClientPlayer::init(rcsc::SoccerAgent *agent, std::string target, int port, bool use_same_grpc_port, - bool add_20_to_grpc_port_if_right_side) + bool add_20_to_grpc_port_if_right_side, + int rpc_timeout) { M_agent = static_cast(agent); + M_rpc_timeout = rpc_timeout; M_unum = M_agent->world().self().unum(); M_team_name = M_agent->world().ourTeamName(); if (add_20_to_grpc_port_if_right_side) @@ -179,8 +181,8 @@ void GrpcClientPlayer::getActions() state.set_allocated_register_response(response); protos::PlayerActions actions; ClientContext context; - // Set the deadline to 1 second from now - auto deadline = std::chrono::system_clock::now() + std::chrono::seconds(3); + // Set the deadline to M_rpc_timeout second from now + auto deadline = std::chrono::system_clock::now() + std::chrono::seconds(M_rpc_timeout); context.set_deadline(deadline); Status status = M_stub_->GetPlayerActions(&context, state, &actions); diff --git a/src/grpc-client/grpc_client_player.h b/src/grpc-client/grpc_client_player.h index de02be7f..5bd5d740 100644 --- a/src/grpc-client/grpc_client_player.h +++ b/src/grpc-client/grpc_client_player.h @@ -14,7 +14,8 @@ class GrpcClientPlayer : public GrpcClient, public RpcPlayerClient std::string target = "localhost", int port = 50051, bool use_same_grpc_port = true, - bool add_20_to_grpc_port_if_right_side = false) override; + bool add_20_to_grpc_port_if_right_side = false, + int rpc_timeout=3) override; void updateChainByDefault(const rcsc::WorldModel &wm); void updateChainByPlannerAction(const rcsc::WorldModel &wm, const protos::PlayerAction &action); diff --git a/src/grpc-client/grpc_client_trainer.cpp b/src/grpc-client/grpc_client_trainer.cpp index d882deec..86f403c1 100644 --- a/src/grpc-client/grpc_client_trainer.cpp +++ b/src/grpc-client/grpc_client_trainer.cpp @@ -31,9 +31,11 @@ void GrpcClientTrainer::init(rcsc::SoccerAgent *agent, std::string target, int port, bool use_same_grpc_port, - bool add_20_to_grpc_port_if_right_side) + bool add_20_to_grpc_port_if_right_side, + int rpc_timeout) { M_agent = static_cast(agent); + M_rpc_timeout = rpc_timeout; M_unum = 13; M_team_name = M_agent->world().ourTeamName(); if (add_20_to_grpc_port_if_right_side) @@ -56,6 +58,9 @@ void GrpcClientTrainer::getActions() state.set_allocated_register_response(response); protos::TrainerActions actions; ClientContext context; + // Set the deadline to M_rpc_timeout second from now + auto deadline = std::chrono::system_clock::now() + std::chrono::seconds(M_rpc_timeout); + context.set_deadline(deadline); Status status = M_stub_->GetTrainerActions(&context, state, &actions); if (!status.ok()) { diff --git a/src/grpc-client/grpc_client_trainer.h b/src/grpc-client/grpc_client_trainer.h index 65f039ce..d02d46c3 100644 --- a/src/grpc-client/grpc_client_trainer.h +++ b/src/grpc-client/grpc_client_trainer.h @@ -2,6 +2,7 @@ class GrpcClientTrainer : public GrpcClient { rcsc::TrainerAgent * M_agent; + int M_rpc_timeout = 3; public: GrpcClientTrainer() ; @@ -10,7 +11,8 @@ class GrpcClientTrainer : public GrpcClient { std::string target="localhost", int port=50051, bool use_same_grpc_port=true, - bool add_20_to_grpc_port_if_right_side=false) override; + bool add_20_to_grpc_port_if_right_side=false, + int rpc_timeout=3) override; void getActions(); State generateState() const; diff --git a/src/player/main_player.cpp b/src/player/main_player.cpp index b4f22bf8..3daa6fde 100644 --- a/src/player/main_player.cpp +++ b/src/player/main_player.cpp @@ -82,6 +82,7 @@ main( int argc, char **argv ) bool add_20_to_grpc_port_if_right_side = false; std::string grpc_ip = "localhost"; std::string rpc_type = "thrift"; + int rpc_timeout = 3; for (int i = 0; i < argc; ++i) { if (std::string(argv[i]) == "--rpc-port") { @@ -99,12 +100,16 @@ main( int argc, char **argv ) if (std::string(argv[i]) == "--rpc-type") { rpc_type = argv[i+1]; } + if (std::string(argv[i]) == "--rpc-timeout") { + rpc_timeout = std::stoi(argv[i+1]); + } } agent.SetFirstRpcPort(grpc_port); agent.SetUseSameRpcPort(use_same_grpc_port); agent.SetAdd20ToRpcPortIfRightSide(add_20_to_grpc_port_if_right_side); agent.SetRpcIp(grpc_ip); + agent.SetRpcTimeout(rpc_timeout); bool use_thrift = rpc_type=="thrift"; diff --git a/src/player/sample_player.cpp b/src/player/sample_player.cpp index e1691d12..a8be956d 100644 --- a/src/player/sample_player.cpp +++ b/src/player/sample_player.cpp @@ -240,7 +240,8 @@ SamplePlayer::actionImpl() M_rpc_server_address, M_first_rpc_port, M_use_same_rpc_port, - M_add_20_to_rpc_port_if_right_side); + M_add_20_to_rpc_port_if_right_side, + M_rpc_timeout); #endif } else @@ -251,7 +252,8 @@ SamplePlayer::actionImpl() M_rpc_server_address, M_first_rpc_port, M_use_same_rpc_port, - M_add_20_to_rpc_port_if_right_side); + M_add_20_to_rpc_port_if_right_side, + M_rpc_timeout); #endif } } diff --git a/src/rpc-client/rpc-agent.h b/src/rpc-client/rpc-agent.h index a8b4ee3e..7c685de6 100644 --- a/src/rpc-client/rpc-agent.h +++ b/src/rpc-client/rpc-agent.h @@ -17,10 +17,12 @@ class RpcAgent { bool M_add_20_to_rpc_port_if_right_side; std::string M_rpc_server_address; bool M_use_thrift; + int M_rpc_timeout; void SetFirstRpcPort(int port) { M_first_rpc_port = port; } void SetUseSameRpcPort(bool use_same_grpc_port) { M_use_same_rpc_port = use_same_grpc_port; } void SetAdd20ToRpcPortIfRightSide(bool add_20_to_grpc_port_if_right_side) { M_add_20_to_rpc_port_if_right_side = add_20_to_grpc_port_if_right_side; } void SetRpcIp(std::string grpc_server_address) { M_rpc_server_address = grpc_server_address; } + void SetRpcTimeout(int timeout) { M_rpc_timeout = timeout; } }; #endif //HELIOS_BASE_RPC_AGENT_H diff --git a/src/rpc-client/rpc-client.h b/src/rpc-client/rpc-client.h index f0b2e2ef..964a5a57 100644 --- a/src/rpc-client/rpc-client.h +++ b/src/rpc-client/rpc-client.h @@ -13,6 +13,7 @@ class IRpcClient { int M_unum; std::string M_team_name; bool M_param_sent = false; + int M_rpc_timeout = 3; virtual bool connectToGrpcServer() = 0; @@ -25,7 +26,8 @@ class IRpcClient { std::string target="localhost", int port=50051, bool use_same_grpc_port=true, - bool add_20_to_grpc_port_if_right_side=false) = 0; + bool add_20_to_grpc_port_if_right_side=false, + int rpc_timeout=3) = 0; bool isConnected() const{ return M_is_connected; diff --git a/src/start-agent.sh.in b/src/start-agent.sh.in index 5dd57e1f..6bebb06b 100644 --- a/src/start-agent.sh.in +++ b/src/start-agent.sh.in @@ -31,6 +31,7 @@ rpc_port=50051 rpc_port_step="false" rpc_add_20_to_port_for_right="false" rpc_type="thrift" +rpc_timeout=3 coach_port="" debug_server_host="" debug_server_port="" @@ -87,6 +88,7 @@ usage() echo " --rpc-port-step specifies different rpc port for each player (default: false)" echo " --rpc-add-20-to-port-for-right add 20 to RPC Port if team run on right side (default: false)" echo " --rpc-type type of rpc framework (default: thrift) or grpc" + echo " --rpc-timeout specifies rpc timeout (default: 3)" echo " --goalie specifies to run as a goalie" echo " --player specifies to run as a player" echo " --coach specifies to run as a coach" @@ -131,6 +133,14 @@ do rpc_type="${2}" shift 1 ;; + --rpc-timeout) + if [ $# -lt 2 ]; then + usage + exit 1 + fi + rpc_timeout="${2}" + shift 1 + ;; -h|--host) if [ $# -lt 2 ]; then usage @@ -349,6 +359,7 @@ opt="${opt} ${debugopt}" opt="${opt} --rpc-host ${rpc_host}" opt="${opt} --rpc-port ${rpc_port}" opt="${opt} --rpc-type ${rpc_type}" +opt="${opt} --rpc-timeout ${rpc_timeout}" if [ "${rpc_port_step}" = "true" ]; then opt="${opt} --rpc-port-step" fi @@ -379,6 +390,7 @@ if [ "${is_coach}" = "true" ]; then coachopt="${coachopt} --rpc-host ${rpc_host}" coachopt="${coachopt} --rpc-port ${rpc_port}" coachopt="${coachopt} --rpc-type ${rpc_type}" + coachopt="${coachopt} --rpc-timeout ${rpc_timeout}" if [ "${rpc_port_step}" = "true" ]; then coachopt="${coachopt} --rpc-port-step" fi diff --git a/src/start.sh.in b/src/start.sh.in index 22ef3131..0f6d38c5 100644 --- a/src/start.sh.in +++ b/src/start.sh.in @@ -31,6 +31,7 @@ rpc_port=50051 rpc_port_step="false" rpc_add_20_to_port_for_right="false" rpc_type="thrift" +rpc_timeout=3 coach_port="" debug_server_host="" debug_server_port="" @@ -89,6 +90,7 @@ usage() echo " --rpc-port-step specifies different rpc port for each player (default: false)" echo " --rpc-add-20-to-port-for-right add 20 to RPC Port if team run on right side (default: false)" echo " --rpc-type type of rpc framework (default: thrift) or grpc" + echo " --rpc-timeout specifies rpc timeout (default: 3)" echo " FULLSTATE_TYPE is one of [ignore|reference|override].") 1>&2 } @@ -130,6 +132,14 @@ do rpc_type="${2}" shift 1 ;; + --rpc-timeout) + if [ $# -lt 2 ]; then + usage + exit 1 + fi + rpc_timeout="${2}" + shift 1 + ;; -h|--host) if [ $# -lt 2 ]; then usage @@ -354,6 +364,7 @@ opt="${opt} ${debugopt}" opt="${opt} --rpc-host ${rpc_host}" opt="${opt} --rpc-port ${rpc_port}" opt="${opt} --rpc-type ${rpc_type}" +opt="${opt} --rpc-timeout ${rpc_timeout}" if [ "${rpc_port_step}" = "true" ]; then opt="${opt} --rpc-port-step" fi @@ -411,6 +422,7 @@ if [ "${usecoach}" = "true" ]; then coachopt="${coachopt} --rpc-host ${rpc_host}" coachopt="${coachopt} --rpc-port ${rpc_port}" coachopt="${coachopt} --rpc-type ${rpc_type}" + coachopt="${coachopt} --rpc-timeout ${rpc_timeout}" if [ "${rpc_port_step}" = "true" ]; then coachopt="${coachopt} --rpc-port-step" fi diff --git a/src/thrift-client/thrift_client_coach.cpp b/src/thrift-client/thrift_client_coach.cpp index 160ceb23..d7c94827 100644 --- a/src/thrift-client/thrift_client_coach.cpp +++ b/src/thrift-client/thrift_client_coach.cpp @@ -32,9 +32,11 @@ void ThriftClientCoach::init(rcsc::SoccerAgent *agent, std::string target, int port, bool use_same_grpc_port, - bool add_20_to_grpc_port_if_right_side) + bool add_20_to_grpc_port_if_right_side, + int rpc_timeout) { M_agent = static_cast(agent); + M_rpc_timeout = rpc_timeout; M_unum = 12; M_team_name = M_agent->world().ourTeamName(); if (add_20_to_grpc_port_if_right_side) diff --git a/src/thrift-client/thrift_client_coach.h b/src/thrift-client/thrift_client_coach.h index 91091fed..8635a8c6 100644 --- a/src/thrift-client/thrift_client_coach.h +++ b/src/thrift-client/thrift_client_coach.h @@ -12,7 +12,8 @@ class ThriftClientCoach : public ThriftAgent { std::string target="localhost", int port=50051, bool use_same_grpc_port=true, - bool add_20_to_grpc_port_if_right_side=false) override; + bool add_20_to_grpc_port_if_right_side=false, + int rpc_timeout=3) override; void getActions(); soccer::State generateState() const; diff --git a/src/thrift-client/thrift_client_player.cpp b/src/thrift-client/thrift_client_player.cpp index bb86ef5d..3873444c 100644 --- a/src/thrift-client/thrift_client_player.cpp +++ b/src/thrift-client/thrift_client_player.cpp @@ -90,9 +90,11 @@ void ThriftClientPlayer::init(rcsc::SoccerAgent *agent, std::string target, int port, bool use_same_grpc_port, - bool add_20_to_grpc_port_if_right_side) + bool add_20_to_grpc_port_if_right_side, + int rpc_timeout) { M_agent = static_cast(agent); + M_rpc_timeout = rpc_timeout; M_unum = M_agent->world().self().unum(); M_team_name = M_agent->world().ourTeamName(); if (add_20_to_grpc_port_if_right_side) diff --git a/src/thrift-client/thrift_client_player.h b/src/thrift-client/thrift_client_player.h index b49a8353..9fffd5cd 100644 --- a/src/thrift-client/thrift_client_player.h +++ b/src/thrift-client/thrift_client_player.h @@ -13,7 +13,8 @@ class ThriftClientPlayer : public ThriftAgent, public RpcPlayerClient { std::string target="localhost", int port=50051, bool use_same_grpc_port=true, - bool add_20_to_grpc_port_if_right_side=false) override; + bool add_20_to_grpc_port_if_right_side=false, + int rpc_timeout=3) override; void updateChainByDefault(const rcsc::WorldModel &wm); void updateChainByPlannerAction(const rcsc::WorldModel &wm, const soccer::PlayerAction &action); diff --git a/src/thrift-client/thrift_client_trainer.cpp b/src/thrift-client/thrift_client_trainer.cpp index c3d3b735..3d436bfd 100644 --- a/src/thrift-client/thrift_client_trainer.cpp +++ b/src/thrift-client/thrift_client_trainer.cpp @@ -31,9 +31,11 @@ void ThriftClientTrainer::init(rcsc::SoccerAgent *agent, std::string target, int port, bool use_same_grpc_port, - bool add_20_to_grpc_port_if_right_side) + bool add_20_to_grpc_port_if_right_side, + int rpc_timeout) { M_agent = static_cast(agent); + M_rpc_timeout = rpc_timeout; M_team_name = M_agent->world().ourTeamName(); M_unum = 13; if (add_20_to_grpc_port_if_right_side) diff --git a/src/thrift-client/thrift_client_trainer.h b/src/thrift-client/thrift_client_trainer.h index 41ab1794..60b0dcc7 100644 --- a/src/thrift-client/thrift_client_trainer.h +++ b/src/thrift-client/thrift_client_trainer.h @@ -10,7 +10,8 @@ class ThriftClientTrainer : public ThriftAgent { std::string target="localhost", int port=50051, bool use_same_grpc_port=true, - bool add_20_to_grpc_port_if_right_side=false) override; + bool add_20_to_grpc_port_if_right_side=false, + int rpc_timeout=3) override; void getActions(); soccer::State generateState() const; diff --git a/src/train.sh.in b/src/train.sh.in index 3d743976..8dddfe83 100644 --- a/src/train.sh.in +++ b/src/train.sh.in @@ -23,6 +23,7 @@ rpc_port=50051 rpc_port_step="false" rpc_add_20_to_port_for_right="false" rpc_type="thrift" +rpc_timeout=3 config="${DIR}/player.conf" config_dir="${DIR}/formations-dt" @@ -46,6 +47,7 @@ usage() echo " --rpc-port-step specifies different rpc port for each player (default: false)" echo " --rpc-add-20-to-port-for-right add 20 to RPC Port if team run on right side (default: false)" echo " --rpc-type type of rpc framework (default: thrift) or grpc" + echo " --rpc-timeout specifies rpc timeout (default: 3)" echo " -t, --teamname TEAMNAME specifies team name") 1>&2 } @@ -105,6 +107,14 @@ do rpc_type="${2}" shift 1 ;; + --rpc-timeout) + if [ $# -lt 2 ]; then + usage + exit 1 + fi + rpc_timeout="${2}" + shift 1 + ;; *) usage exit 1 @@ -120,6 +130,7 @@ OPT="${OPT} ${debugopt}" opt="${opt} --rpc-host ${rpc_host}" opt="${opt} --rpc-port ${rpc_port}" opt="${opt} --rpc-type ${rpc_type}" +opt="${opt} --rpc-timeout ${rpc_timeout}" if [ "${rpc_port_step}" = "true" ]; then opt="${opt} --rpc-port-step" fi @@ -144,6 +155,7 @@ trainer_opt="-h $host -t $teamname" trainer_opt="${trainer_opt} --rpc-host ${rpc_host}" trainer_opt="${trainer_opt} --rpc-port ${rpc_port}" trainer_opt="${trainer_opt} --rpc-type ${rpc_type}" +trainer_opt="${trainer_opt} --rpc-timeout ${rpc_timeout}" if [ "${rpc_port_step}" = "true" ]; then trainer_opt="${trainer_opt} --rpc-port-step" fi diff --git a/src/trainer/main_trainer.cpp b/src/trainer/main_trainer.cpp index 2263c609..5bf53bd0 100644 --- a/src/trainer/main_trainer.cpp +++ b/src/trainer/main_trainer.cpp @@ -83,6 +83,7 @@ main( int argc, char ** argv ) bool add_20_to_grpc_port_if_right_side = false; std::string grpc_ip = "localhost"; std::string rpc_type = "thrift"; + int rpc_timeout = 3; for (int i = 0; i < argc; ++i) { if (std::string(argv[i]) == "--rpc-port") { @@ -97,15 +98,19 @@ main( int argc, char ** argv ) if (std::string(argv[i]) == "--rpc-host") { grpc_ip = argv[i+1]; } - if (std::string(argv[i]) == "--rpc-type") { + if (std::string(argv[i]) == "--rpc-type") { rpc_type = argv[i+1]; } + if (std::string(argv[i]) == "--rpc-timeout") { + rpc_timeout = std::stoi(argv[i+1]); + } } agent.SetFirstRpcPort(grpc_port); agent.SetUseSameRpcPort(use_same_grpc_port); agent.SetAdd20ToRpcPortIfRightSide(add_20_to_grpc_port_if_right_side); agent.SetRpcIp(grpc_ip); + agent.SetRpcTimeout(rpc_timeout); bool use_thrift = rpc_type=="thrift"; #ifndef USE_GRPC diff --git a/src/trainer/sample_trainer.cpp b/src/trainer/sample_trainer.cpp index 1239a151..cf787069 100644 --- a/src/trainer/sample_trainer.cpp +++ b/src/trainer/sample_trainer.cpp @@ -120,7 +120,8 @@ SampleTrainer::actionImpl() M_rpc_server_address, M_first_rpc_port, M_use_same_rpc_port, - M_add_20_to_rpc_port_if_right_side); + M_add_20_to_rpc_port_if_right_side, + M_rpc_timeout); #endif } else @@ -131,7 +132,8 @@ SampleTrainer::actionImpl() M_rpc_server_address, M_first_rpc_port, M_use_same_rpc_port, - M_add_20_to_rpc_port_if_right_side); + M_add_20_to_rpc_port_if_right_side, + M_rpc_timeout); #endif } }