public Duration getServerTimeoutOrThrow() {
        // readTimeout = DOWNSTREAM_OVERHEAD + serverTimeout
        TimeBudget serverBudget = readBudget().withReserved(DOWNSTREAM_OVERHEAD);
        if (serverBudget.timeLeft().get().compareTo(MIN_SERVER_TIMEOUT) < 0)
            throw new UncheckedTimeoutException("Timed out after " + timeBudget.originalTimeout().get());

        return serverBudget.timeLeft().get();
    }
Creates a timeouts instance.

The {@link #timeBudget} SHOULD be the time budget for a single logical call to the Cluster Controller.
A logical call to CC may in fact call the CC several times, if the first ones are down and/or not
the master.

@param timeBudget  The time budget for a single logical call to the Cluster Controller.
orchestrator/src/main/java/com/yahoo/vespa/orchestrator/controller/ClusterControllerClientTimeouts.java