Guillotina Object Server

Ramon Navarro Bosch

Guillotina Object Server

Guillotina is using a Postgres compatible database as the source of truth and uses Elasticsearch of PostgreSQL JSONB for indexing. This project is about creating a new component that handles storage and index on a new distributed piece of software: Guillotina Object Server. The main values of this project are transactionality, distribution of information and indexing technology with a low-level language: Rust.

The aim is to build a small and fast component that handles transactions and keyword/full-text searches from Guillotina. There is already a basic implementation which shows the overall design of the concept with a Protobuffer protocol, Rust bindings to RocksDB and basic integration with Tantivity (full-text indexer). Based on top of Tokio async framework on Rust and Protobuffer protocol this project has four goals: - Storing python pickles on a Rocksdb mapping the transaction mechanism from Guillotina. It needs to provide the same API from internal storage Guillotina so each object is stored on a secure hierarchical structure. - Storing the indexing information on each transaction on RocksDB and Tantivity to support keyword indexes and full-text index. - Providing an interface to search ok keyword indexes and full-text search with the security checks. - Providing an interface to load security and pickles using Guillotina internal storage API. As optional, providing a Raft protocol to sync multiple instances of the object server and distribute the load would be great.

- A minimum viable binary that receives objects from Guillotina and is able to store and read them on a Rocksdb, handle transactions and index on a keyword index or full-text search. - A python package that serializes objects on a transaction to Protobuffer and implements ICatalogUtility so Guillotina can do searches.

Stakeholder: Ramon Navarro Bosch Mentor: Ramon Navarro Bosch Mentor: Nathan Van Gheem