Commit 2d81e7ac authored by Greg Williams's avatar Greg Williams
Browse files

Internalizing protobuf and internal data for API encapsulation

parent 99444c21
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ CFLAGS += -std=c99 -g ${WARN} ${CDEFS} ${OPTIMIZE}
LIB_INCS = -I$(LIB_DIR) -I$(PUB_INC) -I$(PBC_INC) -I$(VND_INC)
LIB_DEPS = $(PUB_INC)/kinetic_client.h $(PUB_INC)/kinetic_types.h $(LIB_DIR)/kinetic_connection.h $(LIB_DIR)/kinetic_hmac.h $(LIB_DIR)/kinetic_logger.h $(LIB_DIR)/kinetic_message.h $(LIB_DIR)/kinetic_nbo.h $(LIB_DIR)/kinetic_operation.h $(LIB_DIR)/kinetic_pdu.h $(LIB_DIR)/kinetic_proto.h $(LIB_DIR)/kinetic_socket.h
# LIB_OBJ = $(patsubst %,$(OUT_DIR)/%,$(LIB_OBJS))
LIB_OBJS = $(OUT_DIR)/kinetic_nbo.o $(OUT_DIR)/kinetic_operation.o $(OUT_DIR)/kinetic_pdu.o $(OUT_DIR)/kinetic_proto.o $(OUT_DIR)/kinetic_socket.o $(OUT_DIR)/kinetic_message.o $(OUT_DIR)/kinetic_message.o $(OUT_DIR)/kinetic_logger.o $(OUT_DIR)/kinetic_hmac.o $(OUT_DIR)/kinetic_connection.o $(OUT_DIR)/kinetic_operation.o $(OUT_DIR)/kinetic_client.o $(OUT_DIR)/socket99.o $(OUT_DIR)/protobuf-c.o
LIB_OBJS = $(OUT_DIR)/kinetic_nbo.o $(OUT_DIR)/kinetic_operation.o $(OUT_DIR)/kinetic_pdu.o $(OUT_DIR)/kinetic_proto.o $(OUT_DIR)/kinetic_socket.o $(OUT_DIR)/kinetic_message.o $(OUT_DIR)/kinetic_message.o $(OUT_DIR)/kinetic_logger.o $(OUT_DIR)/kinetic_hmac.o $(OUT_DIR)/kinetic_connection.o $(OUT_DIR)/kinetic_operation.o $(OUT_DIR)/kinetic_types.o $(OUT_DIR)/kinetic_client.o $(OUT_DIR)/socket99.o $(OUT_DIR)/protobuf-c.o

default: $(KINETIC_LIB)

@@ -59,12 +59,14 @@ $(OUT_DIR)/kinetic_connection.o: $(LIB_DIR)/kinetic_connection.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_operation.o: $(LIB_DIR)/kinetic_operation.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_client.o: $(LIB_DIR)/kinetic_client.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/socket99.o: $(SOCKET99)/socket99.c $(SOCKET99)/socket99.h
	$(CC) -c -o $@ $< $(CFLAGS) -I$(SOCKET99)
$(OUT_DIR)/protobuf-c.o: $(PBC_INC)/protobuf-c/protobuf-c.c $(PBC_INC)/protobuf-c/protobuf-c.h
	$(CC) -c -o $@ $< -std=c99 -g -Wall ${OPTIMIZE} -I$(PBC_INC)
$(OUT_DIR)/kinetic_types.o: $(LIB_DIR)/kinetic_types.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_client.o: $(LIB_DIR)/kinetic_client.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)

$(KINETIC_LIB): $(LIB_OBJS)
	ar -rcs $@ $(LIB_OBJS)
