Skip to content
This repository was archived by the owner on Feb 1, 2023. It is now read-only.

Commit d6e3c11

Browse files
committed
fix: make 5 consequent attempts to getAnalysis during polling if operation does not succeed with 404;
fix: make 5 attempts to re-upload files if operation does not succeed; fix: do not try to getAnalysis if `upload files` is not succeed (i.e. `missingFiles` is not empty after uploads); fix: avoid remove operation for empty immutable List.
1 parent 980128b commit d6e3c11

File tree

2 files changed

+40
-18
lines changed

2 files changed

+40
-18
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
## [2.2.2] - 2022-03
2+
- fix: make 5 consequent attempts to getAnalysis during polling if operation does not succeed with 404
3+
- fix: make 5 attempts to re-upload files if operation does not succeed
4+
- fix: do not try to getAnalysis if `upload files` is not succeed (i.e. `missingFiles` is not empty after uploads)
5+
- fix: avoid remove operation for empty immutable List
26
- fix: check file in marker for nullability before proceed
37
- feat: provide unique (per project) `shard` to getAnalysis call
48

src/main/java/ai/deepcode/javaclient/core/AnalysisDataBase.java

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,12 @@ public void updateCachedResultsForFiles(
204204
@NotNull Collection<Object> allProjectFiles,
205205
@NotNull Object progress) {
206206
Collection<Object> filesToRemove = mapProject2RemovedFiles.remove(project);
207-
if (filesToRemove == null) filesToRemove = Collections.emptyList();
208-
// remove from server only files physically removed from Project
209-
filesToRemove.removeAll(allProjectFiles);
207+
if (filesToRemove == null) {
208+
filesToRemove = Collections.emptyList();
209+
} else {
210+
// remove from server only files physically removed from Project
211+
filesToRemove.removeAll(allProjectFiles);
212+
}
210213
if (allProjectFiles.isEmpty() && filesToRemove.isEmpty()) {
211214
dcLogger.logWarn("updateCachedResultsForFiles requested for empty list of files");
212215
return;
@@ -304,7 +307,11 @@ private Map<Object, List<SuggestionForFile>> retrieveSuggestions(
304307
if (filesToProceed.isEmpty()) { // no sense to proceed
305308
return EMPTY_MAP;
306309
}
307-
uploadFilesStep(project, filesToProceed, missingFiles, progress);
310+
boolean filesUploaded = uploadFilesStep(project, filesToProceed, missingFiles, progress);
311+
if (!filesUploaded) { // no sense to proceed
312+
dcLogger.logWarn("Files upload FAIL");
313+
return EMPTY_MAP;
314+
}
308315

309316
// ---------------------------------------- Get Analysis
310317
final String bundleId = mapProject2BundleId.getOrDefault(project, "");
@@ -385,7 +392,7 @@ private List<String> createBundleStep(
385392
}
386393

387394
/** Perform costly network request. <b>No cache checks!</b> */
388-
private void uploadFilesStep(
395+
private boolean uploadFilesStep(
389396
@NotNull Object project,
390397
@NotNull Collection<Object> filesToProceed,
391398
@NotNull List<String> missingFiles,
@@ -401,24 +408,26 @@ private void uploadFilesStep(
401408
dcLogger.logInfo("No missingFiles to Upload");
402409
} else {
403410
final int attempts = 5;
404-
for (int counter = 0; counter < attempts; counter++) {
405-
uploadFiles(project, filesToProceed, missingFiles, bundleId, progress);
406-
missingFiles = checkBundle(project, bundleId);
407-
if (missingFiles.isEmpty()) {
408-
break;
409-
} else {
411+
int counter = 0;
412+
while (!missingFiles.isEmpty() && counter < attempts) {
413+
if (counter > 0) {
410414
dcLogger.logWarn(
411415
"Check Bundle found "
412416
+ missingFiles.size()
413-
+ " missingFiles (NOT uploaded), will try to upload "
417+
+ " missingFiles (NOT uploaded), will try to re-upload "
414418
+ (attempts - counter)
415419
+ " more times:\nmissingFiles = "
416420
+ missingFiles);
417421
}
422+
uploadFiles(project, filesToProceed, missingFiles, bundleId, progress);
423+
List<String> newMissingFiles = checkBundle(project, bundleId);
424+
missingFiles = (newMissingFiles != null) ? newMissingFiles : missingFiles;
425+
counter++;
418426
}
419427
}
420428
dcLogger.logInfo(
421429
"--- Upload Files took: " + (System.currentTimeMillis() - startTime) + " milliseconds");
430+
return missingFiles.isEmpty();
422431
}
423432

424433
private void uploadFiles(
@@ -471,14 +480,14 @@ private void uploadFiles(
471480
/**
472481
* Checks the status of a bundle: if there are still missing files after uploading
473482
*
474-
* @return list of the current missingFiles.
483+
* @return list of the current missingFiles or NULL if not succeed.
475484
*/
476-
@NotNull
485+
@Nullable
477486
private List<String> checkBundle(@NotNull Object project, @NotNull String bundleId) {
478487
CreateBundleResponse checkBundleResponse =
479488
DeepCodeRestApi.checkBundle(deepCodeParams.getSessionToken(), bundleId);
480489
if (isNotSucceed(project, checkBundleResponse, "Bad CheckBundle request: ")) {
481-
return Collections.emptyList();
490+
return null;
482491
}
483492
return checkBundleResponse.getMissingFiles();
484493
}
@@ -568,8 +577,10 @@ private GetAnalysisResponse doGetAnalysis(
568577
List<String> filesToAnalyse) {
569578
GetAnalysisResponse response;
570579
int counter = 0;
580+
int failWith404counts = 0;
571581
final long timeout = deepCodeParams.getTimeoutForGettingAnalysesMs();
572582
final long attempts = timeout / PlatformDependentUtilsBase.DEFAULT_DELAY;
583+
final long endTime = System.currentTimeMillis() + timeout;
573584
do {
574585
if (counter > 0) pdUtils.delay(PlatformDependentUtilsBase.DEFAULT_DELAY, progress);
575586
response =
@@ -583,8 +594,15 @@ private GetAnalysisResponse doGetAnalysis(
583594

584595
pdUtils.progressCheckCanceled(progress);
585596
dcLogger.logInfo(response.toString());
586-
if (isNotSucceed(project, response, "Bad GetAnalysis request: "))
587-
return new GetAnalysisResponse();
597+
if (isNotSucceed(project, response, "Bad GetAnalysis request: ")) {
598+
if (response.getStatusCode() != 404 || failWith404counts >= 5) {
599+
return new GetAnalysisResponse();
600+
} else {
601+
failWith404counts++;
602+
}
603+
} else {
604+
failWith404counts = 0;
605+
}
588606

589607
double responseProgress = response.getProgress();
590608
if (responseProgress <= 0 || responseProgress > 1) {
@@ -594,7 +612,7 @@ private GetAnalysisResponse doGetAnalysis(
594612
pdUtils.progressSetText(
595613
progress, WAITING_FOR_ANALYSIS_TEXT + (int) (responseProgress * 100) + "% done");
596614

597-
if (counter >= attempts) {
615+
if (System.currentTimeMillis() >= endTime) {
598616
dcLogger.logWarn("Timeout expire for waiting analysis results.");
599617
pdUtils.showWarn(
600618
"Can't get analysis results from the server. Timeout of "

0 commit comments

Comments
 (0)