Adjust latency and jitter for Toxi proxy to stabilize SDK resiliency IT (#1070)

This commit is contained in:
artur-ciocanu 2024-07-10 03:27:12 +03:00 committed by GitHub
parent 3dadc0be06
commit a4ec275353
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 25 additions and 15 deletions

View File

@ -38,7 +38,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Test SDK resiliency.
*/
public class ActorSdkResiliencytIT extends BaseIT {
public class ActorSdkResiliencyIT extends BaseIT {
private static final ActorId ACTOR_ID = new ActorId(UUID.randomUUID().toString());
@ -69,7 +69,7 @@ public class ActorSdkResiliencytIT extends BaseIT {
@BeforeAll
public static void init() throws Exception {
daprRun = startDaprApp(
ActorSdkResiliencytIT.class.getSimpleName(),
ActorSdkResiliencyIT.class.getSimpleName(),
DemoActorService.SUCCESS_MESSAGE,
DemoActorService.class,
true,

View File

@ -36,20 +36,18 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Test SDK resiliency.
*/
public class SdkResiliencytIT extends BaseIT {
public class SdkResiliencyIT extends BaseIT {
private static final int NUM_ITERATIONS = 35;
private static final Duration TIMEOUT = Duration.ofMillis(100);
private static final Duration LATENCY = TIMEOUT.dividedBy(2);
private static final Duration LATENCY = TIMEOUT.dividedBy(3);
private static final Duration JITTER = TIMEOUT.multipliedBy(2);
private static final Duration JITTER = TIMEOUT.multipliedBy(3);
private static final int MAX_RETRIES = -1; // Infinity
private static DaprRun daprRun;
private static DaprClient daprClient;
private static ToxiProxyRun toxiProxyRun;
@ -64,7 +62,7 @@ public class SdkResiliencytIT extends BaseIT {
@BeforeAll
public static void init() throws Exception {
daprRun = startDaprApp(SdkResiliencytIT.class.getSimpleName(), 5000);
DaprRun daprRun = startDaprApp(SdkResiliencyIT.class.getSimpleName(), 5000);
daprClient = new DaprClientBuilder().build();
daprClient.waitForSidecar(8000).block();
@ -113,7 +111,7 @@ public class SdkResiliencytIT extends BaseIT {
@Test
public void retryAndTimeout() {
AtomicInteger toxiClientErrorCount = new AtomicInteger();
AtomicInteger retryOneClientErrorCount = new AtomicInteger();
AtomicInteger retryOnceClientErrorCount = new AtomicInteger();
while (true){
for (int i = 0; i < NUM_ITERATIONS; i++) {
@ -129,7 +127,7 @@ public class SdkResiliencytIT extends BaseIT {
daprRetriesOnceClient.saveState(STATE_STORE_NAME, key, value).block();
} catch (Exception e) {
// This call should fail sometimes. So, we count.
retryOneClientErrorCount.incrementAndGet();
retryOnceClientErrorCount.incrementAndGet();
}
// We retry forever so that the call below should always work.
@ -140,17 +138,29 @@ public class SdkResiliencytIT extends BaseIT {
}
// We should have at least one success per client, otherwise retry.
if(toxiClientErrorCount.get() < NUM_ITERATIONS && retryOneClientErrorCount.get() < NUM_ITERATIONS){
if(toxiClientErrorCount.get() < NUM_ITERATIONS && retryOnceClientErrorCount.get() < NUM_ITERATIONS){
// This assertion makes sure that toxicity is on
assertTrue(toxiClientErrorCount.get() > 0);
assertTrue(retryOneClientErrorCount.get() > 0);
assertTrue(toxiClientErrorCount.get() > 0, "Toxi client error count is 0");
assertTrue(retryOnceClientErrorCount.get() > 0, "Retry once client error count is 0");
// A client without retries should have more errors than a client with one retry.
assertTrue(toxiClientErrorCount.get() > retryOneClientErrorCount.get());
String failureMessage = formatFailureMessage(toxiClientErrorCount, retryOnceClientErrorCount);
assertTrue(toxiClientErrorCount.get() > retryOnceClientErrorCount.get(), failureMessage);
break;
}
toxiClientErrorCount.set(0);
retryOneClientErrorCount.set(0);
retryOnceClientErrorCount.set(0);
}
}
private static String formatFailureMessage(
AtomicInteger toxiClientErrorCount,
AtomicInteger retryOnceClientErrorCount
) {
return String.format(
"Toxi client error count: %d, Retry once client error count: %d",
toxiClientErrorCount.get(),
retryOnceClientErrorCount.get()
);
}
}