This is an automated email from the ASF dual-hosted git repository. dpavlov pushed a commit to branch ignite-10243 in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
The following commit(s) were added to refs/heads/ignite-10243 by this push: new 975a51a IGNITE-10243 Notify JIRA migrated to new cache 975a51a is described below commit 975a51a37b4a8236ece932d2d8e24e396d5cac94 Author: Dmitriy Pavlov <dpav...@apache.org> AuthorDate: Thu Nov 15 18:17:59 2018 +0300 IGNITE-10243 Notify JIRA migrated to new cache --- .../main/java/org/apache/ignite/ci/ITeamcity.java | 24 ------ .../apache/ignite/ci/IgnitePersistentTeamcity.java | 89 ++-------------------- .../apache/ignite/ci/IgniteTeamcityConnection.java | 12 --- .../main/java/org/apache/ignite/ci/TcHelper.java | 41 +++++++--- .../java/org/apache/ignite/ci/db/DbMigrations.java | 12 +-- 5 files changed, 43 insertions(+), 135 deletions(-) diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java index f6e8949..f22a6bf 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java @@ -59,30 +59,6 @@ public interface ITeamcity extends ITeamcityConn { CompletableFuture<List<BuildType>> getProjectSuites(String projectId); - /** - * Includes snapshot dependencies failed builds into list. - * - * @param projectId suite ID (string without spaces). - * @param branch branch in TC identification. - * @return list of builds in historical order, recent builds coming last. - */ - @Deprecated - default List<BuildRef> getFinishedBuildsIncludeSnDepFailed(String projectId, String branch){ - return getFinishedBuildsIncludeSnDepFailed(projectId, branch, null); - }; - - /** - * Includes 'snapshot dependencies failed' builds into list. - * loads build history with following parameter: defaultFilter:false,state:finished - * - * @param projectId suite ID (string without spaces). - * @param branch branch in TC identification. - * @param sinceBuildId limit builds export with some build number, not operational for Persistent connection. - * @return list of builds in historical order, recent builds coming last. - */ - @Deprecated - List<BuildRef> getFinishedBuildsIncludeSnDepFailed(String projectId, String branch, Integer sinceBuildId); - /** */ @Deprecated CompletableFuture<List<BuildRef>> getQueuedBuilds(@Nullable String branch); diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgnitePersistentTeamcity.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgnitePersistentTeamcity.java index 0222d95..2229694 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgnitePersistentTeamcity.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgnitePersistentTeamcity.java @@ -103,7 +103,6 @@ public class IgnitePersistentTeamcity implements IAnalyticsEnabledTeamcity, ITea private static final String TEST_FULL = "testFull"; private static final String BUILD_PROBLEMS = "buildProblems"; - private static final String BUILD_HIST_FINISHED_OR_FAILED = "buildHistFinishedOrFailed"; public static final String BOT_DETECTED_ISSUES = "botDetectedIssues"; public static final String TEST_REFS = "testRefs"; public static final String CONFIGURATIONS = "configurations"; @@ -159,8 +158,7 @@ public class IgnitePersistentTeamcity implements IAnalyticsEnabledTeamcity, ITea buildsCache(), this::addBuildOccurrenceToFailuresStat, buildsFailureRunStatCache(), testRunStatCache(), testFullCache(), - buildProblemsCache(), - buildHistIncFailedCache()); + buildProblemsCache()); } @Override @@ -241,13 +239,6 @@ public class IgnitePersistentTeamcity implements IAnalyticsEnabledTeamcity, ITea return getOrCreateCacheV2(ignCacheNme(BUILD_PROBLEMS)); } - /** - * @return Build history: {@link BuildRef} lists cache, 32 parts, transactional. - */ - private IgniteCache<SuiteInBranch, Expirable<List<BuildRef>>> buildHistIncFailedCache() { - return getOrCreateCacheV2Tx(ignCacheNme(BUILD_HIST_FINISHED_OR_FAILED)); - } - /** {@inheritDoc} */ @AutoProfiling @Override public CompletableFuture<List<BuildType>> getProjectSuites(String projectId) { @@ -398,62 +389,6 @@ public class IgnitePersistentTeamcity implements IAnalyticsEnabledTeamcity, ITea return lock; } - /** - * @param buildRefs Build refs list. - * @param fromIdx From index. - * @param toIdx To index. - * @param key Key. - * @param since {@code true} If key is sinceDate, {@code false} is untilDate. - * - * @return {@value >= 0} Build id from list with min interval between key. If since {@code true}, min interval - * between key and same day or later. If since {@code false}, min interval between key and same day or earlier; - * {@value -1} If sinceDate after last list element date or untilDate before first list element; - * {@value -2} If sinceDate before first list element or untilDate after last list element; - * {@value -3} If method get null or fake stub build. - */ - private int binarySearchDate(List<BuildRef> buildRefs, int fromIdx, int toIdx, Date key, boolean since){ - int low = fromIdx; - int high = toIdx - 1; - long minDiff = key.getTime(); - int minDiffId = since ? low : high; - long temp; - Build highBuild = getBuild(buildRefs.get(high).href); - Build lowBuild = getBuild(buildRefs.get(low).href); - - if (highBuild != null && !highBuild.isFakeStub()){ - if (highBuild.getStartDate().before(key)) - return since ? -1 : -2; - } - - if (lowBuild != null && !lowBuild.isFakeStub()){ - if (lowBuild.getStartDate().after(key)) - return since ? -2 : -1; - } - - while (low <= high) { - int mid = (low + high) >>> 1; - Build midVal = getBuild(buildRefs.get(mid).href); - - if (midVal != null && !midVal.isFakeStub()) { - if (midVal.getStartDate().after(key)) - high = mid - 1; - else if (midVal.getStartDate().before(key)) - low = mid + 1; - else - return mid; - - temp = midVal.getStartDate().getTime() - key.getTime(); - - if ((temp > 0 == since) && (Math.abs(temp) < minDiff)) { - minDiff = Math.abs(temp); - minDiffId = mid; - } - } else - return -3; - } - return minDiffId; - } - @NotNull @AutoProfiling @SuppressWarnings("WeakerAccess") @@ -468,28 +403,16 @@ public class IgnitePersistentTeamcity implements IAnalyticsEnabledTeamcity, ITea return new ArrayList<>(merge.values()); } - /** {@inheritDoc} */ - @AutoProfiling - @Override public List<BuildRef> getFinishedBuildsIncludeSnDepFailed(String projectId, - String branch, - Integer ignored) { - final SuiteInBranch suiteInBranch = new SuiteInBranch(projectId, branch); - - return loadBuildHistory(buildHistIncFailedCache(), 91, suiteInBranch, - (key, sinceBuildId) -> teamcity.getFinishedBuildsIncludeSnDepFailed(projectId, branch, sinceBuildId)); - } - - private <K, V> CompletableFuture<V> loadAsyncIfAbsentOrExpired(ConcurrentMap<K, Expirable<V>> cache, K key, ConcurrentMap<K, CompletableFuture<V>> cachedComputations, Function<K, CompletableFuture<V>> realLoadFunction, int maxAgeSecs, boolean alwaysProvidePersisted) { - @Nullable final Expirable<V> persistedValue = cache.get(key); + @Nullable final Expirable<V> persistedVal = cache.get(key); - if (persistedValue != null && persistedValue.isAgeLessThanSecs(maxAgeSecs)) - return CompletableFuture.completedFuture(persistedValue.getData()); + if (persistedVal != null && persistedVal.isAgeLessThanSecs(maxAgeSecs)) + return CompletableFuture.completedFuture(persistedVal.getData()); AtomicReference<CompletableFuture<V>> submitRef = new AtomicReference<>(); @@ -519,8 +442,8 @@ public class IgnitePersistentTeamcity implements IAnalyticsEnabledTeamcity, ITea return res; }); - if (alwaysProvidePersisted && persistedValue != null) - return CompletableFuture.completedFuture(persistedValue.getData()); + if (alwaysProvidePersisted && persistedVal != null) + return CompletableFuture.completedFuture(persistedVal.getData()); return loadFut; } diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java index 4f93e28..18b2b3d 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java @@ -521,18 +521,6 @@ public class IgniteTeamcityConnection implements ITeamcity { } /** {@inheritDoc} */ - @AutoProfiling - @Override public List<BuildRef> getFinishedBuildsIncludeSnDepFailed(String projectId, String branch) { - return getBuildsInState(projectId, branch, BuildRef.STATE_FINISHED, null); - } - - /** {@inheritDoc} */ - @AutoProfiling - @Override public List<BuildRef> getFinishedBuildsIncludeSnDepFailed(String projectId, String branch, Integer sinceBuildId) { - return getBuildsInState(projectId, branch, BuildRef.STATE_FINISHED, sinceBuildId); - } - - /** {@inheritDoc} */ @Override @AutoProfiling public CompletableFuture<List<BuildRef>> getQueuedBuilds(@Nullable String branch) { return supplyAsync(() -> getBuildsInState(null, branch, BuildRef.STATE_QUEUED), executor); diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java index 12a4f03..41da43f 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java @@ -18,18 +18,30 @@ package org.apache.ignite.ci; import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.ignite.ci.tcbot.chain.PrChainsProcessor; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; +import javax.inject.Inject; import org.apache.ignite.ci.conf.BranchesTracked; import org.apache.ignite.ci.issue.IssueDetector; import org.apache.ignite.ci.issue.IssuesStorage; import org.apache.ignite.ci.jira.IJiraIntegration; -import org.apache.ignite.ci.tcmodel.hist.BuildRef; -import org.apache.ignite.ci.web.model.JiraCommentResponse; -import org.apache.ignite.ci.web.model.Visa; +import org.apache.ignite.ci.tcbot.chain.PrChainsProcessor; +import org.apache.ignite.ci.tcmodel.result.Build; import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence; +import org.apache.ignite.ci.teamcity.ignited.IStringCompactor; +import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited; +import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider; +import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted; import org.apache.ignite.ci.teamcity.restcached.ITcServerProvider; import org.apache.ignite.ci.user.ICredentialsProv; import org.apache.ignite.ci.user.UserAndSessionsStorage; +import org.apache.ignite.ci.web.model.JiraCommentResponse; +import org.apache.ignite.ci.web.model.Visa; import org.apache.ignite.ci.web.model.current.ChainAtServerCurrentStatus; import org.apache.ignite.ci.web.model.current.SuiteCurrentStatus; import org.apache.ignite.ci.web.model.current.TestFailure; @@ -40,10 +52,6 @@ import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; -import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; - import static org.apache.ignite.ci.analysis.RunStat.MAX_LATEST_RUNS; import static org.apache.ignite.ci.util.XmlUtil.xmlEscapeText; @@ -71,6 +79,10 @@ public class TcHelper implements ITcHelper, IJiraIntegration { @Inject private PrChainsProcessor prChainsProcessor; + @Inject private ITeamcityIgnitedProvider tcProv; + + @Inject private IStringCompactor compactor; + /** */ private final ObjectMapper objectMapper; @@ -148,19 +160,26 @@ public class TcHelper implements ITcHelper, IJiraIntegration { ) { IAnalyticsEnabledTeamcity teamcity = server(srvId, prov); - List<BuildRef> builds = teamcity.getFinishedBuildsIncludeSnDepFailed(buildTypeId, branchForTc); + ITeamcityIgnited tcIgnited = tcProv.server(srvId, prov); + + List<Integer> builds = tcIgnited.getLastNBuildsFromHistory(buildTypeId, branchForTc, 1); if (builds.isEmpty()) return new Visa("JIRA wasn't commented - no finished builds to analyze."); - BuildRef build = builds.get(builds.size() - 1); + Integer buildId = builds.get(0); + + FatBuildCompacted fatBuild = tcIgnited.getFatBuild(buildId); + Build build = fatBuild.toBuild(compactor); + + build.webUrl = tcIgnited.host() + "viewLog.html?buildId=" + build.getId() + "&buildTypeId=" + build.buildTypeId; int blockers; JiraCommentResponse res; try { - List<SuiteCurrentStatus> suitesStatuses = getSuitesStatuses(buildTypeId, build.branchName, srvId, prov); + List<SuiteCurrentStatus> suitesStatuses = getSuitesStatuses(buildTypeId, build.branchName, srvId, prov); String comment = generateJiraComment(suitesStatuses, build.webUrl); diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/db/DbMigrations.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/db/DbMigrations.java index f86a8eb..f0cc7eb 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/db/DbMigrations.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/db/DbMigrations.java @@ -95,7 +95,10 @@ public class DbMigrations { @Deprecated private static final String BUILD_HIST_FINISHED = "buildHistFinished"; - /** Cache name */ + @Deprecated + private static final String BUILD_HIST_FINISHED_OR_FAILED = "buildHistFinishedOrFailed"; + + @Deprecated public static final String TEAMCITY_BUILD_CACHE_NAME_OLD = "teamcityBuild"; @@ -125,8 +128,7 @@ public class DbMigrations { IgniteCache<SuiteInBranch, RunStat> suiteHistCache, IgniteCache<TestInBranch, RunStat> testHistCache, Cache<String, TestOccurrenceFull> testFullCache, - Cache<String, ProblemOccurrences> problemsCache, - Cache<SuiteInBranch, Expirable<List<BuildRef>>> buildHistInFailedCache) { + Cache<String, ProblemOccurrences> problemsCache) { doneMigrations = doneMigrationsCache(); @@ -355,8 +357,7 @@ public class DbMigrations { }); applyV1toV2Migration(PROBLEMS, problemsCache); - - applyV1toV2Migration(FINISHED_BUILDS_INCLUDE_FAILED, buildHistInFailedCache); + applyDestroyIgnCacheMigration(FINISHED_BUILDS_INCLUDE_FAILED); Cache<IssueKey, Issue> issuesCache = IssuesStorage.botDetectedIssuesCache(ignite); applyMigration(ISSUES + "-to-" + issuesCache.getName() + "V2", () -> { @@ -424,6 +425,7 @@ public class DbMigrations { applyDestroyIgnCacheMigration(FINISHED_BUILDS); applyDestroyIgnCacheMigration(BUILD_HIST_FINISHED); + applyDestroyIgnCacheMigration(BUILD_HIST_FINISHED_OR_FAILED); } private void applyDestroyIgnCacheMigration(String cacheName) {