Commit 6de5c002 authored by Greg Williams's avatar Greg Williams
Browse files

Merge branch 'master' into develop

parents ac9ac9d3 1d746a83
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
[![Build Status](http://travis-ci.org/atomicobject/kinetic-c.png?branch=master)](http://travis-ci.org/atomicobject/kinetic-c)
[![Build Status](http://travis-ci.org/Seagate/kinetic-c.png?branch=master)](http://travis-ci.org/Seagate/kinetic-c)
Kinetic C Client Library
========================
The [Github kinetic-c Git repository](https://github.com/Seagate/kinetic-c) contains code for producing Kinetic C clients for interacting with Kinetic storage object-based storage. The library uses the cross-platform Seagate Kinetic protocol for standardizing interaces between the Java simulator and Kinetic Device storage clusters.
@@ -48,9 +48,12 @@ Getting Started
API Documentation
=================

[Kinetic-C API Documentation](index.html) (generated with Doxygen)
* [Kinetic-C API](kinetic__client_8h.html)
* [Kinetic-C types](kinetic__types_8h.html)
[Kinetic-C API Documentation](http://seagate.github.io/kinetic-c/) (generated with Doxygen)
* [Kinetic-C API](http://seagate.github.io/kinetic-c/kinetic__client_8h.html)
* [Kinetic-C types](http://seagate.github.io/kinetic-c/kinetic__types_8h.html)
* [ByteArray API](http://seagate.github.io/kinetic-c/byte__array_8h.html)
    * The ByteArray and ByteBuffer types are used for exchanging variable length byte-arrays with kinetic-c
        * e.g. object keys, object value data, etc.

Example Client/Test Utility
===========================
+15 −1
Original line number Diff line number Diff line
v0.5.0
------
* Added blocking PUT operation

v0.6.0
------
* Added GET and DELETE operations.
* Added blocking GET and DELETE operations.
* Added Makefile build implementing standard (make; sudo make install) interface.
* Added creation/installation of static (.a) and dynamic (.so) libraries
* Added ByteArray type for buffer management.
* Added Kinetic_KeyValue type for key/value pair handling.

v0.7.0
------
* Added blocking GETKEYRANGE operation.

v0.8.0
------
* Added asynchronous/non-blocking execution option to all operations (GET/PUT/DELETE/GETKEYRANGE).
    * A given operation is carried out in asynchronous mode if a closure callback with optional data is supplied.
* ByteArray and ByteBuffer types are now supplied directly in the byte_array.h public interface file.
+11 −10
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ static const char* TestDataString = "lorem ipsum... blah blah blah... etc.";

//------------------------------------------------------------------------------
// Private Method Declarations
static void ParseOptions(
static int ParseOptions(
    const int argc,
    char** const argv,
    KineticSession* config,
@@ -63,7 +63,7 @@ int main(int argc, char** argv)
    KineticClient_Init("stdout", 2);

    // Parse command line options
    ParseOptions(argc, argv, &SessionConfig, &Entry);
    int operationsArgsIndex = ParseOptions(argc, argv, &SessionConfig, &Entry);

    // Establish a session/connection with the Kinetic Device
    KineticSessionHandle sessionHandle;
@@ -76,7 +76,7 @@ int main(int argc, char** argv)
    }

    // Execute all specified operations in order
    for (int optionIndex = 1; optionIndex < argc; optionIndex++) {
    for (int optionIndex = operationsArgsIndex; optionIndex < argc; optionIndex++) {
        const char* operation = argv[optionIndex];
        ReportOperationConfiguration(operation, &SessionConfig, &Entry);
        ExecuteOperation(operation, sessionHandle, &Entry);
@@ -205,7 +205,7 @@ void ReportOperationConfiguration(
           entry->value.bytesUsed);
}

void ParseOptions(
int ParseOptions(
    const int argc,
    char** const argv,
    KineticSession* sessionConfig,
@@ -248,14 +248,14 @@ void ParseOptions(
    };

    // Parse the options from the command line
    extern char *optarg;
    extern int optind;
    int option, optionIndex = 0;
    while ((option = getopt_long(argc, argv, "h", long_options, &optionIndex)) != -1) {
    while ((option = getopt_long(argc, argv, "h:", long_options, &optionIndex)) != -1) {
        // Parse options until we reach the end of the argument list
        switch (option) {
        // If this option set a flag, do nothing else now
        case 0: if (long_options[optionIndex].flag != 0) {
                break;
            }
        case 0: if (long_options[optionIndex].flag != 0) {break;}
        // Configure host
        case 'h': strcpy(cfg.host, optarg); break;
        // Discard '?', since getopt_long already printed info
@@ -277,6 +277,7 @@ void ParseOptions(
    strncpy(sessionConfig->host, cfg.host, HOST_NAME_MAX);

    // Populate and configure the entry to be used for operations
    ConfigureEntry(entry,
                   cfg.key, cfg.tag, cfg.version, cfg.algorithm, TestDataString);
    ConfigureEntry(entry, cfg.key, cfg.tag, cfg.version, cfg.algorithm, TestDataString);

    return optind;
}