|
20 | 20 | import com.amazon.aoc.exception.ExceptionCode; |
21 | 21 | import com.amazon.aoc.fileconfigs.FileConfig; |
22 | 22 | import com.amazon.aoc.helpers.MustacheHelper; |
| 23 | +import com.amazon.aoc.helpers.RetryHelper; |
23 | 24 | import com.amazon.aoc.models.Context; |
24 | 25 | import com.amazon.aoc.models.SampleAppResponse; |
25 | 26 | import com.amazon.aoc.services.XRayService; |
|
28 | 29 | import lombok.extern.log4j.Log4j2; |
29 | 30 |
|
30 | 31 | import java.util.*; |
31 | | -import java.util.concurrent.TimeUnit; |
| 32 | +import java.util.concurrent.atomic.AtomicReference; |
32 | 33 |
|
33 | 34 | @Log4j2 |
34 | 35 | public class TraceValidator implements IValidator { |
@@ -80,33 +81,23 @@ public void validate() throws Exception { |
80 | 81 | // this method will hit get trace from x-ray service and get retrieved trace |
81 | 82 | private Map<String, Object> getRetrievedTrace(List<String> traceIdList) throws Exception { |
82 | 83 | Map<String, Object> flattenedJsonMapForRetrievedTrace = null; |
83 | | - List<Trace> retrieveTraceList = null; |
| 84 | + AtomicReference<List<Trace>> retrieveTraceListAtomicReference = new AtomicReference<>(); |
84 | 85 | int MAX_RETRY_COUNT = 3; |
85 | | - int count = 1; |
86 | 86 |
|
87 | | - while (retrieveTraceList == null || retrieveTraceList.isEmpty()) { |
88 | | - // wait for sample app to send trace data to x-ray |
89 | | - log.info("sleeping for 15 seconds before retrieving data from x-ray service"); |
90 | | - TimeUnit.SECONDS.sleep(15); |
| 87 | + RetryHelper.retry(MAX_RETRY_COUNT, () -> { |
| 88 | + List<Trace> retrieveTraceList = null; |
| 89 | + retrieveTraceList = xrayService.listTraceByIds(traceIdList); |
| 90 | + retrieveTraceListAtomicReference.set(retrieveTraceList); |
91 | 91 |
|
92 | | - try { |
93 | | - retrieveTraceList = xrayService.listTraceByIds(traceIdList); |
94 | | - } catch (Exception e) { |
95 | | - log.error("exception while retrieving trace data from x-ray service" + e.getMessage()); |
96 | | - e.printStackTrace(); |
97 | | - } |
98 | | - |
99 | | - if (count == MAX_RETRY_COUNT) { |
100 | | - break; |
| 92 | + if (retrieveTraceList == null || retrieveTraceList.isEmpty()) { |
| 93 | + throw new BaseException(ExceptionCode.EMPTY_LIST); |
101 | 94 | } |
102 | | - |
103 | | - count++; |
104 | | - } |
| 95 | + }); |
105 | 96 |
|
106 | 97 | // flattened JSON object to a map |
107 | | - if (retrieveTraceList != null && !retrieveTraceList.isEmpty()) { |
108 | | - try{ |
109 | | - flattenedJsonMapForRetrievedTrace = JsonFlattener.flattenAsMap(retrieveTraceList.get(0).getSegments().get(0).getDocument()); |
| 98 | + if (retrieveTraceListAtomicReference.get() != null && !retrieveTraceListAtomicReference.get().isEmpty()) { |
| 99 | + try { |
| 100 | + flattenedJsonMapForRetrievedTrace = JsonFlattener.flattenAsMap(retrieveTraceListAtomicReference.get().get(0).getSegments().get(0).getDocument()); |
110 | 101 | } catch (Exception e) { |
111 | 102 | log.error("exception while flattening the retrieved trace: " + e.getMessage()); |
112 | 103 | e.printStackTrace(); |
|
0 commit comments