diff --git a/common/src/main/java/com/box/l10n/mojito/utils/OptionsParser.java b/common/src/main/java/com/box/l10n/mojito/utils/OptionsParser.java index 9a9ea3f8d..6a7ba7f34 100644 --- a/common/src/main/java/com/box/l10n/mojito/utils/OptionsParser.java +++ b/common/src/main/java/com/box/l10n/mojito/utils/OptionsParser.java @@ -34,6 +34,16 @@ public void getBoolean(String key, Consumer consumer) { } } + public Boolean getBoolean(String key) { + Boolean value = null; + + if (this.options.containsKey(key)) { + value = Boolean.valueOf(this.options.get(key)); + } + + return value; + } + public void getInteger(String key, Consumer consumer) { if (this.options.containsKey(key)) { consumer.accept(Integer.valueOf(this.options.get(key))); diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSPhrase.java b/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSPhrase.java index 7fbbbbb63..22619d69a 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSPhrase.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSPhrase.java @@ -19,6 +19,7 @@ import com.box.l10n.mojito.service.tm.search.TextUnitSearcher; import com.box.l10n.mojito.service.tm.search.TextUnitSearcherParameters; import com.box.l10n.mojito.service.tm.search.UsedFilter; +import com.box.l10n.mojito.utils.OptionsParser; import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableList; import com.phrase.client.model.Tag; @@ -292,36 +293,39 @@ public PollableFuture pull( String currentTags = getCurrentTagsForRepository(repository, projectId); + OptionsParser optionsParser = new OptionsParser(optionList); + Boolean integrityCheckKeepStatusIfFailedAndSameTarget = optionsParser.getBoolean("integrityCheckKeepStatusIfFailedAndSameTarget"); + // may already hit rate limit, according it is 4 qps ... there is a retry in the locale client // though. // but 4 qps is very low to download 64 locales. repositoryLocalesWithoutRootLocale.parallelStream() .forEach( - locale -> pullLocaleTimed(repository, projectId, locale, pluralSeparator, currentTags)); + locale -> pullLocaleTimed(repository, projectId, locale, pluralSeparator, currentTags, integrityCheckKeepStatusIfFailedAndSameTarget)); return null; } private void pullLocaleTimed( - Repository repository, - String projectId, - RepositoryLocale repositoryLocale, - String pluralSeparator, - String currentTags) { + Repository repository, + String projectId, + RepositoryLocale repositoryLocale, + String pluralSeparator, + String currentTags, boolean integrityCheckKeepStatusIfFailedAndSameTarget) { try (var timer = Timer.resource(meterRegistry, "ThirdPartyTMSPhrase.pullLocale") .tag("repository", repository.getName())) { - pullLocale(repository, projectId, repositoryLocale, pluralSeparator, currentTags); + pullLocale(repository, projectId, repositoryLocale, pluralSeparator, currentTags, integrityCheckKeepStatusIfFailedAndSameTarget); } } private void pullLocale( - Repository repository, - String projectId, - RepositoryLocale repositoryLocale, - String pluralSeparator, - String currentTags) { + Repository repository, + String projectId, + RepositoryLocale repositoryLocale, + String pluralSeparator, + String currentTags, boolean integrityCheckKeepStatusIfFailedAndSameTarget) { String localeTag = repositoryLocale.getLocale().getBcp47Tag(); logger.info("Downloading locale: {} from Phrase with tags: {}", localeTag, currentTags); @@ -352,7 +356,7 @@ private void pullLocale( textUnitDTOS.forEach(t -> t.setComment(null)); Stopwatch importStopWatch = Stopwatch.createStarted(); - textUnitBatchImporterService.importTextUnits(textUnitDTOS, false, true); + textUnitBatchImporterService.importTextUnits(textUnitDTOS, false, integrityCheckKeepStatusIfFailedAndSameTarget); // TODO(ja) can this be made an option? logger.info("Time importing text units: {}", importStopWatch.elapsed()); }