Skip to content
/ floe Public

This is a generic simple key/value store interface that abstracts away the storage implementation details behind an API and rest interface. We use it when persisting serialized objects out of active memory sets into more efficient but slower storage mechanisms.

License

Notifications You must be signed in to change notification settings

happybits/floe

Repository files navigation

Floe Microservice

This presents a simple key value data store with a list of ids and configurable backends.

Configuration

You can configure docker with environmental variables.

OpenTelemetry is used for instrumentation. Configure via standard OTEL environment variables.

You can add additional environmental vars for backends.

FLOE_URL_FOO='file://.floe'
FLOE_URL_BAR='file:///tmp/floe'
FLOE_URL_BAZZ='mysql://root:pass@127.0.0.1:3306/test?table=bazz'
FLOE_URL_QUUX='http://127.0.0.1:995/my_namespace'

API

You can add other connectors. The interface provides the following methods:

  • get
  • get_multi
  • set
  • set_multi
  • delete
  • delete_multi
  • ids
  • flush

The ids method returns a generator to iterate. The multi methods allow you do do batch operations on multiple keys.

Running Locally

Due to some inconsistencies with the way request bodies are handled in different WSGI implementations, PUT requests with a missing or incorrect Content-Length header may hang (https://falcon.readthedocs.io/en/stable/user/faq.html#why-does-req-stream-read-hang-for-certain-requests).

An easy workaround for this when running the server locally is to use gunicorn rather than wsgiref.simple_server

$ pip install gunicorn
$ gunicorn -w 4 run:app

Publishing new versions

  1. Set a new version number in floe/version.py
  2. ./activate to set up and enter the project venv
  3. ./publish.sh to create source and binary distributions and upload them to pypi using the twine tool

Credentials for pypi are stored in 1password

About

This is a generic simple key/value store interface that abstracts away the storage implementation details behind an API and rest interface. We use it when persisting serialized objects out of active memory sets into more efficient but slower storage mechanisms.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 6