In order to implement closed set detection (#7) we need to change how actors keep track of references.
Deliverables
[x] Implement knowledge sets: A knowledge set is a snapshot of the references an actor knows about at a given time. This includes ctx.refs, ctx.created, and ctx.owners.
[x] Implement knowledge set tests. These will be useful for the other modifications we make.
[x] Release acknowledgment messages: Suppose ref = gc.ActorRef(x,A,B). If A invokes ctx.release(ref), that reference should remain in its knowledge set until after it receives a corresponding AckRelease message from B. Bugs to watch out for:
Make sure actors cannot release a reference multiple times. You can do this by moving the reference from ctx.refs to a new temporary set, ctx.releasing_refs.
Suppose A sent B a Release message containing reference x and then immediately sent B another Release message containing reference y. Then A will receive two AckRelease messages in response. Make sure A does not forget y until the secondAckRelease message. You can do this by attaching a sequence number to everyReleaseandAckRelease` message.
[x] Implement acknowledgment tests: Look at knowledge sets to make sure that the invariant above is maintained.
In order to implement closed set detection (#7) we need to change how actors keep track of references.
Deliverables
[x] Implement knowledge sets: A knowledge set is a snapshot of the references an actor knows about at a given time. This includes
ctx.refs
,ctx.created
, andctx.owners
.[x] Implement knowledge set tests. These will be useful for the other modifications we make.
[x] Release acknowledgment messages: Suppose
ref = gc.ActorRef(x,A,B)
. If A invokesctx.release(ref)
, that reference should remain in its knowledge set until after it receives a correspondingAckRelease
message from B. Bugs to watch out for:ctx.refs
to a new temporary set,ctx.releasing_refs
.Release
message containing referencex
and then immediately sent B anotherRelease
message containing referencey
. Then A will receive twoAckRelease
messages in response. Make sure A does not forgety
until the secondAckRelease message. You can do this by attaching a sequence number to every
Releaseand
AckRelease` message.[x] Implement acknowledgment tests: Look at knowledge sets to make sure that the invariant above is maintained.