The Core provides two types of migration:
Migration between nodes
Migration between nodes is the proces where the Core moves a group of objects from node A to another node B. The objects are first destroyed on the node A, then transferred over the network to the node B on which they are finally recreated to their state before the migration.
By default this migration is transparent to the objects because on the node B the objects are recreated to the same state as on the node A before their destruction. Sometimes, mostly for debuging purposes, it is usefull to know when an object migrates. See Section 6.8, “Detecting Migrations Between Nodes” for more information about this problem.
Migration between objects
This type of migration is also called delivery of an object to another object. The destination of the migration is some object in the simulation. The migrated object is moved to the node where the destination object exists and delivery callback is invoked on the migrated object with the destination object passed as an argument. This type of migration is the basic principle on which the entire communication among remote objects (objects which can't access directly each other) is built upon.
The two types of migrations are presented only for clarity because user of the Core doesn't need to distinguish between them. There is one common interface how to request migration of an object to either another object or to some node in the simulation (nodes can be addressed on object level too, see Section 14.2, “Node Object”). Also the migration between objects is an extension of the migration between nodes because the migrated object can travel among several nodes before the destination object is found in the simulation.