A Shared Map
provides a single writer/multiple reader dictionary
with a distributed, replicated data structure.
Internally it uses persistent data structures (immutable.js
) to maintain
multiple versions in an efficient manner.
Multiple versions are needed because Sharing Actors
require both
Readers Isolation
and Fairness
for readers. Readers Isolation
ensures
that contents
do not change during the processing of a message. Fairness
allows
local CAs to see the most recent locally available version, regardless of the
behavior of other CAs.
CA message processing is always within a transaction, and changes to a
Shared Map
are part of that transaction. Therefore, changes wait for
commit
before they are externalized. Writer Atomicity guarantees that
partial updates will never leak.
The consistency goals are read-your-writes
for the single writer within a
transaction. The other CAs have monotonic read consistency: no guarantees
that they see the latest version, but they never see older versions.
Shared Maps
can contain serialized functions (not closures) that can
be evaluated as a method of the map, i.e., binding this
to it, with
applyMethod
.
This implementation does NOT use ES6 Maps, and keys are always strings.
- Source:
Methods
applyChanges(changes)
- Source:
Applies a list of changes to keep the map up-to-date.
Parameters:
Name | Type | Description |
---|---|---|
changes |
mapUpdateType | Array.<mapUpdateType> | Deltas to be applied. |
Throws:
-
If updates are invalid.
- Type
- Error
commit(ref)
- Source:
Commits pending changes.
Parameters:
Name | Type | Description |
---|---|---|
ref |
refMapType | A reference to the map snapshot to be committed. |
Throws:
-
If the map is read only, or there are no pending changes, or a concurrent update was detected.
- Type
- Error
getVersion(refopt) → {number}
- Source:
Returns the current version of this map.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
ref |
refMapType |
<optional> |
An optional reference to a map snapshot. It defaults to the current version. |
Returns:
A version number.
- Type
- number
ref(readOnly) → {refMapType}
- Source:
Returns a reference to a snapshot of the Shared Map
.
Parameters:
Name | Type | Description |
---|---|---|
readOnly |
boolean | True if the reference should not allow changes. |
Returns:
A reference to a Shared Map
snapshot.
- Type
- refMapType
reset()
- Source:
Resets this map.
The original state is lost, including pending commits.
toImmutableObject(refopt) → {Object}
- Source:
Returns an Immutable.js map representing this object.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
ref |
refMapType |
<optional> |
An optional reference to a map snapshot. It defaults to the current version. |
Returns:
An Immutable.js map representing this object.
- Type
- Object
SharedMap(loggeropt, noExecopt, maxUpdatesopt)
- Source:
Constructor.
A distributed, replicated dictionary with one writer and multiple readers.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
logger |
Object |
<optional> |
A logger component to print warnings. |
noExec |
boolean |
<optional> |
True to disable execution of serialized methods. |
maxUpdates |
number |
<optional> |
The number of updates that should be remembered to facilitate client recovery. Beyond that a full dump is needed. |