Comments (1)
The exception recorded in the previous message was caused by an unexpected behavior of
DeltaStoreBasedWaveletState.cachedDeltas
: this map must contain all deltas already applied to the the wavelet snapshot DeltaStoreBasedWaveletState.snapshot
, but the exception shows that sometimes, the latest delta is not present in cachedDeltas,
whereas snapshot
already has been updated with it. Both data structures are updated in the method appendDelta()
(see below) but in original code, invocation to cachedDeltas.put()
is done outside the synchronized block.
With debugging code, it's demonstrated that cachedDeltas' map got desynchronized sometimes.
@Override
public void appendDelta(WaveletDeltaRecord deltaRecord)
throws OperationException {
HashedVersion currentVersion = getCurrentVersion();
Preconditions.checkArgument(currentVersion.equals(deltaRecord.getAppliedAtVersion()),
"Applied version %s doesn't match current version %s", deltaRecord.getAppliedAtVersion(),
currentVersion);
if (deltaRecord.getAppliedAtVersion().getVersion() == 0) {
Preconditions.checkState(lastPersistedVersion.get() == null);
snapshot = WaveletDataUtil.buildWaveletFromFirstDelta(getWaveletName(), deltaRecord.getTransformedDelta());
contributions = new WaveletContributions(deltasAccess.getWaveletName());
contributions.apply(deltaRecord.getTransformedDelta());
} else {
// Avoid to update snapshot when it has being persisted
synchronized (persistLock) {
WaveletDataUtil.applyWaveletDelta(deltaRecord.getTransformedDelta(), snapshot);
contributions.apply(deltaRecord.getTransformedDelta());
}
}
// Now that we built the snapshot without any exceptions, we record the delta.
cachedDeltas.put(deltaRecord.getAppliedAtVersion(), deltaRecord); <------- UNSAFE UPDATE
// Increment counter controlling snapshot persistence
deltasCountBeforeSnapshotStore++;
}
from swellrt.
Related Issues (20)
- Questions about logged in users or participants HOT 2
- Is there a formal mechanism for cleaning up when no active connection (i.e. opening) to a collaborative object? HOT 4
- Unable to run swellrt in docker HOT 1
- Not response from swellrt server in some cases HOT 1
- Restrict swellrt be served for my application only HOT 1
- How to know user of a particular id exists or not? HOT 2
- swellrt version and jetpad version HOT 2
- Editor customisation question HOT 3
- Memory leaking HOT 3
- stopShowDiffs function only available in dev build
- Maximum number of Clients (viewers) for Text editor HOT 5
- why requiring Java JDK 8 & MongoDB 3.2 HOT 2
- id postfix in open
- getObjectNames() to return object id as a single string HOT 2
- Service instable HOT 9
- Client error writing in a large object HOT 16
- How to activate annotations from the current caret positions HOT 1
- Exception when working with large size data
- How to get the revision data of a specific version?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from swellrt.