From b94b3489c7c44fde3bf32f2115bf16b6d18ddd0a Mon Sep 17 00:00:00 2001 From: Chris Freehill Date: Wed, 10 Jun 2020 16:35:13 -0500 Subject: [PATCH] Make job id char array const in rdc api Also make adjustments to packaging. Change-Id: I73cc18ce67f833ff563cb1488b000b69b315979a [ROCm/rdc commit: 8e4d1e7f334a289b9655fe9e1935c619dadd3aa4] --- projects/rdc/docs/RDC_API_Manual.pdf | Bin 183333 -> 183415 bytes projects/rdc/include/rdc/rdc.h | 11 ++++----- .../rdc/include/rdc_lib/RdcCacheManager.h | 8 +++--- projects/rdc/include/rdc_lib/RdcHandler.h | 8 +++--- projects/rdc/include/rdc_lib/RdcWatchTable.h | 6 ++--- .../rdc_lib/impl/RdcCacheManagerImpl.h | 8 +++--- .../include/rdc_lib/impl/RdcEmbeddedHandler.h | 8 +++--- .../rdc_lib/impl/RdcStandaloneHandler.h | 8 +++--- .../include/rdc_lib/impl/RdcWatchTableImpl.h | 6 ++--- .../rdc_libs/bootstrap/src/RdcBootStrap.cc | 11 +++++---- .../rdc_libs/rdc/src/RdcCacheManagerImpl.cc | 8 +++--- .../rdc_libs/rdc/src/RdcEmbeddedHandler.cc | 8 +++--- .../rdc/rdc_libs/rdc/src/RdcWatchTableImpl.cc | 6 ++--- .../rdc_client/src/RdcStandaloneHandler.cc | 10 ++++---- projects/rdc/server/CMakeLists.txt | 23 ++++++++++++------ 15 files changed, 68 insertions(+), 61 deletions(-) diff --git a/projects/rdc/docs/RDC_API_Manual.pdf b/projects/rdc/docs/RDC_API_Manual.pdf index 8f7cd451a1af9555fdcef49e1d0229f4afc739bb..111f160622b3f114caa8e487e9ee99c4b12106e5 100644 GIT binary patch delta 35001 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 delta 34832 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 Z{vYlBKn0gh%mN<@I5;v2B_%~qMhd}#vrGU0 diff --git a/projects/rdc/include/rdc/rdc.h b/projects/rdc/include/rdc/rdc.h index 09bf726dac..2d33294dfe 100755 --- a/projects/rdc/include/rdc/rdc.h +++ b/projects/rdc/include/rdc/rdc.h @@ -418,7 +418,7 @@ rdc_status_t rdc_disconnect(rdc_handle_t p_rdc_handle); * @retval ::RDC_ST_OK is returned upon successful call. */ rdc_status_t rdc_job_start_stats(rdc_handle_t p_rdc_handle, - rdc_gpu_group_t group_id, char job_id[64], uint64_t update_freq); + rdc_gpu_group_t group_id, const char job_id[64], uint64_t update_freq); /** * @brief Get the stats of the job using the job id. @@ -435,8 +435,8 @@ rdc_status_t rdc_job_start_stats(rdc_handle_t p_rdc_handle, * * @retval ::RDC_ST_OK is returned upon successful call. */ -rdc_status_t rdc_job_get_stats(rdc_handle_t p_rdc_handle, char job_id[64], - rdc_job_info_t* p_job_info); +rdc_status_t rdc_job_get_stats(rdc_handle_t p_rdc_handle, + const char job_id[64], rdc_job_info_t* p_job_info); /** * @brief Request RDC to stop watching the stats of the job @@ -452,7 +452,7 @@ rdc_status_t rdc_job_get_stats(rdc_handle_t p_rdc_handle, char job_id[64], * @retval ::RDC_ST_OK is returned upon successful call. */ rdc_status_t rdc_job_stop_stats(rdc_handle_t p_rdc_handle, - char job_id[64]); + const char job_id[64]); /** * @brief Request RDC to stop tracking the job given by job_id @@ -467,8 +467,7 @@ rdc_status_t rdc_job_stop_stats(rdc_handle_t p_rdc_handle, * * @retval ::RDC_ST_OK is returned upon successful call. */ -rdc_status_t rdc_job_remove(rdc_handle_t p_rdc_handle, - char job_id[64]); +rdc_status_t rdc_job_remove(rdc_handle_t p_rdc_handle, const char job_id[64]); /** * @brief Request RDC to stop tracking all the jobs diff --git a/projects/rdc/include/rdc_lib/RdcCacheManager.h b/projects/rdc/include/rdc_lib/RdcCacheManager.h index 0883bf8f7f..0052639d26 100644 --- a/projects/rdc/include/rdc_lib/RdcCacheManager.h +++ b/projects/rdc/include/rdc_lib/RdcCacheManager.h @@ -46,18 +46,18 @@ class RdcCacheManager { uint64_t max_keep_samples, double max_keep_age) = 0; virtual std::string get_cache_stats() = 0; - virtual rdc_status_t rdc_job_get_stats(char jobId[64], + virtual rdc_status_t rdc_job_get_stats(const char job_id[64], const rdc_gpu_gauges_t& gpu_gauges, rdc_job_info_t* p_job_info) = 0; - virtual rdc_status_t rdc_job_start_stats(char jobId[64], + virtual rdc_status_t rdc_job_start_stats(const char job_id[64], const rdc_group_info_t& group, const rdc_field_group_info_t& finfo, const rdc_gpu_gauges_t& gpu_gauges) = 0; - virtual rdc_status_t rdc_job_stop_stats(char job_id[64], + virtual rdc_status_t rdc_job_stop_stats(const char job_id[64], const rdc_gpu_gauges_t& gpu_gauge) = 0; virtual rdc_status_t rdc_update_job_stats(uint32_t gpu_index, const std::string& job_id, const rdc_field_value& value) = 0; - virtual rdc_status_t rdc_job_remove(char job_id[64]) = 0; + virtual rdc_status_t rdc_job_remove(const char job_id[64]) = 0; virtual rdc_status_t rdc_job_remove_all() = 0; virtual ~RdcCacheManager() {} diff --git a/projects/rdc/include/rdc_lib/RdcHandler.h b/projects/rdc/include/rdc_lib/RdcHandler.h index c5071bafaa..a89a9a8e89 100644 --- a/projects/rdc/include/rdc_lib/RdcHandler.h +++ b/projects/rdc/include/rdc_lib/RdcHandler.h @@ -33,11 +33,11 @@ class RdcHandler { public: // Job API virtual rdc_status_t rdc_job_start_stats(rdc_gpu_group_t groupId, - char job_id[64], uint64_t update_freq) = 0; - virtual rdc_status_t rdc_job_get_stats(char jobId[64], + const char job_id[64], uint64_t update_freq) = 0; + virtual rdc_status_t rdc_job_get_stats(const char jobId[64], rdc_job_info_t* p_job_info)= 0; - virtual rdc_status_t rdc_job_stop_stats(char job_id[64]) = 0; - virtual rdc_status_t rdc_job_remove(char job_id[64]) = 0; + virtual rdc_status_t rdc_job_stop_stats(const char job_id[64]) = 0; + virtual rdc_status_t rdc_job_remove(const char job_id[64]) = 0; virtual rdc_status_t rdc_job_remove_all() = 0; // Discovery API diff --git a/projects/rdc/include/rdc_lib/RdcWatchTable.h b/projects/rdc/include/rdc_lib/RdcWatchTable.h index 4adb2c39b7..1597f73011 100644 --- a/projects/rdc/include/rdc_lib/RdcWatchTable.h +++ b/projects/rdc/include/rdc_lib/RdcWatchTable.h @@ -36,11 +36,11 @@ class RdcWatchTable { virtual rdc_status_t rdc_field_update_all() = 0; virtual rdc_status_t rdc_job_start_stats(rdc_gpu_group_t group_id, - char job_id[64], uint64_t update_freq, + const char job_id[64], uint64_t update_freq, const rdc_gpu_gauges_t& gpu_gauge) = 0; - virtual rdc_status_t rdc_job_stop_stats(char job_id[64], + virtual rdc_status_t rdc_job_stop_stats(const char job_id[64], const rdc_gpu_gauges_t& gpu_gauge) = 0; - virtual rdc_status_t rdc_job_remove(char job_id[64]) = 0; + virtual rdc_status_t rdc_job_remove(const char job_id[64]) = 0; virtual rdc_status_t rdc_job_remove_all() = 0; virtual rdc_status_t rdc_field_watch(rdc_gpu_group_t group_id, diff --git a/projects/rdc/include/rdc_lib/impl/RdcCacheManagerImpl.h b/projects/rdc/include/rdc_lib/impl/RdcCacheManagerImpl.h index f8bf9d9ebd..2a16fa671a 100644 --- a/projects/rdc/include/rdc_lib/impl/RdcCacheManagerImpl.h +++ b/projects/rdc/include/rdc_lib/impl/RdcCacheManagerImpl.h @@ -81,19 +81,19 @@ class RdcCacheManagerImpl: public RdcCacheManager { uint64_t max_keep_samples, double max_keep_age) override; std::string get_cache_stats() override; - rdc_status_t rdc_job_get_stats(char job_id[64], + rdc_status_t rdc_job_get_stats(const char job_id[64], const rdc_gpu_gauges_t& gpu_gauges, rdc_job_info_t* p_job_info) override; - rdc_status_t rdc_job_start_stats(char job_id[64], + rdc_status_t rdc_job_start_stats(const char job_id[64], const rdc_group_info_t& group, const rdc_field_group_info_t& finfo, const rdc_gpu_gauges_t& gpu_gauges) override; - rdc_status_t rdc_job_stop_stats(char job_id[64], + rdc_status_t rdc_job_stop_stats(const char job_id[64], const rdc_gpu_gauges_t& gpu_gauge) override; rdc_status_t rdc_update_job_stats(uint32_t gpu_index, const std::string& job_id, const rdc_field_value& value) override; - rdc_status_t rdc_job_remove(char job_id[64]) override; + rdc_status_t rdc_job_remove(const char job_id[64]) override; rdc_status_t rdc_job_remove_all() override; private: diff --git a/projects/rdc/include/rdc_lib/impl/RdcEmbeddedHandler.h b/projects/rdc/include/rdc_lib/impl/RdcEmbeddedHandler.h index cb440f1c16..2b09664c15 100644 --- a/projects/rdc/include/rdc_lib/impl/RdcEmbeddedHandler.h +++ b/projects/rdc/include/rdc_lib/impl/RdcEmbeddedHandler.h @@ -37,11 +37,11 @@ class RdcEmbeddedHandler: public RdcHandler { public: // Job API rdc_status_t rdc_job_start_stats(rdc_gpu_group_t groupId, - char job_id[64], uint64_t update_freq) override; - rdc_status_t rdc_job_get_stats(char jobId[64], + const char job_id[64], uint64_t update_freq) override; + rdc_status_t rdc_job_get_stats(const char jobId[64], rdc_job_info_t* p_job_info) override; - rdc_status_t rdc_job_stop_stats(char job_id[64]) override; - rdc_status_t rdc_job_remove(char job_id[64]) override; + rdc_status_t rdc_job_stop_stats(const char job_id[64]) override; + rdc_status_t rdc_job_remove(const char job_id[64]) override; rdc_status_t rdc_job_remove_all() override; // Discovery API diff --git a/projects/rdc/include/rdc_lib/impl/RdcStandaloneHandler.h b/projects/rdc/include/rdc_lib/impl/RdcStandaloneHandler.h index 8573828213..30267ee9ac 100644 --- a/projects/rdc/include/rdc_lib/impl/RdcStandaloneHandler.h +++ b/projects/rdc/include/rdc_lib/impl/RdcStandaloneHandler.h @@ -33,11 +33,11 @@ class RdcStandaloneHandler: public RdcHandler { public: // Job RdcAPI rdc_status_t rdc_job_start_stats(rdc_gpu_group_t groupId, - char job_id[64], uint64_t update_freq) override; - rdc_status_t rdc_job_get_stats(char jobId[64], + const char job_id[64], uint64_t update_freq) override; + rdc_status_t rdc_job_get_stats(const char jobId[64], rdc_job_info_t* p_job_info) override; - rdc_status_t rdc_job_stop_stats(char job_id[64]) override; - rdc_status_t rdc_job_remove(char job_id[64]) override; + rdc_status_t rdc_job_stop_stats(const char job_id[64]) override; + rdc_status_t rdc_job_remove(const char job_id[64]) override; rdc_status_t rdc_job_remove_all() override; // Discovery RdcAPI diff --git a/projects/rdc/include/rdc_lib/impl/RdcWatchTableImpl.h b/projects/rdc/include/rdc_lib/impl/RdcWatchTableImpl.h index 15977f2a59..894860f562 100644 --- a/projects/rdc/include/rdc_lib/impl/RdcWatchTableImpl.h +++ b/projects/rdc/include/rdc_lib/impl/RdcWatchTableImpl.h @@ -54,11 +54,11 @@ struct JobWatchTableEntry { class RdcWatchTableImpl : public RdcWatchTable { public: rdc_status_t rdc_job_start_stats(rdc_gpu_group_t group_id, - char job_id[64], uint64_t update_freq, + const char job_id[64], uint64_t update_freq, const rdc_gpu_gauges_t& gpu_gauge) override; - rdc_status_t rdc_job_stop_stats(char job_id[64], + rdc_status_t rdc_job_stop_stats(const char job_id[64], const rdc_gpu_gauges_t& gpu_gauge) override; - rdc_status_t rdc_job_remove(char job_id[64]) override; + rdc_status_t rdc_job_remove(const char job_id[64]) override; rdc_status_t rdc_job_remove_all() override; rdc_status_t rdc_field_watch(rdc_gpu_group_t group_id, diff --git a/projects/rdc/rdc_libs/bootstrap/src/RdcBootStrap.cc b/projects/rdc/rdc_libs/bootstrap/src/RdcBootStrap.cc index d09bf8abf5..e078827fa2 100644 --- a/projects/rdc/rdc_libs/bootstrap/src/RdcBootStrap.cc +++ b/projects/rdc/rdc_libs/bootstrap/src/RdcBootStrap.cc @@ -112,8 +112,8 @@ rdc_status_t rdc_field_update_all(rdc_handle_t p_rdc_handle, rdc_field_update_all(wait_for_update); } -rdc_status_t rdc_job_get_stats(rdc_handle_t p_rdc_handle, char job_id[64] , - rdc_job_info_t* p_job_info) { +rdc_status_t rdc_job_get_stats(rdc_handle_t p_rdc_handle, + const char job_id[64], rdc_job_info_t* p_job_info) { if (!p_rdc_handle) { return RDC_ST_INVALID_HANDLER; } @@ -123,7 +123,7 @@ rdc_status_t rdc_job_get_stats(rdc_handle_t p_rdc_handle, char job_id[64] , } rdc_status_t rdc_job_start_stats(rdc_handle_t p_rdc_handle, - rdc_gpu_group_t groupId, char job_id[64], + rdc_gpu_group_t groupId, const char job_id[64], uint64_t update_freq) { if (!p_rdc_handle) { return RDC_ST_INVALID_HANDLER; @@ -133,7 +133,7 @@ rdc_status_t rdc_job_start_stats(rdc_handle_t p_rdc_handle, rdc_job_start_stats(groupId, job_id, update_freq); } -rdc_status_t rdc_job_remove(rdc_handle_t p_rdc_handle, char job_id[64]) { +rdc_status_t rdc_job_remove(rdc_handle_t p_rdc_handle, const char job_id[64]) { if (!p_rdc_handle) { return RDC_ST_INVALID_HANDLER; } @@ -152,7 +152,8 @@ rdc_status_t rdc_job_remove_all(rdc_handle_t p_rdc_handle) { } -rdc_status_t rdc_job_stop_stats(rdc_handle_t p_rdc_handle, char job_id[64] ) { +rdc_status_t rdc_job_stop_stats(rdc_handle_t p_rdc_handle, + const char job_id[64] ) { if (!p_rdc_handle) { return RDC_ST_INVALID_HANDLER; } diff --git a/projects/rdc/rdc_libs/rdc/src/RdcCacheManagerImpl.cc b/projects/rdc/rdc_libs/rdc/src/RdcCacheManagerImpl.cc index 22cc2257fc..110529bef8 100644 --- a/projects/rdc/rdc_libs/rdc/src/RdcCacheManagerImpl.cc +++ b/projects/rdc/rdc_libs/rdc/src/RdcCacheManagerImpl.cc @@ -175,7 +175,7 @@ rdc_status_t RdcCacheManagerImpl::rdc_update_cache(uint32_t gpu_index, return RDC_ST_OK; } -rdc_status_t RdcCacheManagerImpl::rdc_job_remove(char job_id[64]) { +rdc_status_t RdcCacheManagerImpl::rdc_job_remove(const char job_id[64]) { std::lock_guard guard(cache_mutex_); cache_jobs_.erase(job_id); return RDC_ST_OK; @@ -250,7 +250,7 @@ void RdcCacheManagerImpl::set_summary(const FieldSummaryStats & stats, summary.average += gpu.average; } -rdc_status_t RdcCacheManagerImpl::rdc_job_get_stats(char jobId[64], +rdc_status_t RdcCacheManagerImpl::rdc_job_get_stats(const char jobId[64], const rdc_gpu_gauges_t& gpu_gauges, rdc_job_info_t* p_job_info) { std::lock_guard guard(cache_mutex_); @@ -384,7 +384,7 @@ rdc_status_t RdcCacheManagerImpl::rdc_job_get_stats(char jobId[64], return RDC_ST_OK; } -rdc_status_t RdcCacheManagerImpl::rdc_job_start_stats(char job_id[64], +rdc_status_t RdcCacheManagerImpl::rdc_job_start_stats(const char job_id[64], const rdc_group_info_t& ginfo, const rdc_field_group_info_t& finfo, const rdc_gpu_gauges_t& gpu_gauges) { RdcJobStatsCacheEntry cacheEntry; @@ -426,7 +426,7 @@ rdc_status_t RdcCacheManagerImpl::rdc_job_start_stats(char job_id[64], } -rdc_status_t RdcCacheManagerImpl::rdc_job_stop_stats(char job_id[64], +rdc_status_t RdcCacheManagerImpl::rdc_job_stop_stats(const char job_id[64], const rdc_gpu_gauges_t& gpu_gauges) { std::lock_guard guard(cache_mutex_); auto job_stats = cache_jobs_.find(job_id); diff --git a/projects/rdc/rdc_libs/rdc/src/RdcEmbeddedHandler.cc b/projects/rdc/rdc_libs/rdc/src/RdcEmbeddedHandler.cc index bd02f1b7d6..43d271f972 100644 --- a/projects/rdc/rdc_libs/rdc/src/RdcEmbeddedHandler.cc +++ b/projects/rdc/rdc_libs/rdc/src/RdcEmbeddedHandler.cc @@ -85,7 +85,7 @@ RdcEmbeddedHandler::~RdcEmbeddedHandler() { // JOB API rdc_status_t RdcEmbeddedHandler::rdc_job_start_stats(rdc_gpu_group_t groupId, - char job_id[64], uint64_t update_freq) { + const char job_id[64], uint64_t update_freq) { rdc_gpu_gauges_t gpu_gauges; rdc_status_t status = get_gpu_gauges(&gpu_gauges); if (status != RDC_ST_OK) return status; @@ -136,7 +136,7 @@ rdc_status_t RdcEmbeddedHandler::get_gpu_gauges(rdc_gpu_gauges_t* gpu_gauges) { return RDC_ST_OK; } -rdc_status_t RdcEmbeddedHandler::rdc_job_get_stats(char job_id[64], +rdc_status_t RdcEmbeddedHandler::rdc_job_get_stats(const char job_id[64], rdc_job_info_t* p_job_info) { if (p_job_info == nullptr) { return RDC_ST_BAD_PARAMETER; @@ -149,7 +149,7 @@ rdc_status_t RdcEmbeddedHandler::rdc_job_get_stats(char job_id[64], return cache_mgr_->rdc_job_get_stats(job_id, gpu_gauges, p_job_info); } -rdc_status_t RdcEmbeddedHandler::rdc_job_stop_stats(char job_id[64]) { +rdc_status_t RdcEmbeddedHandler::rdc_job_stop_stats(const char job_id[64]) { rdc_gpu_gauges_t gpu_gauges; rdc_status_t status = get_gpu_gauges(&gpu_gauges); if (status != RDC_ST_OK) return status; @@ -157,7 +157,7 @@ rdc_status_t RdcEmbeddedHandler::rdc_job_stop_stats(char job_id[64]) { return watch_table_->rdc_job_stop_stats(job_id, gpu_gauges); } -rdc_status_t RdcEmbeddedHandler::rdc_job_remove(char job_id[64]) { +rdc_status_t RdcEmbeddedHandler::rdc_job_remove(const char job_id[64]) { return watch_table_->rdc_job_remove(job_id); } diff --git a/projects/rdc/rdc_libs/rdc/src/RdcWatchTableImpl.cc b/projects/rdc/rdc_libs/rdc/src/RdcWatchTableImpl.cc index 7ed2663ae6..2114e7b25a 100644 --- a/projects/rdc/rdc_libs/rdc/src/RdcWatchTableImpl.cc +++ b/projects/rdc/rdc_libs/rdc/src/RdcWatchTableImpl.cc @@ -41,7 +41,7 @@ RdcWatchTableImpl::RdcWatchTableImpl(const RdcGroupSettingsPtr& group_settings, } rdc_status_t RdcWatchTableImpl::rdc_job_start_stats(rdc_gpu_group_t group_id, - char job_id[64], uint64_t update_freq, + const char job_id[64], uint64_t update_freq, const rdc_gpu_gauges_t& gpu_gauges) { do { //< lock guard for thread safe std::lock_guard guard(watch_mutex_); @@ -92,7 +92,7 @@ rdc_status_t RdcWatchTableImpl::rdc_job_start_stats(rdc_gpu_group_t group_id, return result; } -rdc_status_t RdcWatchTableImpl::rdc_job_stop_stats(char job_id[64], +rdc_status_t RdcWatchTableImpl::rdc_job_stop_stats(const char job_id[64], const rdc_gpu_gauges_t& gpu_gauge) { uint32_t job_group_id; do { //< lock guard for thread safe @@ -119,7 +119,7 @@ rdc_status_t RdcWatchTableImpl::rdc_job_stop_stats(char job_id[64], return result; } -rdc_status_t RdcWatchTableImpl::rdc_job_remove(char job_id[64]) { +rdc_status_t RdcWatchTableImpl::rdc_job_remove(const char job_id[64]) { rdc_gpu_gauges_t gpu_gauge; rdc_job_stop_stats(job_id, gpu_gauge); return cache_mgr_->rdc_job_remove(job_id); diff --git a/projects/rdc/rdc_libs/rdc_client/src/RdcStandaloneHandler.cc b/projects/rdc/rdc_libs/rdc_client/src/RdcStandaloneHandler.cc index 12d63318ef..b810f66d54 100644 --- a/projects/rdc/rdc_libs/rdc_client/src/RdcStandaloneHandler.cc +++ b/projects/rdc/rdc_libs/rdc_client/src/RdcStandaloneHandler.cc @@ -61,8 +61,8 @@ rdc_status_t RdcStandaloneHandler::error_handle(::grpc::Status status, } // JOB RdcAPI -rdc_status_t RdcStandaloneHandler::rdc_job_start_stats(rdc_gpu_group_t groupId, - char job_id[64], uint64_t update_freq) { +rdc_status_t RdcStandaloneHandler::rdc_job_start_stats( + rdc_gpu_group_t groupId, const char job_id[64], uint64_t update_freq) { ::rdc::StartJobStatsRequest request; ::rdc::StartJobStatsResponse reply; ::grpc::ClientContext context; @@ -133,7 +133,7 @@ bool RdcStandaloneHandler::copy_gpu_usage_info( return true; } -rdc_status_t RdcStandaloneHandler::rdc_job_get_stats(char job_id[64], +rdc_status_t RdcStandaloneHandler::rdc_job_get_stats(const char job_id[64], rdc_job_info_t* p_job_info) { if (!p_job_info) { return RDC_ST_BAD_PARAMETER; @@ -157,7 +157,7 @@ rdc_status_t RdcStandaloneHandler::rdc_job_get_stats(char job_id[64], return RDC_ST_OK; } -rdc_status_t RdcStandaloneHandler::rdc_job_stop_stats(char job_id[64]) { +rdc_status_t RdcStandaloneHandler::rdc_job_stop_stats(const char job_id[64]) { ::rdc::StopJobStatsRequest request; ::rdc::StopJobStatsResponse reply; ::grpc::ClientContext context; @@ -169,7 +169,7 @@ rdc_status_t RdcStandaloneHandler::rdc_job_stop_stats(char job_id[64]) { return err_status; } -rdc_status_t RdcStandaloneHandler::rdc_job_remove(char job_id[64]) { +rdc_status_t RdcStandaloneHandler::rdc_job_remove(const char job_id[64]) { ::rdc::RemoveJobRequest request; ::rdc::RemoveJobResponse reply; ::grpc::ClientContext context; diff --git a/projects/rdc/server/CMakeLists.txt b/projects/rdc/server/CMakeLists.txt index d7164bdbe4..06b4817751 100755 --- a/projects/rdc/server/CMakeLists.txt +++ b/projects/rdc/server/CMakeLists.txt @@ -43,11 +43,18 @@ message("") set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE STRING "Location of RDC client library source code.") -set(CMAKE_INSTALL_PREFIX ${RDC_SERVER_ROOT_PATH} + +message("CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") +message("CPACK_PACKAGING_INSTALL_PREFIX=${CPACK_PACKAGING_INSTALL_PREFIX}") +if (NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX ${RDC_SERVER_ROOT_PATH} CACHE STRING "Default installation directory.") +endif() + +if (NOT DEFINED CPACK_PACKAGING_INSTALL_PREFIX) set(CPACK_PACKAGING_INSTALL_PREFIX ${RDC_SERVER_ROOT_PATH} CACHE STRING "Default packaging prefix.") - +endif() ## Compiler flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -m64") @@ -57,9 +64,9 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2 -std=c++11 ") if ("${CMAKE_BUILD_TYPE}" STREQUAL Release) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") -else () +else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb -O0 -DDEBUG") -endif () +endif() set(SRC_DIR "src") set(INC_DIR "include/${RDC}") @@ -98,11 +105,11 @@ target_link_libraries(${SERVER_DAEMON_EXE} pthread rt grpc grpc++ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SERVER_DAEMON_EXE} PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE - DESTINATION ${RDC_SERVER_ROOT_PATH}usr/sbin - COMPONENT ${SERVER_COMPONENT}) + DESTINATION usr/sbin + COMPONENT ${SERVER_COMPONENT}) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SERVICE_FILE_NAME} - DESTINATION ${RDC_SERVER_ROOT_PATH}lib/systemd/system - COMPONENT ${SERVER_COMPONENT}) + DESTINATION lib/systemd/system + COMPONENT ${SERVER_COMPONENT}) message("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&") message(" Finished Cmake Server ")