OCaml client for Seagate Kinetic devices
OCaml Makefile
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples simplification of batch API May 29, 2018
src simplification of batch API May 29, 2018
.gitignore adding content Oct 31, 2014
LICENSE.txt more restructuring Mar 15, 2018
META
Makefile update crud to 3.0.6; Jan 23, 2015
README.md Merge pull request #15 from openvstorage/07.00.09 May 2, 2018
_tags minimal changes needed for Lwt.4 Apr 23, 2018

README.md

Kinetic OCaml Client

This is an OCaml client for Seagate's Kinetic drives. Currently, it uses protocol version 3.1.1.

Installation

In order to build the client, you need to have some OCaml libraries present. In concreto, you need:

  • lwt
  • piqi
  • cryptokit
  • cmdliner
  • lwt_ssl
  • lwt_log

If you have these, you can compile everything with:

$> make

You can install the library with:

$> make install-lib

Once you have the library installed, you just add `true:package(kinetic-client) to your ocamlbuild _tags file.

Usage

The API is defined in kinetic.mli

typically you'd do something like:

    ...
    Kinetic.wrap_socket socket
    >>=? client ->
    Kinetic.put client
      "the_key" (Some "the value")
      ~db_version:None ~new_version:None
      ~forced:true
      ~synchronization:(Some Kinetic.WRITEBACK)
    >>=? fun () ->
    ...

take a look at test_it.ml

Remarks

Protocol?

There is a rather stable protocol defined in Seagate's kinetic-protocol which defines the serialization for valid messages. The protocol itself is rather implicitly defined by the Kinetic Simulator, and the interpretation of what comprises an acceptable client/server conversation varies between Simulator releases. All this to say that even if both client and server state they support protocol version X, they still might not be able to talk to each other. YMMV

Todo

  • We only catered for our own needs, so feature support is rather limited. (we welcome pull requests ;) )
  • the API feels heavy, because it's a direct translation of the messages into RPC. Once the protocol stabilizes, we should move into something more elegant.

Have fun,

The OpenVStorage team