private Duration expiryFor(Node node) {
        return node.allocation().isEmpty() ? Duration.ZERO
                                           : node.allocation().get().membership().cluster().isStateful() ? statefulExpiry
                                                                                                         : statelessExpiry;
    }
This moves expired failed nodes:

- To parked: If the node has known hardware failure, hosts are moved to parked only when all of their
             children are already in parked.
- To dirty: If the node is a host and has failed less than 5 times, or always if the node is a child.
- Otherwise the node will remain in failed.

Failed content nodes are given a long expiry time to enable us to manually moved them back to
active to recover data in cases where the node was failed accidentally.

Failed containers (Vespa, not Linux) are expired early as there's no data to potentially recover.

The purpose of the automatic recycling to dirty + fail count is that nodes which were moved
to failed due to some undetected hardware failure will end up being failed again.
When that has happened enough they will not be recycled, and need manual inspection to move on.

Nodes with detected hardware issues will not be recycled.

@author bratseth
@author mpolden
node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java