Data Pipeline Patterns
Retry Plan
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
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);
}
}
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;delays ← (empty)
1public class RetryPlan {2 static String buildPlan(int maxRetries3) {3 StringBuilder delays→ (empty) = new StringBuilder();for (int retry = 1; retry <= maxRetries; retry++)
pass 1 of 35for (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 pass retry1 1 2 2 3 3 if (retry > 1)
pass 1 of 25for (int retry = 1; retry <= maxRetries; retry++) {6 if (retry2 > 1) {7 delays.append(",");8 }delays.append(retry * 100);
8 }9 delays.append(retry2 * 100);10}if (retry > 1)
pass 2 of 25for (int retry = 1; retry <= maxRetries; retry++) {6 if (retry3 > 1) {7 delays.append(",");8 }delays.append(retry * 100);
8 }9 delays.append(retry3 * 100);10}return delays.toString();
12 return delays.toString();13}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
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;delays ← (empty)
1public class RetryPlan {2 static String buildPlan(int maxRetries1) {3 StringBuilder delays→ (empty) = new StringBuilder();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}return delays.toString();
12 return delays.toString();13}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
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;delays ← (empty)
1public class RetryPlan {2 static String buildPlan(int maxRetries4) {3 StringBuilder delays→ (empty) = new StringBuilder();for (int retry = 1; retry <= maxRetries; retry++)
pass 1 of 45for (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 pass retry1 1 2 2 3 3 4 4 if (retry > 1)
pass 1 of 35for (int retry = 1; retry <= maxRetries; retry++) {6 if (retry2 > 1) {7 delays.append(",");8 }All 3 passes — pass 1 is the card above pass retry1 2 2 3 3 4 delays.append(retry * 100);
8 }9 delays.append(retry2 * 100);10}delays.append(retry * 100);
8 }9 delays.append(retry3 * 100);10}delays.append(retry * 100);
8 }9 delays.append(retry4 * 100);10}return delays.toString();
12 return delays.toString();13}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