Loading include/kinetic_admin_client.h +22 −0 Original line number Diff line number Diff line Loading @@ -236,4 +236,26 @@ KineticStatus KineticAdminClient_SetACL(KineticSession * const session, KineticStatus KineticAdminClient_UpdateFirmware(KineticSession * const session, char const * const fw_path); /** * @brief Executes a `Media Scan` operation to perform media scan operation to the Kinetic drive. * * @param session The connected KineticSession to use for the operation. * @param operation KineticMediaScan_Operation pointer.. * * @return Returns the resulting KineticStatus. */ KineticStatus KineticAdminClient_MediaScan(KineticSession * const session, const KineticMediaScan_Operation* operation, KineticCommand_Priority priority); /** * @brief Executes a `Media Optimize` operation to perform media optimize operation to the Kinetic drive. * * @param session The connected KineticSession to use for the operation. * @param operation KineticMediaOptimize_Operation pointer.. * * @return Returns the resulting KineticStatus. */ KineticStatus KineticAdminClient_MediaOptimize(KineticSession * const session, const KineticMediaOptimize_Operation* operation, KineticCommand_Priority priority); #endif // _KINETIC_ADMIN_CLIENT_H include/kinetic_types.h +15 −0 Original line number Diff line number Diff line Loading @@ -473,6 +473,21 @@ struct _KineticP2P_Operation { KineticP2P_OperationData* operations; ///> Pointer to operations array which must remain valid until operations complete }; typedef struct KineticMedia_Operation{ char* start_key; char* end_key; bool start_key_inclusive; bool end_key_inclusive; }KineticMediaScan_Operation, KineticMediaOptimize_Operation; typedef enum _KineticCommand_Priority{ PRIORITY_NORMAL, PRIORITY_LOWEST, PRIORITY_LOWER, PRIORITY_HIGHER, PRIORITY_HIGHEST } KineticCommand_Priority; /** * @brief Limit for P2P operations. */ Loading src/lib/kinetic_admin_client.c +32 −0 Original line number Diff line number Diff line Loading @@ -288,3 +288,35 @@ KineticStatus KineticAdminClient_UpdateFirmware(KineticSession * const session, return KineticController_ExecuteOperation(operation, NULL); } KineticStatus KineticAdminClient_MediaScan(KineticSession * const session, const KineticMediaScan_Operation* mediascan_operation, KineticCommand_Priority priority) { KINETIC_ASSERT(session != NULL); KineticOperation* operation = KineticAllocator_NewOperation(session); if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;} KineticStatus status = KineticBuilder_BuildMediaScan(operation, mediascan_operation, priority); if (status != KINETIC_STATUS_SUCCESS) { return status; } return KineticController_ExecuteOperation(operation, NULL); } KineticStatus KineticAdminClient_MediaOptimize(KineticSession * const session, const KineticMediaOptimize_Operation* mediaoptimize_operation, KineticCommand_Priority priority) { KINETIC_ASSERT(session != NULL); KineticOperation* operation = KineticAllocator_NewOperation(session); if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;} KineticStatus status = KineticBuilder_BuildMediaOptimize(operation, mediaoptimize_operation, priority); if (status != KINETIC_STATUS_SUCCESS) { return status; } return KineticController_ExecuteOperation(operation, NULL); } src/lib/kinetic_builder.c +75 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include "kinetic_request.h" #include "kinetic_acl.h" #include "kinetic_callbacks.h" #include "kinetic_types_internal.h" #include <stdlib.h> #include <errno.h> Loading Loading @@ -417,6 +418,80 @@ KineticStatus KineticBuilder_BuildSetACL(KineticOperation* const op, return KINETIC_STATUS_SUCCESS; } static void initRangeAndPriority(KineticOperation* const op, const struct KineticMedia_Operation* media_operation, KineticCommand_Priority priority) { op->request->message.command.header->has_messagetype = true; op->request->command->body = &op->request->message.body; op->request->command->body->security = &op->request->message.security; op->request->command->body->range = &op->request->message.keyRange; char *data = media_operation->start_key == NULL ? "" : media_operation->start_key; op->request->command->body->range->has_startkey = true; op->request->command->body->range->startkey = (ProtobufCBinaryData) { .data = (uint8_t *)data, .len = strlen(data), }; data = media_operation->end_key == NULL ? "" : media_operation->end_key; op->request->command->body->range->has_endkey = true; op->request->command->body->range->endkey = (ProtobufCBinaryData) { .data = (uint8_t *)data, .len = strlen(data), }; op->request->command->body->range->startkeyinclusive = media_operation->start_key_inclusive; op->request->command->body->range->endkeyinclusive = media_operation->end_key_inclusive; op->request->command->body->range->has_startkeyinclusive = true; op->request->command->body->range->has_endkeyinclusive = true; switch(priority) { case PRIORITY_NORMAL: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__NORMAL; break; case PRIORITY_LOWEST: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__LOWEST; break; case PRIORITY_LOWER: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__LOWER; break; case PRIORITY_HIGHER: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__HIGHER; break; case PRIORITY_HIGHEST: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__HIGHEST; break; default: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__NORMAL; break; } } KineticStatus KineticBuilder_BuildMediaScan(KineticOperation* const op, const KineticMediaScan_Operation* mediascan_operation, KineticCommand_Priority priority) { KineticOperation_ValidateOperation(op); op->request->message.command.header->messagetype = COM__SEAGATE__KINETIC__PROTO__COMMAND__MESSAGE_TYPE__MEDIASCAN; initRangeAndPriority(op, mediascan_operation, priority); op->timeoutSeconds = KineticOperation_TimeoutMediaScan; return KINETIC_STATUS_SUCCESS; } KineticStatus KineticBuilder_BuildMediaOptimize(KineticOperation* const op, const KineticMediaOptimize_Operation* mediaoptimize_operation, KineticCommand_Priority priority) { KineticOperation_ValidateOperation(op); op->request->message.command.header->messagetype = COM__SEAGATE__KINETIC__PROTO__COMMAND__MESSAGE_TYPE__MEDIASCAN; initRangeAndPriority(op, mediaoptimize_operation, priority); op->timeoutSeconds = KineticOperation_TimeoutMediaOptimize; return KINETIC_STATUS_SUCCESS; } KineticStatus KineticBuilder_BuildUpdateFirmware(KineticOperation* const op, const char* fw_path) { KineticOperation_ValidateOperation(op); Loading src/lib/kinetic_builder.h +6 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ /* Operations with non-standard timeouts. */ typedef enum { KineticOperation_TimeoutSetACL = 30, KineticOperation_TimeoutMediaScan = 30, KineticOperation_TimeoutMediaOptimize = 30, KineticOperation_TimeoutSetPin = 30, KineticOperation_TimeoutLockUnlock = 30, KineticOperation_TimeoutErase = 180, Loading Loading @@ -66,6 +68,10 @@ KineticStatus KineticBuilder_BuildSetACL(KineticOperation* const op, struct ACL *ACLs); KineticStatus KineticBuilder_BuildSetClusterVersion(KineticOperation* const op, int64_t new_cluster_version); KineticStatus KineticBuilder_BuildMediaScan(KineticOperation* const op, const KineticMediaScan_Operation* mediascan_operation, KineticCommand_Priority priority); KineticStatus KineticBuilder_BuildMediaOptimize(KineticOperation* const op, const KineticMediaOptimize_Operation* mediaoptimize_operation, KineticCommand_Priority priority); KineticStatus KineticBuilder_BuildUpdateFirmware(KineticOperation* const op, const char* fw_path); Loading Loading
include/kinetic_admin_client.h +22 −0 Original line number Diff line number Diff line Loading @@ -236,4 +236,26 @@ KineticStatus KineticAdminClient_SetACL(KineticSession * const session, KineticStatus KineticAdminClient_UpdateFirmware(KineticSession * const session, char const * const fw_path); /** * @brief Executes a `Media Scan` operation to perform media scan operation to the Kinetic drive. * * @param session The connected KineticSession to use for the operation. * @param operation KineticMediaScan_Operation pointer.. * * @return Returns the resulting KineticStatus. */ KineticStatus KineticAdminClient_MediaScan(KineticSession * const session, const KineticMediaScan_Operation* operation, KineticCommand_Priority priority); /** * @brief Executes a `Media Optimize` operation to perform media optimize operation to the Kinetic drive. * * @param session The connected KineticSession to use for the operation. * @param operation KineticMediaOptimize_Operation pointer.. * * @return Returns the resulting KineticStatus. */ KineticStatus KineticAdminClient_MediaOptimize(KineticSession * const session, const KineticMediaOptimize_Operation* operation, KineticCommand_Priority priority); #endif // _KINETIC_ADMIN_CLIENT_H
include/kinetic_types.h +15 −0 Original line number Diff line number Diff line Loading @@ -473,6 +473,21 @@ struct _KineticP2P_Operation { KineticP2P_OperationData* operations; ///> Pointer to operations array which must remain valid until operations complete }; typedef struct KineticMedia_Operation{ char* start_key; char* end_key; bool start_key_inclusive; bool end_key_inclusive; }KineticMediaScan_Operation, KineticMediaOptimize_Operation; typedef enum _KineticCommand_Priority{ PRIORITY_NORMAL, PRIORITY_LOWEST, PRIORITY_LOWER, PRIORITY_HIGHER, PRIORITY_HIGHEST } KineticCommand_Priority; /** * @brief Limit for P2P operations. */ Loading
src/lib/kinetic_admin_client.c +32 −0 Original line number Diff line number Diff line Loading @@ -288,3 +288,35 @@ KineticStatus KineticAdminClient_UpdateFirmware(KineticSession * const session, return KineticController_ExecuteOperation(operation, NULL); } KineticStatus KineticAdminClient_MediaScan(KineticSession * const session, const KineticMediaScan_Operation* mediascan_operation, KineticCommand_Priority priority) { KINETIC_ASSERT(session != NULL); KineticOperation* operation = KineticAllocator_NewOperation(session); if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;} KineticStatus status = KineticBuilder_BuildMediaScan(operation, mediascan_operation, priority); if (status != KINETIC_STATUS_SUCCESS) { return status; } return KineticController_ExecuteOperation(operation, NULL); } KineticStatus KineticAdminClient_MediaOptimize(KineticSession * const session, const KineticMediaOptimize_Operation* mediaoptimize_operation, KineticCommand_Priority priority) { KINETIC_ASSERT(session != NULL); KineticOperation* operation = KineticAllocator_NewOperation(session); if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;} KineticStatus status = KineticBuilder_BuildMediaOptimize(operation, mediaoptimize_operation, priority); if (status != KINETIC_STATUS_SUCCESS) { return status; } return KineticController_ExecuteOperation(operation, NULL); }
src/lib/kinetic_builder.c +75 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include "kinetic_request.h" #include "kinetic_acl.h" #include "kinetic_callbacks.h" #include "kinetic_types_internal.h" #include <stdlib.h> #include <errno.h> Loading Loading @@ -417,6 +418,80 @@ KineticStatus KineticBuilder_BuildSetACL(KineticOperation* const op, return KINETIC_STATUS_SUCCESS; } static void initRangeAndPriority(KineticOperation* const op, const struct KineticMedia_Operation* media_operation, KineticCommand_Priority priority) { op->request->message.command.header->has_messagetype = true; op->request->command->body = &op->request->message.body; op->request->command->body->security = &op->request->message.security; op->request->command->body->range = &op->request->message.keyRange; char *data = media_operation->start_key == NULL ? "" : media_operation->start_key; op->request->command->body->range->has_startkey = true; op->request->command->body->range->startkey = (ProtobufCBinaryData) { .data = (uint8_t *)data, .len = strlen(data), }; data = media_operation->end_key == NULL ? "" : media_operation->end_key; op->request->command->body->range->has_endkey = true; op->request->command->body->range->endkey = (ProtobufCBinaryData) { .data = (uint8_t *)data, .len = strlen(data), }; op->request->command->body->range->startkeyinclusive = media_operation->start_key_inclusive; op->request->command->body->range->endkeyinclusive = media_operation->end_key_inclusive; op->request->command->body->range->has_startkeyinclusive = true; op->request->command->body->range->has_endkeyinclusive = true; switch(priority) { case PRIORITY_NORMAL: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__NORMAL; break; case PRIORITY_LOWEST: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__LOWEST; break; case PRIORITY_LOWER: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__LOWER; break; case PRIORITY_HIGHER: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__HIGHER; break; case PRIORITY_HIGHEST: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__HIGHEST; break; default: op->request->command->header->priority = COM__SEAGATE__KINETIC__PROTO__COMMAND__PRIORITY__NORMAL; break; } } KineticStatus KineticBuilder_BuildMediaScan(KineticOperation* const op, const KineticMediaScan_Operation* mediascan_operation, KineticCommand_Priority priority) { KineticOperation_ValidateOperation(op); op->request->message.command.header->messagetype = COM__SEAGATE__KINETIC__PROTO__COMMAND__MESSAGE_TYPE__MEDIASCAN; initRangeAndPriority(op, mediascan_operation, priority); op->timeoutSeconds = KineticOperation_TimeoutMediaScan; return KINETIC_STATUS_SUCCESS; } KineticStatus KineticBuilder_BuildMediaOptimize(KineticOperation* const op, const KineticMediaOptimize_Operation* mediaoptimize_operation, KineticCommand_Priority priority) { KineticOperation_ValidateOperation(op); op->request->message.command.header->messagetype = COM__SEAGATE__KINETIC__PROTO__COMMAND__MESSAGE_TYPE__MEDIASCAN; initRangeAndPriority(op, mediaoptimize_operation, priority); op->timeoutSeconds = KineticOperation_TimeoutMediaOptimize; return KINETIC_STATUS_SUCCESS; } KineticStatus KineticBuilder_BuildUpdateFirmware(KineticOperation* const op, const char* fw_path) { KineticOperation_ValidateOperation(op); Loading
src/lib/kinetic_builder.h +6 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ /* Operations with non-standard timeouts. */ typedef enum { KineticOperation_TimeoutSetACL = 30, KineticOperation_TimeoutMediaScan = 30, KineticOperation_TimeoutMediaOptimize = 30, KineticOperation_TimeoutSetPin = 30, KineticOperation_TimeoutLockUnlock = 30, KineticOperation_TimeoutErase = 180, Loading Loading @@ -66,6 +68,10 @@ KineticStatus KineticBuilder_BuildSetACL(KineticOperation* const op, struct ACL *ACLs); KineticStatus KineticBuilder_BuildSetClusterVersion(KineticOperation* const op, int64_t new_cluster_version); KineticStatus KineticBuilder_BuildMediaScan(KineticOperation* const op, const KineticMediaScan_Operation* mediascan_operation, KineticCommand_Priority priority); KineticStatus KineticBuilder_BuildMediaOptimize(KineticOperation* const op, const KineticMediaOptimize_Operation* mediaoptimize_operation, KineticCommand_Priority priority); KineticStatus KineticBuilder_BuildUpdateFirmware(KineticOperation* const op, const char* fw_path); Loading