Implement the APIs for gRPC calls in client/server
Implement the APIs defined in the RdcStandaloneHandler to make gRPC call to daemon
Implement the APIs defined in the RdcAPIServiceImpl to handle the gRPC calls in daemon
Add two APIs to get all GPU groups and field groups: rdc_group_get_all_ids()
and rdc_group_field_all_ids()
Those two APIs are required by the rdci group and fieldgroup
sub-modules.
Change-Id: I066091423146dea180c16af212688ed43dc44611
[ROCm/rdc commit: 7ee29b6cdd]
This commit is contained in:
committed by
Chris Freehill
parent
3d8180e5af
commit
ce4890f88c
@@ -43,6 +43,63 @@ class RdcAPIServiceImpl final : public ::rdc::RdcAPI::Service {
|
||||
const ::rdc::GetDeviceAttributesRequest* request,
|
||||
::rdc::GetDeviceAttributesResponse* reply) override;
|
||||
|
||||
::grpc::Status CreateGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::CreateGpuGroupRequest* request,
|
||||
::rdc::CreateGpuGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status AddToGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::AddToGpuGroupRequest* request,
|
||||
::rdc::AddToGpuGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status GetGpuGroupInfo(::grpc::ServerContext* context,
|
||||
const ::rdc::GetGpuGroupInfoRequest* request,
|
||||
::rdc::GetGpuGroupInfoResponse* reply) override;
|
||||
|
||||
::grpc::Status GetGroupAllIds(::grpc::ServerContext* context,
|
||||
const ::rdc::Empty* request,
|
||||
::rdc::GetGroupAllIdsResponse* reply) override;
|
||||
|
||||
::grpc::Status DestroyGpuGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::DestroyGpuGroupRequest* request,
|
||||
::rdc::DestroyGpuGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status CreateFieldGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::CreateFieldGroupRequest* request,
|
||||
::rdc::CreateFieldGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status GetFieldGroupInfo(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFieldGroupInfoRequest* request,
|
||||
::rdc::GetFieldGroupInfoResponse* reply) override;
|
||||
|
||||
::grpc::Status GetFieldGroupAllIds(::grpc::ServerContext* context,
|
||||
const ::rdc::Empty* request,
|
||||
::rdc::GetFieldGroupAllIdsResponse* reply) override;
|
||||
|
||||
::grpc::Status DestroyFieldGroup(::grpc::ServerContext* context,
|
||||
const ::rdc::DestroyFieldGroupRequest* request,
|
||||
::rdc::DestroyFieldGroupResponse* reply) override;
|
||||
|
||||
::grpc::Status WatchFields(::grpc::ServerContext* context,
|
||||
const ::rdc::WatchFieldsRequest* request,
|
||||
::rdc::WatchFieldsResponse* reply) override;
|
||||
|
||||
::grpc::Status GetLatestFieldValue(::grpc::ServerContext* context,
|
||||
const ::rdc::GetLatestFieldValueRequest* request,
|
||||
::rdc::GetLatestFieldValueResponse* reply) override;
|
||||
|
||||
::grpc::Status GetFieldSince(::grpc::ServerContext* context,
|
||||
const ::rdc::GetFieldSinceRequest* request,
|
||||
::rdc::GetFieldSinceResponse* reply) override;
|
||||
|
||||
::grpc::Status UnWatchFields(::grpc::ServerContext* context,
|
||||
const ::rdc::UnWatchFieldsRequest* request,
|
||||
::rdc::UnWatchFieldsResponse* reply) override;
|
||||
|
||||
::grpc::Status UpdateAllFields(::grpc::ServerContext* context,
|
||||
const ::rdc::UpdateAllFieldsRequest* request,
|
||||
::rdc::UpdateAllFieldsResponse* reply) override;
|
||||
|
||||
|
||||
private:
|
||||
rdc_handle_t rdc_handle_;
|
||||
};
|
||||
|
||||
@@ -70,7 +70,7 @@ RdcAPIServiceImpl::~RdcAPIServiceImpl() {
|
||||
}
|
||||
uint32_t gpu_index_list[RDC_MAX_NUM_DEVICES];
|
||||
uint32_t count = 0;
|
||||
rdc_status_t result = rdc_get_all_devices(rdc_handle_,
|
||||
rdc_status_t result = rdc_device_get_all(rdc_handle_,
|
||||
gpu_index_list, &count);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
@@ -93,7 +93,7 @@ RdcAPIServiceImpl::~RdcAPIServiceImpl() {
|
||||
}
|
||||
uint32_t gpu_index = request->gpu_index();
|
||||
rdc_device_attributes_t attribute;
|
||||
rdc_status_t result = rdc_get_device_attributes(rdc_handle_,
|
||||
rdc_status_t result = rdc_device_get_attributes(rdc_handle_,
|
||||
gpu_index, &attribute);
|
||||
|
||||
::rdc::DeviceAttributes* attr = reply->mutable_attributes();
|
||||
@@ -104,6 +104,323 @@ RdcAPIServiceImpl::~RdcAPIServiceImpl() {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::CreateGpuGroup(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::CreateGpuGroupRequest* request,
|
||||
::rdc::CreateGpuGroupResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_gpu_group_t group_id = 0;
|
||||
rdc_status_t result = rdc_group_gpu_create(rdc_handle_,
|
||||
static_cast<rdc_group_type_t>(request->type()),
|
||||
request->group_name().c_str(), &group_id);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
reply->set_group_id(group_id);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::AddToGpuGroup(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::AddToGpuGroupRequest* request,
|
||||
::rdc::AddToGpuGroupResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_status_t result = rdc_group_gpu_add(rdc_handle_,
|
||||
request->group_id(), request->gpu_index());
|
||||
reply->set_status(result);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::GetGpuGroupInfo(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::GetGpuGroupInfoRequest* request,
|
||||
::rdc::GetGpuGroupInfoResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_group_info_t group_info;
|
||||
rdc_status_t result = rdc_group_gpu_get_info(
|
||||
rdc_handle_, request->group_id(), &group_info);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
reply->set_group_name(group_info.group_name);
|
||||
for (uint32_t i = 0; i < group_info.count; i++) {
|
||||
reply->add_entity_ids(group_info.entity_ids[i]);
|
||||
}
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::GetGroupAllIds(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::Empty* request,
|
||||
::rdc::GetGroupAllIdsResponse* reply) {
|
||||
if (!reply || !request || !context) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_gpu_group_t group_id_list[RDC_MAX_NUM_GROUPS];
|
||||
uint32_t count = 0;
|
||||
rdc_status_t result = rdc_group_get_all_ids(
|
||||
rdc_handle_, group_id_list, &count);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
reply->add_group_ids(group_id_list[i]);
|
||||
}
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::GetFieldGroupAllIds(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::Empty* request,
|
||||
::rdc::GetFieldGroupAllIdsResponse* reply) {
|
||||
if (!reply || !request || !context) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_field_grp_t field_group_id_list[RDC_MAX_NUM_FIELD_GROUPS];
|
||||
uint32_t count = 0;
|
||||
rdc_status_t result = rdc_group_field_get_all_ids(
|
||||
rdc_handle_, field_group_id_list, &count);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
reply->add_field_group_ids(field_group_id_list[i]);
|
||||
}
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::DestroyGpuGroup(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::DestroyGpuGroupRequest* request,
|
||||
::rdc::DestroyGpuGroupResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_status_t result = rdc_group_gpu_destroy(
|
||||
rdc_handle_, request->group_id());
|
||||
reply->set_status(result);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::CreateFieldGroup(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::CreateFieldGroupRequest* request,
|
||||
::rdc::CreateFieldGroupResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_field_grp_t field_group_id;
|
||||
uint32_t field_ids[RDC_MAX_FIELD_IDS_PER_FIELD_GROUP];
|
||||
for (int i = 0; i < request->field_ids_size(); i++) {
|
||||
field_ids[i] = request->field_ids(i);
|
||||
}
|
||||
rdc_status_t result = rdc_group_field_create(
|
||||
rdc_handle_, request->field_ids_size() , &field_ids[0],
|
||||
request->field_group_name().c_str(), &field_group_id);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
reply->set_field_group_id(field_group_id);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::GetFieldGroupInfo(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::GetFieldGroupInfoRequest* request,
|
||||
::rdc::GetFieldGroupInfoResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_field_group_info_t field_info;
|
||||
rdc_status_t result = rdc_group_field_get_info(
|
||||
rdc_handle_, request->field_group_id(), &field_info);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
reply->set_filed_group_name(field_info.group_name);
|
||||
for (uint32_t i = 0; i < field_info.count; i++) {
|
||||
reply->add_field_ids(field_info.field_ids[i]);
|
||||
}
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::DestroyFieldGroup(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::DestroyFieldGroupRequest* request,
|
||||
::rdc::DestroyFieldGroupResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_status_t result = rdc_group_field_destroy(
|
||||
rdc_handle_, request->field_group_id());
|
||||
reply->set_status(result);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::WatchFields(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::WatchFieldsRequest* request,
|
||||
::rdc::WatchFieldsResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_status_t result = rdc_field_watch(
|
||||
rdc_handle_, request->group_id(), request->field_group_id(),
|
||||
request->update_freq(), request->max_keep_age(),
|
||||
request->max_keep_samples());
|
||||
reply->set_status(result);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::GetLatestFieldValue(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::GetLatestFieldValueRequest* request,
|
||||
::rdc::GetLatestFieldValueResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_field_value value;
|
||||
rdc_status_t result = rdc_field_get_latest_value(
|
||||
rdc_handle_, request->gpu_index(), request->field_id(), &value);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
reply->set_field_id(value.field_id);
|
||||
reply->set_rdc_status(value.status);
|
||||
reply->set_ts(value.ts);
|
||||
reply->set_type(static_cast<::rdc::GetLatestFieldValueResponse_FieldType>
|
||||
(value.type));
|
||||
if (value.type == INTEGER) {
|
||||
reply->set_l_int(value.value.l_int);
|
||||
} else if (value.type == DOUBLE) {
|
||||
reply->set_dbl(value.value.dbl);
|
||||
} else if (value.type == STRING || value.type == BLOB) {
|
||||
reply->set_str(value.value.str);
|
||||
}
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::GetFieldSince(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::GetFieldSinceRequest* request,
|
||||
::rdc::GetFieldSinceResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_field_value value;
|
||||
uint64_t next_timestamp;
|
||||
rdc_status_t result = rdc_field_get_value_since(
|
||||
rdc_handle_, request->gpu_index(), request->field_id(),
|
||||
request->since_time_stamp(), &next_timestamp, &value);
|
||||
reply->set_status(result);
|
||||
if (result != RDC_ST_OK) {
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
reply->set_next_since_time_stamp(next_timestamp);
|
||||
reply->set_field_id(value.field_id);
|
||||
reply->set_rdc_status(value.status);
|
||||
reply->set_ts(value.ts);
|
||||
reply->set_type(static_cast<::rdc::GetFieldSinceResponse_FieldType>
|
||||
(value.type));
|
||||
if (value.type == INTEGER) {
|
||||
reply->set_l_int(value.value.l_int);
|
||||
} else if (value.type == DOUBLE) {
|
||||
reply->set_dbl(value.value.dbl);
|
||||
} else if (value.type == STRING || value.type == BLOB) {
|
||||
reply->set_str(value.value.str);
|
||||
}
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::UnWatchFields(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::UnWatchFieldsRequest* request,
|
||||
::rdc::UnWatchFieldsResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_status_t result = rdc_field_unwatch(
|
||||
rdc_handle_, request->group_id(), request->field_group_id());
|
||||
reply->set_status(result);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
::grpc::Status RdcAPIServiceImpl::UpdateAllFields(
|
||||
::grpc::ServerContext* context,
|
||||
const ::rdc::UpdateAllFieldsRequest* request,
|
||||
::rdc::UpdateAllFieldsResponse* reply) {
|
||||
(void)(context);
|
||||
if (!reply || !request) {
|
||||
return ::grpc::Status(::grpc::StatusCode::INTERNAL, "Empty contents");
|
||||
}
|
||||
|
||||
rdc_status_t result = rdc_field_update_all(
|
||||
rdc_handle_, request->wait_for_update());
|
||||
reply->set_status(result);
|
||||
|
||||
return ::grpc::Status::OK;
|
||||
}
|
||||
|
||||
|
||||
} // namespace rdc
|
||||
} // namespace amd
|
||||
|
||||
|
||||
Reference in New Issue
Block a user