A retry plan can be modeled as deterministic data before it drives real scheduling.

retry data The example builds retry delays as plain data instead of sleeping or measuring time.
final delay The final delay summarizes the last retry step for later reporting.

Retry Plan

maxRetries
RetryPlan.java
Replay: real traced execution (multi-file project)
public class RetryPlan {
    static String buildPlan(int maxRetries) {
        StringBuilder delays = new StringBuilder();

        for (int retry = 1; retry <= maxRetries; retry++) {
            if (retry > 1) {
                delays.append(",");
            }
            delays.append(retry * 100);
        }

        return delays.toString();
    }

    public static void main(String[] args) {
        int maxRetries = 3;
        String delays = buildPlan(maxRetries);
        int finalDelay = maxRetries == 0 ? 0 : maxRetries * 100;

        System.out.println("delays=" + delays);
        System.out.println("final=" + finalDelay);
    }
}
public class RetryPlan {
    static String buildPlan(int maxRetries) {
        StringBuilder delays = new StringBuilder();

        for (int retry = 1; retry <= maxRetries; retry++) {
            if (retry > 1) {
                delays.append(",");
            }
            delays.append(retry * 100);
        }

        return delays.toString();
    }

    public static void main(String[] args) {
        int maxRetries = 1;
        String delays = buildPlan(maxRetries);
        int finalDelay = maxRetries == 0 ? 0 : maxRetries * 100;

        System.out.println("delays=" + delays);
        System.out.println("final=" + finalDelay);
    }
}
public class RetryPlan {
    static String buildPlan(int maxRetries) {
        StringBuilder delays = new StringBuilder();

        for (int retry = 1; retry <= maxRetries; retry++) {
            if (retry > 1) {
                delays.append(",");
            }
            delays.append(retry * 100);
        }

        return delays.toString();
    }

    public static void main(String[] args) {
        int maxRetries = 4;
        String delays = buildPlan(maxRetries);
        int finalDelay = maxRetries == 0 ? 0 : maxRetries * 100;

        System.out.println("delays=" + delays);
        System.out.println("final=" + finalDelay);
    }
}
  1. maxRetries ← 3

    15public static void main(String[] args) {16    int maxRetries→ 3 = 3;  //@maxRetries=1, 417    String delays = buildPlan(maxRetries3);18    int finalDelay = maxRetries == 0 ? 0 : maxRetries * 100;
  2. delays ← (empty)

    1public class RetryPlan {2    static String buildPlan(int maxRetries3) {3        StringBuilder delays→ (empty) = new StringBuilder();
  3. for (int retry = 1; retry <= maxRetries; retry++)

    pass 1 of 3
    5for (int retry1 = 1; retry <= maxRetries3; retry++) {6    if (retry > 1) {7        delays.append(",");8    }9    delays.append(retry1 * 100);10}
    All 3 passes — pass 1 is the card above
    passretry
    11
    22
    33
  4. if (retry > 1)

    pass 1 of 2
    5for (int retry = 1; retry <= maxRetries; retry++) {6    if (retry2 > 1) {7        delays.append(",");8    }
  5. delays.append(retry * 100);

    8    }9    delays.append(retry2 * 100);10}
  6. if (retry > 1)

    pass 2 of 2
    5for (int retry = 1; retry <= maxRetries; retry++) {6    if (retry3 > 1) {7        delays.append(",");8    }
  7. delays.append(retry * 100);

    8    }9    delays.append(retry3 * 100);10}
  8. return delays.toString();

    12    return delays.toString();13}
  9. delays ← 100,200,300, finalDelay ← 300

    16    int maxRetries = 3;  //@maxRetries=1, 417    String delays→ 100,200,300 = buildPlan(maxRetries3);18    int finalDelay→ 300 = maxRetries3 == 0 ? 0 : maxRetries * 100;1920    System.out.println("delays=" + delays100,200,300);21    System.out.println("final=" + finalDelay300);22}
    outputdelays=100,200,300
    final=300
  1. maxRetries ← 1

    15public static void main(String[] args) {16    int maxRetries→ 1 = 1;17    String delays = buildPlan(maxRetries1);18    int finalDelay = maxRetries == 0 ? 0 : maxRetries * 100;
  2. delays ← (empty)

    1public class RetryPlan {2    static String buildPlan(int maxRetries1) {3        StringBuilder delays→ (empty) = new StringBuilder();
  3. for (int retry = 1; retry <= maxRetries; retry++)

    5for (int retry1 = 1; retry <= maxRetries1; retry++) {6    if (retry > 1) {7        delays.append(",");8    }9    delays.append(retry1 * 100);10}
  4. return delays.toString();

    12    return delays.toString();13}
  5. delays ← 100, finalDelay ← 100

    16    int maxRetries = 1;17    String delays→ 100 = buildPlan(maxRetries1);18    int finalDelay→ 100 = maxRetries1 == 0 ? 0 : maxRetries * 100;1920    System.out.println("delays=" + delays100);21    System.out.println("final=" + finalDelay100);22}
    outputdelays=100
    final=100
  1. maxRetries ← 4

    15public static void main(String[] args) {16    int maxRetries→ 4 = 4;17    String delays = buildPlan(maxRetries4);18    int finalDelay = maxRetries == 0 ? 0 : maxRetries * 100;
  2. delays ← (empty)

    1public class RetryPlan {2    static String buildPlan(int maxRetries4) {3        StringBuilder delays→ (empty) = new StringBuilder();
  3. for (int retry = 1; retry <= maxRetries; retry++)

    pass 1 of 4
    5for (int retry1 = 1; retry <= maxRetries4; retry++) {6    if (retry > 1) {7        delays.append(",");8    }9    delays.append(retry1 * 100);10}
    All 4 passes — pass 1 is the card above
    passretry
    11
    22
    33
    44
  4. if (retry > 1)

    pass 1 of 3
    5for (int retry = 1; retry <= maxRetries; retry++) {6    if (retry2 > 1) {7        delays.append(",");8    }
    All 3 passes — pass 1 is the card above
    passretry
    12
    23
    34
  5. delays.append(retry * 100);

    8    }9    delays.append(retry2 * 100);10}
  6. delays.append(retry * 100);

    8    }9    delays.append(retry3 * 100);10}
  7. delays.append(retry * 100);

    8    }9    delays.append(retry4 * 100);10}
  8. return delays.toString();

    12    return delays.toString();13}
  9. delays ← 100,200,300,400, finalDelay ← 400

    16    int maxRetries = 4;17    String delays→ 100,200,300,400 = buildPlan(maxRetries4);18    int finalDelay→ 400 = maxRetries4 == 0 ? 0 : maxRetries * 100;1920    System.out.println("delays=" + delays100,200,300,400);21    System.out.println("final=" + finalDelay400);22}
    outputdelays=100,200,300,400
    final=400