Osd - create backend for seagate kinetic


Create a version of KeyValueStore that can run on a seagate kinetic drive


  • Sage Weil (Inktank)
  • Name (Affiliation)
  • Name

Interested Parties

  • Haomai Wang (UnitedStack)
  • Danny Al-Gaaf (Deutsche Telekom AG)
  • Name (Affiliation)
  • Name

Current Status

  • a KeyValueStore backend exists that is based on GenericObjectMap and the generic KeyValueDB
  • a C/C++ kinetic API will be available shortly
  • the k/v backends are key-granularity. byte object data is striped across keys of some size, and small updates require a read/modify/write.

Detailed Description

There are several challenges to run Ceph backed by kinetic:
  • the kinetic API does not expose a transaction interface. for the first-pass prototype we will ignore this. for a second pass, we will either do some form of write-ahead logging, come up with something clever that fits well with GenericObjectMap, or convince the kinetic folks to expose transactions through their API. Interestingly, other backends that do have some 'batch put' capabilities still limit the size of the transaction, so adding a fallback that writes the entire transaction and then applies it and then setting the supported transaction size to 1 should capture the degenerate case.

Work items

Coding tasks

  1. make KeyValueDB wrapper for libkinetic
  2. make a transactional fallback
    1. a KeyValueDB implementation that sits on top of a NonTransactionalKeyValueDB which includes a batch_put() operation and a get_max_batch_size()
  3. build/adapt a simple caching layer that sits between KeyValueDB and GenericObjectMap
    1. or one that is integrated into GenericObjectMap to avoid encode/decode overheads
  4. evaluate under object and block workloads

Build / release tasks

  1. include libkinetic packages in ceph repos
    1. build as necessary for supported platforms
  2. include support for simulator in vstart or other developer-friendly tooling

Documentation tasks

  1. blog