The following parts of GridServiceProcessor look wrong to me:
And in GridServiceProcessor#onDeployment
The rest of ServiceProcessor relies on the deployments being processed in a single thread, while this code will be executed in the timeout processor thread. Not only can it take a lot of time to reassign, which will stall the timeout thread, but it may also break the service assignment logic.
The corresponding calls should be wrapped to runnables and submitted to the depExe.