Giter Club home page Giter Club logo

reconcile-rs's People

Contributors

adriendellagaspera avatar qsantos avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

reconcile-rs's Issues

Parallelize message handling

Currently, all reconciliation is done in a single thread. In certain circumstances, allowing deserialization, reconciliation and serialization to be performed in separate threads could be useful.

Update tombstones from reconciliation

Currently, tombstone care-taking is done in Service::{insert,remove}{,_bulk}, which are not called when doing reconciliation with another instance. The list of known tombstones should be updated in before_insert.

However, before_insert is currently only called during reconciliation. The first step is thus to unify this by having before_insert be called by InternalService::insert{,_bulk}. Thus, this issue is blocked by #57.

Rename HTree -> HRTree

The name HTree is already reserved on crates.io.
HRTree, or HashRangeTree, better fits the inner working of our tree, which can be queried on hash ranges.

Fix deadlock when using map from hook

Using the map in pre_insert would currently leave to a deadlock, since the guard is taken before calling the hook. This can be easily solved in just_insert, but not in just_insert_bulk.

“Operation not permitted” when running in CI

Add Service::insert_bulk

Once #12 is resolved, insert() will immediately send the value in a datagram. This can be inefficient when inserting many values at once. Instead, we should also offer an insert_bulk() method, which will try to group as many values as possible in a datagram.

Clear old peers

Since we need to update the last time we've seen a peer, we'll also need a timer wheel structure

Broadcast changes immediately

Currently, the integration test in tests/service.rs must wait until the reconciliation protocol starts. This happens after up to 100 ms (the timeout for recv_from).

This will also happen in real conditions.

This can be improved by having Service::insert() broadcast the change immediately to the peers.

Spec de la réconciliation

Pour le moment le code expose deux comportements différents pour la réconciliation :

  • reconciliate pour réconcilier deux HTrees localement. Il ne sera jamais vraiment utile, sauf à choisir de partager entièrement le HTree par UDP avec une autre instance et de le récupérer "à jour" ensuite.
  • answer_queries pour acter le processus de réconciliation entre un HTree local et un remote, par le biais de ccommunication UDP. Il agit comme une surcouche de communication réseau au-dessus de la couche de stockage (le HTree). Mais pour le moment, cette couche de communication est encore trop couplée avec la couche de stockage. Notamment, c'est à ce niveau que sont gérés les conflits.

Je propose de mieux établir la spec pour chaque couche pour mieux s'y retrouver notamment dans la définition des comportements associés.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.