Commit 457f8a19 authored by Greg Williams's avatar Greg Williams
Browse files

Completed GetKeyRange implementation

parent 26eeb70b
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -323,7 +323,9 @@ KineticStatus KineticClient_Delete(KineticSessionHandle handle,
//   }
// }
KineticStatus KineticClient_GetKeyRange(KineticSessionHandle handle,
                                        KineticKeyRange* range, ByteBuffer keys[], int max_keys)
                                        KineticKeyRange* range,
                                        ByteBuffer keys[],
                                        int max_keys)
{
    assert(handle != KINETIC_HANDLE_INVALID);
    assert(range != NULL);
+64 −6
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ void KineticLogger_Log(const char* message)
    }
    zlogf(message);
    zlogf("\n");
    zlog_flush_buffer();
}

void KineticLogger_LogPrintf(const char* format, ...)
@@ -80,6 +81,7 @@ void KineticLogger_LogPrintf(const char* format, ...)
    va_end(arg_ptr);
    strcat(buffer, "\n");
    zlogf(buffer);
    zlog_flush_buffer();
}

void KineticLogger_LogLocation(char* filename, int line, char const * format, ...)
@@ -89,6 +91,7 @@ void KineticLogger_LogLocation(char* filename, int line, char const * format, ..
        va_start(arg_ptr, format);
        zlogf("[@%s:%d] %s\n", filename, line, format, arg_ptr);
        va_end(arg_ptr);
        zlog_flush_buffer();
    }
}

@@ -160,6 +163,11 @@ int KineticLogger_ByteArraySliceToCString(char* p_buf,
    KineticLogger_ByteArraySliceToCString((char*)(_buf_start), key, 0, key.len); \
}

// #define Proto_LogBinaryDataOptional(el, attr)
// if ((el)->has_##(attr)) {
//     KineticLogger_LogByteArray(#attr, (el)->(attr));
// }

void KineticLogger_LogProtobuf(const KineticProto_Message* msg)
{
    if (LogLevel < 0) {
@@ -208,13 +216,10 @@ void KineticLogger_LogProtobuf(const KineticProto_Message* msg)
        }
    }


    if (msg->has_commandBytes
      && msg->commandBytes.data != NULL
      && msg->commandBytes.len > 0) {
        
        LOG_PROTO_LEVEL_START("commandBytes");

        KineticProto_Command* cmd = KineticProto_command__unpack(NULL, msg->commandBytes.len, msg->commandBytes.data);

        if (cmd->header) {
@@ -251,7 +256,8 @@ void KineticLogger_LogProtobuf(const KineticProto_Message* msg)
                         cmd->header->earlyExit ? _str_true : _str_false);
                }
                if (cmd->header->has_priority) {
                    const ProtobufCEnumValue* eVal = protobuf_c_enum_descriptor_get_value(
                    const ProtobufCEnumValue* eVal = 
                        protobuf_c_enum_descriptor_get_value(
                            &KineticProto_command_priority__descriptor,
                            cmd->header->messageType);
                    LOGF("%spriority: %s", _indent, eVal->name);
@@ -317,6 +323,58 @@ void KineticLogger_LogProtobuf(const KineticProto_Message* msg)
                    }
                    LOG_PROTO_LEVEL_END();
                }

                if (cmd->body->range) {
                    LOG_PROTO_LEVEL_START("keyRange");
                    {
                        if (cmd->body->range->has_startKey) {
                            BYTES_TO_CSTRING(tmpBuf,
                                             cmd->body->range->startKey,
                                             0, cmd->body->range->startKey.len);
                            LOGF("%sstartKey: '%s'", _indent, tmpBuf);
                        }

                        if (cmd->body->range->has_endKey) {
                            BYTES_TO_CSTRING(tmpBuf,
                                             cmd->body->range->endKey,
                                             0, cmd->body->range->endKey.len);
                            LOGF("%sendKey:   '%s'", _indent, tmpBuf);
                        }

                        // protobuf_c_boolean has_startKeyInclusive;
                        // protobuf_c_boolean startKeyInclusive;

                        // protobuf_c_boolean has_endKeyInclusive;
                        // protobuf_c_boolean endKeyInclusive;

                        // protobuf_c_boolean has_maxReturned;
                        // int32_t maxReturned;

                        // protobuf_c_boolean has_reverse;
                        // protobuf_c_boolean reverse;

                        // size_t n_keys;
                        // ProtobufCBinaryData* keys;

                        if (cmd->body->range->n_keys == 0
                          || cmd->body->range->keys == NULL) {
                            LOGF("%s[empty]", _indent);
                        }
                        else {
                            LOGF("%s%d keys", _indent, cmd->body->range->n_keys);
                            for (unsigned int i = 0; i < cmd->body->range->n_keys; i++) {
                                BYTES_TO_CSTRING(tmpBuf,
                                                 cmd->body->range->keys[i],
                                                 0, cmd->body->range->keys[i].len);
                                LOGF("%skeys[%d]: '%s'", _indent, i, tmpBuf);
                            }
                        } 

                        // if (cmd->body->keyValue->has_key) {
                        // }
                    }
                    LOG_PROTO_LEVEL_END();
                }
            }

            LOG_PROTO_LEVEL_END();
