RetryPolicyWithDiagnostics.java
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.cosmos.implementation;
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
public abstract class RetryPolicyWithDiagnostics implements IRetryPolicy{
private volatile int retriesCountForDiagnostics;
private volatile Instant retryStartTime;
private volatile Instant retryEndTime;
private volatile List<int[]> statusAndSubStatusCodes;
@Override
public Instant getStartTime() {
return retryStartTime;
}
@Override
public Instant getEndTime() {
return retryEndTime;
}
@Override
public void addStatusAndSubStatusCode(Integer index, int statusCode, int subStatusCode) {
if(statusAndSubStatusCodes == null) {
statusAndSubStatusCodes = new ArrayList<>();
}
int[] statusAndSubStatusCode = {statusCode, subStatusCode};
if(index == null) {
statusAndSubStatusCodes.add(statusAndSubStatusCode);
}else {
statusAndSubStatusCodes.add(index,statusAndSubStatusCode);
}
}
@Override
public List<int[]> getStatusAndSubStatusCodes(){
return statusAndSubStatusCodes;
}
@Override
public int getRetryCount() {
return this.retriesCountForDiagnostics;
}
@Override
public void incrementRetry(){
this.retriesCountForDiagnostics++;
}
@Override
public Duration getRetryLatency(){
if(this.retryStartTime != null && this.retryEndTime != null) {
return Duration.between(this.retryStartTime, this.retryEndTime);
} else {
return null;
}
}
@Override
public void updateEndTime(){
this.retryEndTime = Instant.now();
}
@Override
public void captureStartTimeIfNotSet(){
if(this.retryStartTime == null) {
this.retryStartTime = Instant.now();;
}
}
}