+5 −5
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ KineticOperation KineticClient_CreateOperation(
 * @return              Returns 0 upon succes, -1 or the Kinetic status code
 *                      upon failure
 */
KineticProto_Status_StatusCode KineticClient_NoOp(KineticOperation* operation);
KineticStatus KineticClient_NoOp(KineticOperation* operation);

/**
 * @brief Executes a PUT command to write data to the Kinetic Device
@@ -92,8 +92,8 @@ KineticProto_Status_StatusCode KineticClient_NoOp(KineticOperation* operation);
 * @return              Returns 0 upon succes, -1 or the Kinetic status code
 *                      upon failure
 */
KineticProto_Status_StatusCode KineticClient_Put(KineticOperation* operation,
    const Kinetic_KeyValue* metadata);
KineticStatus KineticClient_Put(KineticOperation* operation,
    const KineticKeyValue* metadata);

/**
 * @brief Executes a GET command to read data from the Kinetic Device
@@ -105,7 +105,7 @@ KineticProto_Status_StatusCode KineticClient_Put(KineticOperation* operation,
 * @return              Returns 0 upon succes, -1 or the Kinetic status code
 *                      upon failure
 */
KineticProto_Status_StatusCode KineticClient_Get(KineticOperation* operation,
    const Kinetic_KeyValue* metadata);
KineticStatus KineticClient_Get(KineticOperation* operation,
    KineticKeyValue* metadata);

#endif // _KINETIC_CLIENT_H
+19 −3
Original line number Diff line number Diff line
@@ -203,8 +203,24 @@ typedef struct _KineticMessage
}


// Kinetic Status Codes
typedef enum
{
    KINETIC_STATUS_INVALID = -1,     // Status not available (no reponse/status available)
    KINETIC_STATUS_SUCCESS = 0,      // Operation successful
    KINETIC_STATUS_DEVICE_BUSY,      // Device busy (retry later)
    KINETIC_STATUS_CONNECTION_ERROR, // No connection/disconnected
    KINETIC_STATUS_INVALID_REQUEST,  // Something about the request is invalid
    KINETIC_STATUS_OPERATION_FAILED, // Device reported an operation error
    KINETIC_STATUS_VERSION_FAILURE,  // Basically a VERSION_MISMATCH error for a PUT
    KINETIC_STATUS_DATA_ERROR,       // Device reported data error, no spaces, HMAC failure
} KineticStatus;
extern const int KineticStatusDescriptorCount;
extern const char* KineticStatusDescriptor[];


// KeyValue meta-data
typedef struct _Kinetic_KeyValue
typedef struct _KineticKeyValue
{
    ByteArray key;
    ByteArray newVersion;
@@ -215,7 +231,7 @@ typedef struct _Kinetic_KeyValue
    bool metadataOnly;
    KineticProto_Synchronization synchronization;
    ByteArray value;
} Kinetic_KeyValue;
} KineticKeyValue;


// Kinetic PDU Header
@@ -257,7 +273,7 @@ typedef struct _KineticPDU
    uint8_t protobufRaw[PDU_PROTO_MAX_LEN];

    // Object meta-data to be used/populated if provided and pertinent to the opearation
    Kinetic_KeyValue* metadata;
    KineticKeyValue* metadata;

    // Value data associated with PDU (if any)
    uint8_t valueBuffer[PDU_VALUE_MAX_LEN];
+35 −27
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
*/

#include "kinetic_client.h"
#include "kinetic_types_internal.h"
#include "kinetic_pdu.h"
#include "kinetic_operation.h"
#include "kinetic_connection.h"
@@ -27,7 +28,7 @@
#include "kinetic_logger.h"
#include <stdio.h>

KineticProto_Status_StatusCode KineticClient_ExecuteOperation(KineticOperation* operation);
KineticStatus KineticClient_ExecuteOperation(KineticOperation* operation);

