What interface should be used for HA storage

Add your comments directly to the page. Include links to any relevant research, data, or feedback.

Status
DECIDED
Impact

HIGH / MEDIUM / LOW

Driver
Approver
Contributors
Informed
Due date
Outcome

Background

Going to rip off the docker libkv API and implement it as puppet functions under the libkv:: namespace.

A storage backend in libkv should implement (fully or partially) this interface:

Non-Atomic
*     delete(String $key) (Boolean)
*     deletetree(String $directory) (Boolean)
*     get(String $key) (Any)
*     put(String $key, Any $value) (Boolean)
*     exists(String $key) (Boolean)
*     list(String $directory) (Hash)

Atomic
*     atomic_create(String $key, Any $value) (Boolean)
*     atomic_delete(String $key, Hash $previous) (Boolean)
*     atomic_get(String $key) (Hash)
*     atomic_put(String $key, Any $value, Hash previous, Hash options) (Boolean)
*     atomic_list(String $directory) (Hash)

Support
*     empty_value() (Hash)
*     info() (Hash)
*     provider() (String)
*     supports() (Array)

Defined but not implemented
*     watch(String $key, Queue $queue)  - Not Implemented
*     watchtree(String $key, Queue $queue) - Not Implemented
*     newlock(String $key, Hash options) - Not Implemented



We will start with four backends:

  • mock - This is a fake KV store that will only be used for unit and acceptance testing purposes.
  • legacy-simp6 - this duplicates fakeca and passgen and other simp modules that store random files on a puppet master. This will be the default at least for the SIMP 6 major branch.
  • consul - implements the storage semantics under consul
  • etcd - implements the storage semantics under etcd

The default will be 'legacy-simp6' so it won't be an API breakage

Architecting is considered finished when unit and acceptance tests are created in pupmod-simp-libkv, and mockprovider passes all the tests. implementation of other backends will be other tickets.

Documentation will be another ticket blocked by this one, as I don't want to finalize docs until after the first providers are written and we attempt to integrate with existing modules

global parameters:

  • url
  • softfail
  • debug
  • auth

SIMP-2435 - Getting issue details... STATUS

Relevant data


key summary type created updated due assignee reporter priority status resolution
Loading...
Refresh

Options considered


Option 1:Option 2:
Description

Pros and cons

(plus)

(minus)

(plus)

(minus)

Estimated cost
LARGE
MEDIUM

Action items

  •  

Outcome