+16 −10
Original line number Diff line number Diff line
@@ -100,18 +100,24 @@ void KineticMessage_ConfigureKeyRange(KineticMessage* const message,
    message->command.body->range = &message->keyRange;

    // Populate startKey, if supplied
    message->command.body->range->has_startKey = 
        (range->startKey.array.data != NULL);
    if (message->command.body->range->has_startKey) {
        message->command.body->range->startKey = (ProtobufCBinaryData) {
            .data = range->startKey.array.data,
            .len = range->startKey.bytesUsed,
        };
    message->command.body->range->has_startKey = true;
    }

    // Populate endKey, if supplied
    message->command.body->range->has_endKey = 
        (range->endKey.array.data != NULL);
    if (message->command.body->range->has_endKey) {
        message->command.body->range->endKey = (ProtobufCBinaryData) {
            .data = range->endKey.array.data,
            .len = range->endKey.bytesUsed,
        };
    message->command.body->range->has_endKey = true;
    }

    // Populate start/end key inclusive flags, if specified
    if (range->startKeyInclusive) {
+2 −5
Original line number Diff line number Diff line
@@ -303,15 +303,12 @@ bool Copy_KineticProto_Command_Range_to_buffer_list(
    int64_t max_keys)
{
    bool bufferOverflow = false;
    LOGF("HERE: keyRange=0x%0llX, keys=0x%0llX, max_keys=%lld", keyRange, keys, max_keys);
    LOGF("Copying: keyRange=0x%0llX, keys=0x%0llX, max_keys=%lld", keyRange, keys, max_keys);
    if (keyRange != NULL && keys != NULL && max_keys > 0) {
        LOG("THERE");
        for (size_t i = 0; i < MIN((size_t)max_keys, (size_t)keyRange->n_keys); i++) {
            ByteBuffer_Reset(&keys[i]);
            LOGF("EVERYWHERE key[%llu]: actual data=0x%0llX, actual len=%zu, buff len=%zu, buff data=0x%0llX buff used=%zu",
                i, keyRange->keys[i].data, keyRange->keys[i].len, keys[i].array.len, keys[i].array.data, keys[i].bytesUsed);
            if (ByteBuffer_Append(&keys[i], keyRange->keys[i].data, keyRange->keys[i].len) == NULL) {
                LOG(" BUFFER_OVERRUN: keyRange");
                LOGF(" BUFFER_OVERRUN: keyRange[%zd]", i);
                bufferOverflow = true;
            }
        }
+1 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ typedef struct _KineticMessage {
    KineticProto_command_status__init(&(msg)->status); \
    KineticProto_command_body__init(&(msg)->body); \
    KineticProto_command_key_value__init(&(msg)->keyValue); \
    KineticProto_command_range__init(&(msg)->keyRange); \
    KINETIC_MESSAGE_AUTH_HMAC_INIT(msg, 0, BYTE_ARRAY_NONE); \
    (msg)->has_command = false; \
}
Loading