trait Crdt extends AnyRef

CRDT Protocol Note that while this protocol provides support for CRDTs, the data types sent across the protocol are not CRDTs themselves. It is the responsibility of the CloudState proxy to implement the CRDTs, merge functions, vector clocks etc, not the user function. The user function need only hold the current value in memory, and this protocol sends deltas to the user function to update its in memory value as necessary. These deltas have no way of dealing with conflicts, hence it important that the CloudState proxy always know what the state of the user functions in memory value is before sending a delta. If the CloudState proxy is not sure what the value is, eg because it has just sent an operation to the user function may have updated its value as a result, the proxy should wait until it gets the result of the operation back, to ensure its in memory value is in sync with the user function so that it can calculate deltas that won't conflict. The user function is expected to update its value both as the result of receiving deltas from the proxy, as well as when it sends deltas. It must not update its value in any other circumstance, updating the value in response to any other stimuli risks the value becoming out of sync with the CloudState proxy. The user function will not be sent back deltas as a result of its own changes. An invocation of handle is made for each entity being handled. It may be kept alive and used to handle multiple commands, and may subsequently be terminated if that entity becomes idle, or if the entity is deleted. Shutdown is typically done for efficiency reasons, unless the entity is explicitly deleted, a terminated handle stream does not mean the proxy has stopped tracking the state of the entity in its memory. Special care must be taken when working with maps and sets. The keys/values are google.protobuf.Any, which encodes the value as binary protobuf, however, serialized protobufs are not stable, two semantically equal objects could encode to different bytes. It is the responsibility of the user function to ensure that stable encodings are used.

Linear Supertypes
AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Crdt
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract def handle(in: Source[CrdtStreamIn, NotUsed]): Source[CrdtStreamOut, NotUsed]

    After invoking handle, the first message sent will always be a CrdtInit message, containing the entity ID, and, if it exists or is available, the current state of the entity.

    After invoking handle, the first message sent will always be a CrdtInit message, containing the entity ID, and, if it exists or is available, the current state of the entity. After that, one or more commands may be sent, as well as deltas as they arrive, and the entire state if either the entity is created, or the proxy wishes the user function to replace its entire state. The user function must respond with one reply per command in. They do not necessarily have to be sent in the same order that the commands were sent, the command ID is used to correlate commands to replies.

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  9. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  10. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  11. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  12. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  13. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  14. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  15. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  16. def toString(): String
    Definition Classes
    AnyRef → Any
  17. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  18. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  19. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()

Inherited from AnyRef

Inherited from Any

Ungrouped