private void checkAndRedeploy(InfrastructureApplication application) {
        if ( ! readiedTypes.remove(application)) return;
        try (Mutex lock = locks.apply(application.id())) {
            if (application.nodeType().isHost() && nodes.get().state(State.ready).nodeType(application.nodeType()).isEmpty()) return;
            log.log(FINE, () -> "Redeploying " + application.id() + " after completing provisioning for " + application.name());
            try {
                deployer.getDeployment(application.id()).ifPresent(Deployment::activate);
                childOf(application).ifPresent(this::readied);
            }
            catch (RuntimeException e) {
                log.log(INFO, "Failed redeploying " + application.id() + ", will be retried by maintainer", e);
            }
        }
        catch (UncheckedTimeoutException collision) {
            readied(application);
        }
    }
Performs on-demand redeployment of the {@link InfrastructureApplication}s, to minimise time between
host provisioning for a deployment completing, and deployment of its application containers succeeding.

@author jonmv
node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfraApplicationRedeployer.java