azure / rtable Goto Github PK
View Code? Open in Web Editor NEWReplicated Table Library for Microsoft Azure Storage
License: Other
Replicated Table Library for Microsoft Azure Storage
License: Other
With the latest changes in repair and write protocols, batch operations were not brought up to speed.
Currently, we dont and fail with conflict
One suggestion is Microsoft.Azure.Labs.RTable
Currently, clients will need to re-read the data and retry. it is possible for clients to overwrite the data of an in-progress write.
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
There are important files that Microsoft projects should all have that are not present in this repository. A pull request has been opened to add the missing file(s). When the pr is merged this issue will be closed automatically.
Microsoft teams can learn more about this effort and share feedback within the open source guidance available internally.
The user of rtable library should not be exposed to stale view. For conflict, it should be the same error contract as xTable has for conficts
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.