The Kinetic Open Storage Software Developer Package is designed to provide developers with direct access to essential and optimized storage features and functionality, and to do so in an open and extensible way. We envision that developers in multiple software stacks and datacenter architecture will build upon the foundations of the Kinetic platform (device and libraries) to tackle storage challenges in superior ways. The design is intended to fuel innovation in software, enabling unique problems to be solved flexibly and optimally.
Importantly, many long-desired capabilities of disk drives over the years are now possible, such as:
- Multiple clients with shared data – Data sharing between drives has traditionally been very difficult. With Kinetic, data can be easily shared between applications in multiple machines. One application can write a key and value to a drive and another has the ability to read the data.
- Data migration – Traditionally, moving data from one drive to another required routing it through expensive storage servers. With Kinetic, data can now be moved directly between drives with peer-to-peer data copy commands where ranges of keys can be moved between drives.
- Data Integrity – Currently, it is difficult to detect all instances of data corruption. With Kinetic, data can be stored with comprehensive end-to-end integrity checks that not only ensure the data was received at the drive correctly, but also allow the drive and the ultimate recipient to be able to guarantee that the data is still correct.
In addition to these values, Kinetic’s key/value semantic abstraction enables drive innovation (e.g. in media technology, sector size, etc.) to advance in parallel with, and independently of, software innovation above the Kinetic device API. Developers will no longer have to implement changes in software in order to benefit from underlying drive technology advances. The application simply operates on defined keys and values, and the drive executes seamlessly and optimally behind the Kinetic device interface. Libraries are provided for a convenient abstraction of the device API into the language of the application.
The API library includes two main categories: Admin and Client.
The Admin API provides the Kinetic administrative interface, which is used to setup Kinetic drives. The key administrative methods included are:
- getLog – Get the utilization, temperature, and capacity information from the drive
- setSecurity – Set the access control list to the Kinetic drive
- setup – Setup the Kinetic drive, such as verify the drive’s pin, set new pin for the drive, set new cluster version for drive, and secure erase of data in database.
The Client API provides the Kinetic client application interface to communicate directly with the Kinetic service, in two types of operations.
- Synchronous – Operations guaranteed to be successfully performed on server if call returns with no Exceptions
- Asynchronous – Operation guaranteed to be successfully performed on server if CallbackHandler (passes instance of the implementation) receives successful CallbackResults (obtains operation requests)
Client API provides more than the traditional key/value object-based storage methods. The main methods are:
- put – Put the specified entry to the persistent store
- get – Get the entry associated with the specified key
- delete – Delete the entry that is associated with the key specified in the entry.
- getNext – Gets the entry associated with a key that is after the specified key in the sequence
- getPrevious – Gets the entry associated with a key that is before the specified key in the sequence
- getKeyRange – Get a list of keys in the sequence based on the specified key range
- getMetadata – Get entry metadata for the specified key.
The Simulator API provides a simulator boot-strap class used for applications to start new instances of the Simulator to act as a drive. A default simulator instance boot-strap method that uses port 8123 as the service port and the user’s home folder as the home folder for the simulator is included with the package. Although default configuration properties are included, the Simulator API also allows applications to define their own simulator configuration instances to start the Simulator with their system properties.
The Simulator is located at the kinetic-java GitHub repository.
Open Source Libraries
The Kinetic API libraries have been provided in multiple developer languages to allow easy system integration with the Kinetic platform. The languages provided in GitHub are:
- C Library: kinetic-c
- C++ Library: kinetic-cpp-client
- Java Library: kinetic-java
- Python Library: kinetic-py
- OCaml Library: kinetic-ocaml-client
Kinetic libraries are at various stages of completeness. Since this project is intended to be open, contributions to the libraries are welcomed.