void KineticClient_Init(const char* logFile)
{
@@ -54,20 +55,20 @@ bool KineticClient_Connect(KineticConnection* connection,
        return false;
    }

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

    if (key.data == NULL)
    if (hmacKey.data == NULL)
    {
        LOG("Specified HMAC key is NULL!");
        return false;
    }

    if (!KineticConnection_Connect(connection, host, port, nonBlocking,
        clusterVersion, identity, key))
        clusterVersion, identity, hmacKey))
    {
        connection->connected = false;
        connection->socketDescriptor = -1;
@@ -123,7 +124,7 @@ KineticOperation KineticClient_CreateOperation(KineticConnection* connection,
    return op;
}

KineticProto_Status_StatusCode KineticClient_NoOp(KineticOperation* operation)
KineticStatus KineticClient_NoOp(KineticOperation* operation)
{
    assert(operation->connection != NULL);
    assert(operation->request != NULL);
@@ -136,26 +137,25 @@ KineticProto_Status_StatusCode KineticClient_NoOp(KineticOperation* operation)
    return KineticClient_ExecuteOperation(operation);
}

KineticProto_Status_StatusCode KineticClient_Put(KineticOperation* operation,
    const Kinetic_KeyValue* metadata,
    const ByteArray value)
KineticStatus KineticClient_Put(KineticOperation* operation,
    const KineticKeyValue* metadata)
{
    assert(operation->connection != NULL);
    assert(operation->request != NULL);
    assert(operation->response != NULL);
    assert(value.data != NULL);
    assert(value.len <= PDU_VALUE_MAX_LEN);
    assert(metadata != NULL);
    assert(metadata->value.data != NULL);
    assert(metadata->value.len <= PDU_VALUE_MAX_LEN);

    // Initialize request
    KineticOperation_BuildPut(operation, metadata, value);
    KineticOperation_BuildPut(operation, metadata);

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

KineticProto_Status_StatusCode KineticClient_Get(KineticOperation* operation,
    const Kinetic_KeyValue* metadata,
    const ByteArray value)
KineticStatus KineticClient_Get(KineticOperation* operation,
    KineticKeyValue* metadata)
{
    assert(operation->connection != NULL);
    assert(operation->request != NULL);
@@ -164,30 +164,38 @@ KineticProto_Status_StatusCode KineticClient_Get(KineticOperation* operation,
    assert(metadata->key.data != NULL);
    assert(metadata->key.len <= KINETIC_MAX_KEY_LEN);

    ByteArray responseValue = BYTE_ARRAY_NONE;
    if (!metadata->metadataOnly)
    {
        if (value.data != NULL)
        {
            responseValue = value;
        }
        else
        if (metadata->value.data == NULL)
        {
            responseValue = (ByteArray){.data = operation->response->valueBuffer};
             metadata->value = (ByteArray){
                .data = operation->response->valueBuffer,
                .len = PDU_VALUE_MAX_LEN};
        }
    }

    // Initialize request
    KineticOperation_BuildGet(operation, metadata, responseValue);
    KineticOperation_BuildGet(operation, metadata);

    // Execute the operation
    return KineticClient_ExecuteOperation(operation);
    KineticStatus status = KineticClient_ExecuteOperation(operation);

    // Update the metadata with the received value length upon success
    if (status == KINETIC_STATUS_SUCCESS)
    {
        metadata->value.len = operation->response->value.len;
    }
    else
    {
        metadata->value.len = 0;
    }

    return status;
}

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

    // Send the request
    if (KineticPDU_Send(operation->request))
@@ -198,7 +206,7 @@ KineticProto_Status_StatusCode KineticClient_ExecuteOperation(KineticOperation*
        // Receive the response
        if (KineticPDU_Receive(operation->response))
        {
            status = KineticPDU_Status(operation->response);
            status = KineticOperation_GetStatus(operation);
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@
#ifndef _KINETIC_CONNECTION_H
#define _KINETIC_CONNECTION_H

#include "kinetic_types.h"
#include "kinetic_types_internal.h"

bool KineticConnection_Connect(KineticConnection* connection,
    const char* host,
Loading