Story #8162
Updated by Rob Nahf over 7 years ago
When a replication task is created, a list of potential replication targets is added. Some time in the future, the task is executed (mn.replicate() requests sent).
If a MemberNode turns off replication in the time between task creation and task execution, the mn.replicate will still be sent. Even though the MN should protect itself from unwanted requests, it seems is bad form for the CN to send the request after the MN told the CN not to.
ReplicationTaskQueue seems to be the class calling replicate. It should be easy enough to copy the original logic in ReplicationManager that checked the suitability of the potential member node so that the check can be repeated right before the call is made.
We should probably also recheck the systemMetadata, in case that's changed too.
Before doing anything, confirm that the tasks are potentially long-lived.
(Also, the NodeList is cached, so we already allow for 3 minutes of being out of date)
If a MemberNode turns off replication in the time between task creation and task execution, the mn.replicate will still be sent. Even though the MN should protect itself from unwanted requests, it seems is bad form for the CN to send the request after the MN told the CN not to.
ReplicationTaskQueue seems to be the class calling replicate. It should be easy enough to copy the original logic in ReplicationManager that checked the suitability of the potential member node so that the check can be repeated right before the call is made.
We should probably also recheck the systemMetadata, in case that's changed too.
Before doing anything, confirm that the tasks are potentially long-lived.
(Also, the NodeList is cached, so we already allow for 3 minutes of being out of date)