Commit 8cb27e95 authored by Greg Williams's avatar Greg Williams
Browse files

Implementation of GET almost complete.

Almost done refactoring code to integrate new ByteArray type.
parent cbd6ccec
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -332,6 +332,7 @@ namespace :tests do
    'ruby_sim:shutdown',
    'tests:utility:noop',
    'tests:utility:put',
    'tests:utility:get',
  ]

  namespace :utility do
@@ -362,6 +363,15 @@ namespace :tests do
      end
    end

    task :get => ['release', 'ruby_sim:shutdown'] do
      java_sim_erase_drive
      with_test_server("Testing Get operation") do
        execute_command "./kinetic-c put"
        execute_command "./kinetic-c get"
        execute_command "./kinetic-c --host localhost get"
      end
    end

  end

end
+60 −43
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@
#include "kinetic_logger.h"
#include <stdio.h>

KineticProto_Status_StatusCode KineticClient_ExecuteOperation(KineticOperation* operation);

void KineticClient_Init(const char* logFile)
{
    KineticLogger_Init(logFile);
@@ -37,7 +39,7 @@ bool KineticClient_Connect(
    bool nonBlocking,
    int64_t clusterVersion,
    int64_t identity,
    const char* key)
    ByteArray key)
{
    if (connection == NULL)
    {
@@ -51,15 +53,15 @@ bool KineticClient_Connect(
        return false;
    }

    if (key == NULL)
    if (key.len < 1)
    {
        LOG("Specified HMAC key is NULL!");
        LOG("Specified HMAC key is empty!");
        return false;
    }

    if (strlen(key) < 1)
    if (key.data == NULL)
    {
        LOG("Specified HMAC key is empty!");
        LOG("Specified HMAC key is NULL!");
        return false;
    }

@@ -118,10 +120,10 @@ KineticOperation KineticClient_CreateOperation(
    }

    KineticMessage_Init(requestMsg);
    KineticPDU_Init(request, connection, requestMsg, NULL, 0);
    KineticPDU_Init(request, connection, requestMsg, BYTE_ARRAY_NONE);

    // KineticMessage_Init(responseMsg);
    KineticPDU_Init(response, connection, NULL, NULL, 0);
    KineticPDU_Init(response, connection, NULL, BYTE_ARRAY_NONE);

    op.connection = connection;
    op.request = request;
@@ -135,9 +137,6 @@ KineticOperation KineticClient_CreateOperation(

KineticProto_Status_StatusCode KineticClient_NoOp(KineticOperation* operation)
{
    KineticProto_Status_StatusCode status =
        KINETIC_PROTO_STATUS_STATUS_CODE_INVALID_STATUS_CODE;

    assert(operation->connection != NULL);
    assert(operation->request != NULL);
    assert(operation->request->message != NULL);
@@ -145,51 +144,67 @@ KineticProto_Status_StatusCode KineticClient_NoOp(KineticOperation* operation)
    assert(operation->response->message == NULL);

    // Initialize request
    KineticConnection_IncrementSequence(operation->connection);
    KineticOperation_BuildNoop(operation);

    // Send the request
    KineticPDU_Send(operation->request);

    // Associate response with same exchange as request
    operation->response->connection = operation->request->connection;
    // Execute the operation
    return KineticClient_ExecuteOperation(operation);
}

    // Receive the response
    if (KineticPDU_Receive(operation->response))
KineticProto_Status_StatusCode KineticClient_Put(KineticOperation* operation,
    const ByteArray key,
    const ByteArray newVersion,
    const ByteArray dbVersion,
    const ByteArray tag,
    const ByteArray value)
{
        status = KineticPDU_Status(operation->response);
    }
    assert(operation->connection != NULL);
    assert(operation->request != NULL);
    assert(operation->request->message != NULL);
    assert(operation->response != NULL);
    assert(operation->response->message == NULL);
    assert(value.data != NULL);
    assert(value.len <= PDU_VALUE_MAX_LEN);

	return status;
    // Initialize request
    KineticOperation_BuildPut(operation, key, newVersion, dbVersion, tag, value);

    // Execute the operation
    return KineticClient_ExecuteOperation(operation);
}

KineticProto_Status_StatusCode KineticClient_Put(KineticOperation* operation,
    char* newVersion,
    char* key,
    char* dbVersion,
    char* tag,
    uint8_t* value,
    int64_t len)
KineticProto_Status_StatusCode KineticClient_Get(KineticOperation* operation,
    const ByteArray key,
    const ByteArray value,
    bool metadataOnly)
{
    KineticProto_Status_StatusCode status =
        KINETIC_PROTO_STATUS_STATUS_CODE_INVALID_STATUS_CODE;

    assert(operation->connection != NULL);
    assert(operation->request != NULL);
    assert(operation->request->message != NULL);
    assert(operation->response != NULL);
    assert(operation->response->message == NULL);
    assert(value != NULL);
    assert(len <= PDU_VALUE_MAX_LEN);
    assert(key.data != NULL);
    assert(key.len <= KINETIC_MAX_KEY_LEN);
    if (!metadataOnly)
    {
        assert(value.data != NULL);
        assert(value.len <= PDU_VALUE_MAX_LEN);
    }

    // Initialize request
    KineticConnection_IncrementSequence(operation->connection);
    KineticOperation_BuildPut(operation, value, len);
    KineticMessage_ConfigureKeyValue(operation->request->message, newVersion, key, dbVersion, tag);
    KineticOperation_BuildGet(operation, key, value, metadataOnly);

    // Send the request
    KineticPDU_Send(operation->request);
    // Execute the operation
    return KineticClient_ExecuteOperation(operation);
}

KineticProto_Status_StatusCode KineticClient_ExecuteOperation(KineticOperation* operation)
{
    KineticProto_Status_StatusCode status =
        KINETIC_PROTO_STATUS_STATUS_CODE_INVALID_STATUS_CODE;

    // Send the request
    if (KineticPDU_Send(operation->request))
    {
        // Associate response with same exchange as request
        operation->response->connection = operation->request->connection;

@@ -198,6 +213,8 @@ KineticProto_Status_StatusCode KineticClient_Put(KineticOperation* operation,
        {
            status = KineticPDU_Status(operation->response);
        }
    }

    return status;
}
+28 −17
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ bool KineticClient_Connect(KineticConnection* connection,
    bool nonBlocking,
    int64_t clusterVersion,
    int64_t identity,
    const char* key);
    ByteArray key);

/**
 * @brief Closes the socket connection to a host.
@@ -81,7 +81,7 @@ KineticOperation KineticClient_CreateOperation(
 *
 * @param operation     KineticOperation instance to use for the operation
 *
 * @return                  Returns the resultant status code
 * @return              Returns 0 upon succes, -1 or the Kinetic status code upon failure
 */
KineticProto_Status_StatusCode KineticClient_NoOp(KineticOperation* operation);

@@ -90,14 +90,25 @@ KineticProto_Status_StatusCode KineticClient_NoOp(KineticOperation* operation);
 *
 * @param operation     KineticOperation instance to use for the operation
 *
 * @return                  Returns the resultant status code
 * @return              Returns 0 upon succes, -1 or the Kinetic status code upon failure
 */
KineticProto_Status_StatusCode KineticClient_Put(KineticOperation* operation,
    char* newVersion,
    char* key,
    char* dbVersion,
    char* tag,
    uint8_t* value,
    int64_t len);
    ByteArray key,
    ByteArray newVersion,
    ByteArray dbVersion,
    ByteArray tag,
    ByteArray value);

/**
 * @brief Executes a GET command to read data from the Kinetic Device
 *
 * @param operation     KineticOperation instance to use for the operation
 *
 * @return              Returns 0 upon succes, -1 or the Kinetic status code upon failure
 */
KineticProto_Status_StatusCode KineticClient_Get(KineticOperation* operation,
    const ByteArray key,
    const ByteArray value,
    bool metadataOnly);

#endif // _KINETIC_CLIENT_H
+2 −2
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@

bool KineticConnection_Connect(KineticConnection* const connection,
    const char* host, int port, bool nonBlocking,
    int64_t clusterVersion, int64_t identity, const char* key)
    int64_t clusterVersion, int64_t identity, const ByteArray key)
{
    connection->connected = false;
    connection->nonBlocking = nonBlocking;
@@ -35,7 +35,7 @@ bool KineticConnection_Connect(KineticConnection* const connection,
    connection->clusterVersion = clusterVersion;
    connection->identity = identity;
    strcpy(connection->host, host);
    strcpy(connection->key, key);
    memcpy(connection->key.data, key.data, key.len);

    connection->socketDescriptor = KineticSocket_Connect(
        connection->host, connection->port, nonBlocking);
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ bool KineticConnection_Connect(KineticConnection* connection,
    bool nonBlocking,
    int64_t clusterVersion,
    int64_t identity,
    const char* key);
    const ByteArray key);

void KineticConnection_Disconnect(KineticConnection* const connection);

Loading