Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RemoteDaemon bug, not removing children #1068

Merged
merged 5 commits into from Jun 23, 2015
Merged

RemoteDaemon bug, not removing children #1068

merged 5 commits into from Jun 23, 2015

Conversation

rogeralsing
Copy link
Contributor

This fixes the issue that remote deployed actors was not removed from the remote daemon when .Stop(remoteref). which resulted in that it was impossible to re-deploy remote actors with the same name,

Renamed RemoteDaemon to RemoteSystemDaemon (was changed in JVM)
Added Hooks
Added spin-retry updates of parent2children
Added fake remote terminator argument (using deadletters instead of true termination hooks as those are still missing)
Added AddChildParentNeedsWatch

Renamed RemoteDaemon
Added Hooks
Added spin-retry updates of parent2children
Added fake remote terminator argument
Added addChildParentNeedsWatch
@rogeralsing
Copy link
Contributor Author

I've found a big issue in the last change to this PR.

Apparently, when the RemoteSystemDaemon tries to send messages back to the calling system, there is no Serialization.CurrentTransport
This line parent.Tell(new Watch(parent, this),this); tries to communicate back to the creating system, but the ActorRef for the remote daemon (this, note that remote daemon is an actorref impl, not an actor, thus not "Self") gets serailized w/o transport information, that is, no address, no protocol.
Which causes the calling side to fail when trying to deserialize that message.

This looks critical to me, if the remoting layer "forgets" to set the active transport before sending messages under some conditions.

cc @Aaronontheweb

@rogeralsing
Copy link
Contributor Author

I Updated the PR, fixed the problem with outbound actorrefs in RemoteSystemDaemon. (which was an error in Serialization.SerializeActorRef, not as I first suspected, an error with active transports)

However, there is another bug that surfaces if the parent.Tell(new Watch(parent, this),this); line is uncommented.
The remoting layer will try to re-watch the actorref over and over, so that needs fixing, but I'd say that is a separate issue.
I'm leaving the line commented for now, as this is new functionallity that we have not had before, and which relies on the remote watching re-watch problem to be resolved first.

@rogeralsing
Copy link
Contributor Author

The failing test might be racy or something, it works locally, rerun?

…base, and replaced it with a serializser overload `ToBinaryWithAddress` that applies the thread static magic internally.
@Aaronontheweb
Copy link
Member

This is great work @rogeralsing - I'll give it a full review tomorrow.

@rogeralsing
Copy link
Contributor Author

Just to avoid any confusion, this is unrelated to #1062

Aaronontheweb added a commit that referenced this pull request Jun 23, 2015
…fication

RemoteDaemon bug, not removing children
@Aaronontheweb Aaronontheweb merged commit 9655e9c into akkadotnet:dev Jun 23, 2015
@rogeralsing rogeralsing deleted the remotedaemon-deathwatchnotification branch September 29, 2015 13:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants