text:
Failed to build Pegasus due to undefined references to all thrift-generated objects while linking libdsn_client.a

Failed to build Pegasus due to undefined references to all thrift-generated objects while linking libdsn_client.a:
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::create_app(std::string const&, std::string const&, int, int, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&, bool, bool)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:194: undefined reference to `dsn::replication::configuration_create_app_response::~configuration_create_app_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:194: undefined reference to `dsn::replication::configuration_create_app_response::~configuration_create_app_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::drop_app(std::string const&, int)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:230: undefined reference to `dsn::replication::drop_app_options::__set_reserve_seconds(long)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:232: undefined reference to `dsn::replication::configuration_drop_app_response::~configuration_drop_app_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:232: undefined reference to `dsn::replication::configuration_drop_app_response::~configuration_drop_app_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::recall_app(int, std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:257: undefined reference to `dsn::replication::configuration_recall_app_response::~configuration_recall_app_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:257: undefined reference to `dsn::replication::configuration_recall_app_response::~configuration_recall_app_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::list_apps(dsn::app_status::type, std::vector<dsn::app_info, std::allocator<dsn::app_info> >&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:287: undefined reference to `dsn::replication::configuration_list_apps_response::~configuration_list_apps_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:287: undefined reference to `dsn::replication::configuration_list_apps_response::~configuration_list_apps_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::list_nodes(dsn::replication::node_status::type, std::map<dsn::rpc_address, dsn::replication::node_status::type, std::less<dsn::rpc_address>, std::allocator<std::pair<dsn::rpc_address const, dsn::replication::node_status::type> > >&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:487: undefined reference to `dsn::replication::configuration_list_nodes_response::~configuration_list_nodes_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:487: undefined reference to `dsn::replication::configuration_list_nodes_response::~configuration_list_nodes_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::cluster_name(long, std::string&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:632: undefined reference to `dsn::replication::configuration_cluster_info_response::~configuration_cluster_info_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:632: undefined reference to `dsn::replication::configuration_cluster_info_response::~configuration_cluster_info_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::cluster_info(std::string const&, bool, bool)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:659: undefined reference to `dsn::replication::configuration_cluster_info_response::~configuration_cluster_info_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:659: undefined reference to `dsn::replication::configuration_cluster_info_response::~configuration_cluster_info_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::control_meta_function_level(dsn::replication::meta_function_level::type)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:875: undefined reference to `dsn::replication::configuration_meta_control_response::~configuration_meta_control_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::send_balancer_proposal(dsn::replication::configuration_balancer_request const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:887: undefined reference to `dsn::replication::configuration_balancer_response::~configuration_balancer_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:887: undefined reference to `dsn::replication::configuration_balancer_response::~configuration_balancer_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::do_recovery(std::vector<dsn::rpc_address, std::allocator<dsn::rpc_address> > const&, int, bool, bool, std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:951: undefined reference to `dsn::replication::configuration_recovery_response::~configuration_recovery_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:951: undefined reference to `dsn::replication::configuration_recovery_response::~configuration_recovery_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::do_restore(std::string const&, std::string const&, std::string const&, long, std::string const&, int, std::string const&, bool, std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1000: undefined reference to `dsn::replication::configuration_restore_request::__set_restore_path(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1014: undefined reference to `dsn::replication::configuration_create_app_response::~configuration_create_app_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1014: undefined reference to `dsn::replication::configuration_create_app_response::~configuration_create_app_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::add_backup_policy(std::string const&, std::string const&, std::vector<int, std::allocator<int> > const&, long, int, std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1047: undefined reference to `dsn::replication::configuration_add_backup_policy_response::~configuration_add_backup_policy_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1047: undefined reference to `dsn::replication::configuration_add_backup_policy_response::~configuration_add_backup_policy_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::backup_app(int, std::string const&, std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1066: undefined reference to `dsn::replication::start_backup_app_request::__set_backup_path(std::string const&)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::query_backup(int, long)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1078: undefined reference to `dsn::replication::query_backup_status_request::__set_backup_id(long)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::disable_backup_policy(std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1087: undefined reference to `dsn::replication::configuration_modify_backup_policy_request::__set_is_disable(bool)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1096: undefined reference to `dsn::replication::configuration_modify_backup_policy_response::~configuration_modify_backup_policy_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1096: undefined reference to `dsn::replication::configuration_modify_backup_policy_response::~configuration_modify_backup_policy_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::enable_backup_policy(std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1116: undefined reference to `dsn::replication::configuration_modify_backup_policy_request::__set_is_disable(bool)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1125: undefined reference to `dsn::replication::configuration_modify_backup_policy_response::~configuration_modify_backup_policy_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1125: undefined reference to `dsn::replication::configuration_modify_backup_policy_response::~configuration_modify_backup_policy_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::ls_backup_policy()':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1189: undefined reference to `dsn::replication::configuration_query_backup_policy_response::~configuration_query_backup_policy_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1189: undefined reference to `dsn::replication::configuration_query_backup_policy_response::~configuration_query_backup_policy_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::query_backup_policy(std::vector<std::string, std::allocator<std::string> > const&, int)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1219: undefined reference to `dsn::replication::configuration_query_backup_policy_response::~configuration_query_backup_policy_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1219: undefined reference to `dsn::replication::configuration_query_backup_policy_response::~configuration_query_backup_policy_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::update_backup_policy(std::string const&, std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> > const&, long, int, std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1254: undefined reference to `dsn::replication::configuration_modify_backup_policy_request::__set_add_appids(std::vector<int, std::allocator<int> > const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1257: undefined reference to `dsn::replication::configuration_modify_backup_policy_request::__set_removal_appids(std::vector<int, std::allocator<int> > const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1260: undefined reference to `dsn::replication::configuration_modify_backup_policy_request::__set_new_backup_interval_sec(long)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1264: undefined reference to `dsn::replication::configuration_modify_backup_policy_request::__set_backup_history_count_to_keep(int)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1268: undefined reference to `dsn::replication::configuration_modify_backup_policy_request::__set_start_time(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1277: undefined reference to `dsn::replication::configuration_modify_backup_policy_response::~configuration_modify_backup_policy_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1277: undefined reference to `dsn::replication::configuration_modify_backup_policy_response::~configuration_modify_backup_policy_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::query_restore(int, bool)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1309: undefined reference to `dsn::replication::configuration_query_restore_response::~configuration_query_restore_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1309: undefined reference to `dsn::replication::configuration_query_restore_response::~configuration_query_restore_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::change_dup_status(std::string, int, dsn::replication::duplication_status::type)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1379: undefined reference to `dsn::replication::duplication_modify_request::__set_status(dsn::replication::duplication_status::type)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::update_dup_fail_mode(std::string, int, dsn::replication::duplication_fail_mode::type)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1387: undefined reference to `dsn::replication::_duplication_fail_mode_VALUES_TO_NAMES'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1386: undefined reference to `dsn::replication::_duplication_fail_mode_VALUES_TO_NAMES'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1393: undefined reference to `dsn::replication::duplication_modify_request::__set_fail_mode(dsn::replication::duplication_fail_mode::type)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::set_app_envs(std::string const&, std::vector<std::string, std::allocator<std::string> > const&, std::vector<std::string, std::allocator<std::string> > const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1482: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_app_name(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1483: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_keys(std::vector<std::string, std::allocator<std::string> > const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1484: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_values(std::vector<std::string, std::allocator<std::string> > const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1485: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_op(dsn::replication::app_env_operation::type)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::del_app_envs(std::string const&, std::vector<std::string, std::allocator<std::string> > const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1493: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_app_name(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1494: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_op(dsn::replication::app_env_operation::type)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1495: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_keys(std::vector<std::string, std::allocator<std::string> > const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1503: undefined reference to `dsn::replication::configuration_update_app_env_response::~configuration_update_app_env_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1503: undefined reference to `dsn::replication::configuration_update_app_env_response::~configuration_update_app_env_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::clear_app_envs(std::string const&, bool, std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1523: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_app_name(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1524: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_op(dsn::replication::app_env_operation::type)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1526: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_clear_prefix(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1529: undefined reference to `dsn::replication::configuration_update_app_env_request::__set_clear_prefix(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1538: undefined reference to `dsn::replication::configuration_update_app_env_response::~configuration_update_app_env_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1538: undefined reference to `dsn::replication::configuration_update_app_env_response::~configuration_update_app_env_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::ddd_diagnose(dsn::gpid, std::vector<dsn::replication::ddd_partition_info, std::allocator<dsn::replication::ddd_partition_info> >&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1566: undefined reference to `dsn::replication::ddd_diagnose_response::~ddd_diagnose_response()'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1566: undefined reference to `dsn::replication::ddd_diagnose_response::~ddd_diagnose_response()'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::detect_hotkey(dsn::rpc_address const&, dsn::replication::detect_hotkey_request&, dsn::replication::detect_hotkey_response&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1645: undefined reference to `dsn::replication::detect_hotkey_response::operator=(dsn::replication::detect_hotkey_response const&)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::start_partition_split(std::string const&, int)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1653: undefined reference to `dsn::replication::start_partition_split_request::__set_app_name(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1654: undefined reference to `dsn::replication::start_partition_split_request::__set_new_partition_count(int)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::control_partition_split(std::string const&, dsn::replication::split_control_type::type, int, int)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1686: undefined reference to `dsn::replication::control_split_request::__set_app_name(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1687: undefined reference to `dsn::replication::control_split_request::__set_control_type(dsn::replication::split_control_type::type)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1688: undefined reference to `dsn::replication::control_split_request::__set_parent_pidx(int)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1689: undefined reference to `dsn::replication::control_split_request::__set_old_partition_count(int)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::query_partition_split(std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1697: undefined reference to `dsn::replication::query_split_request::__set_app_name(std::string const&)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::start_app_manual_compact(std::string const&, bool, int, int)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1720: undefined reference to `dsn::replication::start_app_manual_compact_request::__set_trigger_time(long)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1721: undefined reference to `dsn::replication::start_app_manual_compact_request::__set_target_level(int)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1722: undefined reference to `dsn::replication::start_app_manual_compact_request::__set_bottommost(bool)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1724: undefined reference to `dsn::replication::start_app_manual_compact_request::__set_max_running_count(int)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::get_max_replica_count(std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1742: undefined reference to `dsn::replication::configuration_get_max_replica_count_request::__set_app_name(std::string const&)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::set_max_replica_count(std::string const&, int)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1752: undefined reference to `dsn::replication::configuration_set_max_replica_count_request::__set_app_name(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1753: undefined reference to `dsn::replication::configuration_set_max_replica_count_request::__set_max_replica_count(int)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::replication_ddl_client::rename_app(std::string const&, std::string const&)':
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1765: undefined reference to `dsn::replication::configuration_rename_app_request::__set_old_app_name(std::string const&)'
/data/sa_cluster/src/empiredan-pegasus-new/src/client/replication_ddl_client.cpp:1766: undefined reference to `dsn::replication::configuration_rename_app_request::__set_new_app_name(std::string const&)'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::start_bulk_load_request::start_bulk_load_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/bulk_load_types.h:161: undefined reference to `vtable for dsn::replication::start_bulk_load_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::start_bulk_load_response::start_bulk_load_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/bulk_load_types.h:228: undefined reference to `vtable for dsn::replication::start_bulk_load_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::control_bulk_load_request::control_bulk_load_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/bulk_load_types.h:828: undefined reference to `vtable for dsn::replication::control_bulk_load_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::control_bulk_load_response::control_bulk_load_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/bulk_load_types.h:880: undefined reference to `vtable for dsn::replication::control_bulk_load_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::query_bulk_load_request::query_bulk_load_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/bulk_load_types.h:933: undefined reference to `vtable for dsn::replication::query_bulk_load_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::query_bulk_load_response::query_bulk_load_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/bulk_load_types.h:986: undefined reference to `vtable for dsn::replication::query_bulk_load_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::clear_bulk_load_state_request::clear_bulk_load_state_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/bulk_load_types.h:1071: undefined reference to `vtable for dsn::replication::clear_bulk_load_state_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::clear_bulk_load_state_response::clear_bulk_load_state_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/bulk_load_types.h:1118: undefined reference to `vtable for dsn::replication::clear_bulk_load_state_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::duplication_add_request::duplication_add_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/duplication_types.h:79: undefined reference to `vtable for dsn::replication::duplication_add_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::duplication_add_response::duplication_add_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/duplication_types.h:140: undefined reference to `vtable for dsn::replication::duplication_add_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::duplication_modify_request::duplication_modify_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/duplication_types.h:206: undefined reference to `vtable for dsn::replication::duplication_modify_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::duplication_modify_response::duplication_modify_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/duplication_types.h:272: undefined reference to `vtable for dsn::replication::duplication_modify_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::duplication_query_request::duplication_query_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/duplication_types.h:403: undefined reference to `vtable for dsn::replication::duplication_query_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::duplication_query_response::duplication_query_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/duplication_types.h:451: undefined reference to `vtable for dsn::replication::duplication_query_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_restore_request::configuration_restore_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:138: undefined reference to `vtable for dsn::replication::configuration_restore_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_modify_backup_policy_request::configuration_modify_backup_policy_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:432: undefined reference to `vtable for dsn::replication::configuration_modify_backup_policy_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_modify_backup_policy_response::configuration_modify_backup_policy_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:521: undefined reference to `vtable for dsn::replication::configuration_modify_backup_policy_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_add_backup_policy_request::configuration_add_backup_policy_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:577: undefined reference to `vtable for dsn::replication::configuration_add_backup_policy_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_add_backup_policy_response::configuration_add_backup_policy_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:649: undefined reference to `vtable for dsn::replication::configuration_add_backup_policy_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_query_backup_policy_request::configuration_query_backup_policy_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:847: undefined reference to `vtable for dsn::replication::configuration_query_backup_policy_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_query_backup_policy_response::configuration_query_backup_policy_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:901: undefined reference to `vtable for dsn::replication::configuration_query_backup_policy_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_query_restore_request::configuration_query_restore_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:1076: undefined reference to `vtable for dsn::replication::configuration_query_restore_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::configuration_query_restore_response::configuration_query_restore_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:1124: undefined reference to `vtable for dsn::replication::configuration_query_restore_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::start_backup_app_request::start_backup_app_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:1182: undefined reference to `vtable for dsn::replication::start_backup_app_request'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::start_backup_app_response::start_backup_app_response()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:1242: undefined reference to `vtable for dsn::replication::start_backup_app_response'
../../client/libdsn_client.a(replication_ddl_client.cpp.o): In function `dsn::replication::query_backup_status_request::query_backup_status_request()':
/data/sa_cluster/src/empiredan-pegasus-new/build/debug/thrift-gen/backup_types.h:1383: undefined reference to `vtable for dsn::replication::query_backup_status_request'

......

collect2: error: ld returned 1 exit status
make[2]: *** [src/redis_protocol/proxy_ut/pegasus_rproxy_test] Error 1
make[2]: Leaving directory `/data/sa_cluster/src/empiredan-pegasus-new/build/debug'
make[1]: *** [src/redis_protocol/proxy_ut/CMakeFiles/pegasus_rproxy_test.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

......

make[2]: Leaving directory `/data/sa_cluster/src/empiredan-pegasus-new/build/debug'
[ 43%] Built target dsn_meta_server
make[1]: Leaving directory `/data/sa_cluster/src/empiredan-pegasus-new/build/debug'
make: *** [all] Error 2

Running command：
./run.sh build --test -t debug -v -j $(nproc) -c --clear_thirdparty

GCC version：
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-7/root/usr --mandir=/opt/rh/devtoolset-7/root/usr/share/man --infodir=/opt/rh/devtoolset-7/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-7.3.1-20180303/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)

CMake version: 3.27.6
OS Version:
Linux version 4.19.0-6.el7.ucloud.x86_64 (root@2d6b517b2939) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)) #1 SMP Wed Feb 12 07:32:16 UTC 2020

CentOS Linux release 7.6.1810 (Core)

This issue has been fixed by https://github.com/apache/incubator-pegasus/pull/1847.

repo: apache/incubator-pegasus


text:
review how easy it is to run manual tests

sbt test works fine on my laptop
the tests in this repo are simpler than the ones in https://github.com/apache/incubator-pekko
there could be some flaky tests that might cause issues when other people review this module (during a release, for instance)

I have tried to run sbt test for this module multiple times and they always succeeded. I have tried on the following configurations:

sbt 1.9.1 and Ubuntu Java 11.0.19 on Ubuntu 20.04.6 LTS
sbt 1.9.2 and Microsoft Java 11.0.14.1 on Ubuntu 20.04.6 LTS (Newly created devbox)

Is there anything I can help with for this issue?

Thanks @samueleresca - we can leave this open to see if anyone else has time to try out a build but it's good to get independent runs to see if the build is stable.

I have tried on my machine sbt test with the current HEAD b33f85110c75130661156bf6a4099342c5febcdf, with the following setup:

sbt 1.9.2
OpenJDK Runtime Environment Temurin-20.0.1+9 (build 20.0.1+9)
Apple M1 with Ventura 13.4.1 (c)

I got a few failed tests:
[info] *** 12 TESTS FAILED ***
[error] Failed tests:
[error] 	org.apache.pekko.http.impl.engine.http2.H2SpecIntegrationSpec

[...]

[info] *** 3 TESTS FAILED ***
[error] Failed tests:
[error] 	org.apache.pekko.http.scaladsl.ClientServerHttp2EnabledSpec
[error] 	org.apache.pekko.http.scaladsl.ClientServerSpec

A couple examples of such failed tests:
[info] - should report failure if bind fails *** FAILED *** (29 milliseconds)
[info]   org.apache.pekko.stream.impl.io.ConnectionSourceStage$$anon$1$$anon$2: Bind failed because of java.net.BindException: [localhost/127.0.0.1:1025] Address already in use
[info]   Cause: java.net.BindException: [localhost/127.0.0.1:1025] Address already in use

[info] - should complete a request/response when the request side immediately closes the connection after sending the request *** FAILED *** (7 seconds, 68 milliseconds)
[info]   java.lang.AssertionError: assertion failed: expected no StreamSupervisor children, but got [Actor[pekko://PekkoSpecWithMaterializer_/system/Materializers/StreamSupervisor-73/flow-124-0-headSink#-84814694]]

[info] H2Spec
--> [H2Spec must pass rule: 3.5. HTTP/2 Connection Preface] Start of log messages of test that [Failed(org.scalatest.exceptions.TestFailedException: 139 was not equal to 0)]
| [DEBUG] [07/22/2023 12:26:16.074] [pool-1-thread-1-ScalaTest-running-H2SpecIntegrationSpec] [WithLogCapturing(pekko://PekkoSpec_)] Logging started for test [H2Spec must pass rule: 3.5. HTTP/2 Connection Preface]
| [DEBUG] [07/22/2023 12:26:16.075] [pool-1-thread-1-ScalaTest-running-H2SpecIntegrationSpec] [H2SpecIntegrationSpec(pekko://PekkoSpec_)] Executing h2spec: List(/Users/lomig/programmation/github/incubator-pekko-http/http2-tests/target/h2spec_darwin_amd64/h2spec, -k, -t, -p, 55864, -j, target/test-reports/h2spec-junit-3.5.xml, -s, 3.5)
| [DEBUG] [07/22/2023 12:26:16.659] [pool-1-thread-1-ScalaTest-running-H2SpecIntegrationSpec] [WithLogCapturing(pekko://PekkoSpec_)] Logging finished for test [H2Spec must pass rule: 3.5. HTTP/2 Connection Preface]
<-- [H2Spec must pass rule: 3.5. HTTP/2 Connection Preface] End of log messages of test that [Failed(org.scalatest.exceptions.TestFailedException: 139 was not equal to 0)]
[info] - must pass rule: 3.5. HTTP/2 Connection Preface *** FAILED *** (591 milliseconds)
[info]   139 was not equal to 0 (H2SpecIntegrationSpec.scala:194)

--> [H2Spec must pass rule: 6.7. PING] Start of log messages of test that [Failed(org.scalatest.exceptions.TestFailedException: 139 was not equal to 0)]
| [DEBUG] [07/22/2023 12:26:16.825] [pool-1-thread-1-ScalaTest-running-H2SpecIntegrationSpec] [WithLogCapturing(pekko://PekkoSpec_)] Logging started for test [H2Spec must pass rule: 6.7. PING]
| [DEBUG] [07/22/2023 12:26:16.825] [pool-1-thread-1-ScalaTest-running-H2SpecIntegrationSpec] [H2SpecIntegrationSpec(pekko://PekkoSpec_)] Executing h2spec: List(/Users/lomig/programmation/github/incubator-pekko-http/http2-tests/target/h2spec_darwin_amd64/h2spec, -k, -t, -p, 55864, -j, target/test-reports/h2spec-junit-6.7.xml, -s, 6.7)
| [DEBUG] [07/22/2023 12:26:16.839] [pool-1-thread-1-ScalaTest-running-H2SpecIntegrationSpec] [WithLogCapturing(pekko://PekkoSpec_)] Logging finished for test [H2Spec must pass rule: 6.7. PING]
<-- [H2Spec must pass rule: 6.7. PING] End of log messages of test that [Failed(org.scalatest.exceptions.TestFailedException: 139 was not equal to 0)]
[info] - must pass rule: 6.7. PING *** FAILED *** (16 milliseconds)
[info]   139 was not equal to 0 (H2SpecIntegrationSpec.scala:194)

And more of those must pass rule: [...]

If these tests are flaky then I think what I wrote in https://github.com/apache/incubator-pekko-connectors/pull/198#issuecomment-1646559097 can apply here.

The tests are not flaky, I tried 4 times.
However I checked and the port 1025 was indeed already bound on my machine because it's the default one for Proton Mail Bridge (cmd: sudo lsof -nP -i4TCP:1025 | grep LISTEN). Killing that process fixed the failed tests in ClientServerHttp2EnabledSpec.
The tests consistently fail in org.apache.pekko.http.scaladsl.ClientServerSpec (1) and org.apache.pekko.http.impl.engine.http2.H2SpecIntegrationSpec (12).

Weird that it expects port 1025 to be available, maybe something to fix...
Not sure if someone already tested if the build runs on JDK 20. Maybe you
can try with JDK 8 or 11 and see if that works?
I general the HTTP tests should be pretty stable, much more so than the
pekko core ones.

With OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10) the tests don't finish and blow up with a java.lang.OutOfMemoryError: Java heap space.
I increased the heap to 4GB
sbt -v --java-home /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home -J-Xmx4g
More errors now:
[info] *** 6 SUITES ABORTED ***
[error] Error during tests:
[error] 	org.apache.pekko.http.impl.engine.http2.TelemetrySpiPlaintextSpec
[error] 	org.apache.pekko.http.impl.engine.http2.H2SpecIntegrationSpec
[error] 	org.apache.pekko.http.impl.engine.http2.Http2PersistentClientPlaintextSpec
[error] 	org.apache.pekko.http.impl.engine.http2.Http2PersistentClientTlsSpec
[error] 	org.apache.pekko.http.impl.engine.http2.TelemetrySpiCypherSpec
[error] 	org.apache.pekko.http.impl.engine.http2.Http2ClientServerSpec

A few of those NoClassDefFoundError:
[info] org.apache.pekko.http.scaladsl.GracefulTerminationSpec *** ABORTED *** (17 milliseconds)
[info]   java.lang.NoClassDefFoundError: Could not initialize class org.apache.pekko.http.impl.util.ExampleHttpContexts$

And a new one:
[info] Support for telemetry
[info] org.apache.pekko.http.impl.engine.http2.TelemetrySpiPlaintextSpec *** ABORTED *** (603 milliseconds)
[info]   java.lang.ExceptionInInitializerError:
[info]   at org.apache.pekko.http.impl.engine.http2.TelemetrySpiSpec.bindAndConnect(TelemetrySpiSpec.scala:105)
[...]
[info]   Cause: java.io.IOException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48)
[info]   at sun.security.pkcs12.PKCS12KeyStore.parseAlgParameters(PKCS12KeyStore.java:819)

Using JDK 11 OpenJDK Runtime Environment Homebrew (build 11.0.20+0)
I get again the same failures as with JDK 20:
[info] *** 12 TESTS FAILED ***
[error] Failed tests:
[info] Passed: Total 2, Failed 0, Errors 0, Passed 2
[error] 	org.apache.pekko.http.impl.engine.http2.H2SpecIntegrationSpec

[info] - must pass rule: 8.2. Server Push *** FAILED *** (18 milliseconds)
[info]   139 was not equal to 0 (H2SpecIntegrationSpec.scala:194)

I have no issues running these tests on my old Mac with Java 8 or Java 11. We haven't made much attempt to test Java 20 yet.
@lomigmegard The tests that fail for you rely on opening ports. Is there something on your machine blocking these tests from opening ports?

Just to be sure I disabled LittleSnitch and macOS firewall, still the same. The binding of the HTTP/2 server appears be working, a random port is taken.
Let me know if you have other ideas I can try, but we can also ignore my problems as it seems I am the only one have them. Note the files target/test-reports/h2spec-junit-$sectionNr.xml don't exist, combined with the error code 139 – usually a Seg Fault – might indicate some problem with the h2spec binary.
Ah and indeed, running it manually directly seg fault:
./http2-tests/target/h2spec_darwin_amd64/h2spec --dryrun
[1]    3295 segmentation fault   --dryrun

Looking at the build definition, we are at version 1.5.0 which is from 2016. Latest version is 2.6.0, replacing doesn't work as the download URL is then incorrect. I will open an issue to track this, and let you prioritize it.

Can you check again after the h2spec fix, @lomigmegard ?

@jrudolph the h2spec releases don't include one for Mac Silicon. https://github.com/summerwind/h2spec/releases
We might need eventually to support building h2spec from source or allowing users to provide their own h2spec runtime.

Ah, forgot that even the newest version does not support Arm yet.

Java 20 build is now part of nightly build. The one thing that I know of that doesn't work with Java 20 is building the Paradox HTML (doc build). This is because of Java reflection usage in the Paradox code and we will require to set --add-opens settings in our sbt build to allow this to run.

No, we are forcing older paradox versions in our plugins.sbt to stay compatible with Java 8. There's currently no version of paradox that works for both Java 8 and all later versions. After 1.0, we should drop Java 8 support (or at least build with Java 11 by default), so that we can update to a more recent paradox/parboiled version.

Surprisingly the new version of h2spec is working fine on my Apple Silicon, all the tests are green 🎉 Rosetta is probably running automatically on it (why not on the previous version is a not clear to me).
@pjfanning the note added in https://github.com/apache/incubator-pekko-http/pull/264 could be removed or tweaked to say it works transparently if Rosetta is installed (which most developer machine would have already).

source: gharchive/issue

authors: jrudolph lomigmegard mdedetrich pjfanning samueleresca

repo: apache/incubator-pekko-http

license_type: permissive

license_source: github-api


text:
link validator check broken by license-report

Not urgent. Just spotted the broken CI job.
https://github.com/apache/incubator-pekko/actions/runs/5042361658
fyi @mdedetrich

I just did a quick cursory look and aside from the link validator failing due to docs not being fully fixed (which is expected) it appears to also fail if use non https links, i.e.
 * Failure responses found.
 * Non-https URLs found (configure `non-https-accepted` if needed).
Error: Process completed with exit code 255.

Ah I see the issue now, sbt-license-report is putting links in the report that are derived from the pom fields in the transitive dependencies. Some of those fields are only http, so a low hanging fruit improvement can be enabling http.

is it possible to get link-validator to skip this file altogether?
Then we can validate only https is used in our main pages.

After checking both the example application.conf and the source-code I can't seem to find any such config.
Ill manually add the links for know, its a bit annoying but we only need to do it once and the dependencies don't get updated that often anyways.

authors: mdedetrich pjfanning

repo: apache/incubator-pekko