Message redirection

When a process is moved from a source to a destination node its new location is saved on the source node. Initially, no information about the move is sent to the processes holding references to the migrated process. As a consequence, they continue to send messages to the old location, which forwards them to the new location. If a message reaches a node whilst a process' execution has been suspended pending the completion of migration then they are buffered. After the execution of the suspended process is resumed on the destination computer, all buffered messages are forwarded. If a process migrates several times, then a chain of forwarding pointers (a.k.a. proxies) exists. This is undesirable for several reasons. If any of the nodes holding a forwarding pointer in the chain fails, then the object becomes unreachable (<#2596#> i.e.<#2596#> there are residual dependencies). In addition, all messages to the migrated object must now be retransmitted several times before they are received. This increases the network load and increases the delay, potentially to the point at which message timeouts expire and the senders come to believe that the process no longer exists. One way around this a problem is to piggyback the new location of the object on the reply to (the first) messages sent by a process to the old location. At the same time, the whole chain of pointers is updated to point to the last known location. This means that after a move (or series of moves) a pointer chain is followed only once by a particular process; subsequent messages go directly to the last known location. A second technique to reduce communications costs using this method is known as `short circuiting'. When a process migrates back to a node which already has a forwarding pointer for it (<#2597#> i.e.<#2597#> it has been there before) then the forwarding pointer is deleted. An messages arriving at the node are not then propagated around the chain unnecessarily, they go directly to the object.