Coder Social home page Coder Social logo

rtable's Issues

Support batch operations

With the latest changes in repair and write protocols, batch operations were not brought up to speed.

Implement auto-reconfiguration

  • Detect storage failure. Log critical event when outage is detected.
  • If auto-reconfiguration is enabled, any client (preferably elected leader by taking leases on configuration blobs) can reconfigure the chain.
  • Similarly, any client should be able to re-introduce a replica once it detects that storage is back online.
  • build some kind of hysteresis control.

Implement caching of views in the rtable code

When a view changes, the rtable client must continiue to use the older view till its lease expires. To do this, it must operate on a cached view and check for its validity before each transaction

Implicit reliance on global synchronized clocks

This isn't necessarily a "bug", but it does need explicitly called out in the documentation.

In ReplicatedTable.cs, there is a fair bit of logic that is deciding whether or not a lock has expired based on the clients clock (via calls to DateTime.UtcNow. The trouble with this is that any client clock which has drifted may inadvertently begin experiencing unexpected behaviors.

For example, in ReplicatedTable.cs lines 715 and 1400, we have the following conditional checks:

if (DateTime.UtcNow >= currentRow._rtable_LockAcquisition + this._configurationWrapper.GetLockTimeout()) {...}

Since rtable runs on the clients, the assumption in this code is that all clients have stable clocks - which, as we know is not a trivial assumption to make.

Continuing the previous example, if we consider a client clock that has drifted ahead. If this case, the client will begin evaluating this condition as True, thereby allowing Flush2PC to proceed when it should have not. Likewise, a client who has drifted behind, will likely never be able to flush writes, since the above condition will end up returning False most of the time.

Apart from documenting the assumption of consistent global time (which needs to be called out), has any thought been given to moving away from wall-time? For example, storing a vector/logical clock in the entity metadata, and implemented standard Lamport-style logic in the clients to determine whether they are behind or not, etc.

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.