You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2018/11/25 22:08:56 UTC

[ignite-teamcity-bot] branch ignite-9542-new-run-stripe updated: IGNITE-9542: Persisting test runs implementation using entry processors

This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch ignite-9542-new-run-stripe
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git


The following commit(s) were added to refs/heads/ignite-9542-new-run-stripe by this push:
     new ee9554a  IGNITE-9542: Persisting test runs implementation using entry processors
ee9554a is described below

commit ee9554a67310d2070856e9ef8454466d18f908b7
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Mon Nov 26 01:08:53 2018 +0300

    IGNITE-9542: Persisting test runs implementation using entry processors
---
 .../ci/teamcity/ignited/TeamcityIgnitedImpl.java   |  8 ++++-
 .../ignited/fatbuild/ProactiveFatBuildSync.java    | 10 +++---
 .../teamcity/ignited/runhist/InvocationData.java   |  4 +--
 .../teamcity/ignited/runhist/RunHistCompacted.java |  9 ++----
 .../ignited/runhist/RunHistCompactedDao.java       | 36 +++++++++++++++++++++-
 .../ci/teamcity/ignited/runhist/RunHistSync.java   | 22 +++++++++++--
 .../ignited/IgnitedTcInMemoryIntegrationTest.java  |  8 ++++-
 .../ci/teamcity/ignited/TeamcityIgnitedMock.java   |  4 ++-
 8 files changed, 83 insertions(+), 18 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
index d129f60..e29975d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
@@ -38,6 +38,7 @@ import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildDao;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.ProactiveFatBuildSync;
 import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistCompactedDao;
+import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistSync;
 import org.apache.ignite.ci.teamcity.pure.ITeamcityConn;
 import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
@@ -94,6 +95,8 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
     /** Run history DAO. */
     @Inject private RunHistCompactedDao runHistCompactedDao;
 
+    @Inject private RunHistSync runHistSync;
+
     /** Strings compactor. */
     @Inject private IStringCompactor compactor;
 
@@ -393,10 +396,13 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
 
         FatBuildCompacted savedVer = buildSync.loadBuild(conn, buildId, existingBuild, mode);
 
-        //build was modified, probably we need also to update reference accordindly
+        //build was modified, probably we need also to update reference accordingly
         if (savedVer != null)
             buildRefDao.save(srvIdMaskHigh, new BuildRefCompacted(savedVer));
 
+        if (savedVer != null)
+            runHistSync.syncLater(srvIdMaskHigh, buildId, savedVer);
+
         return savedVer == null ? existingBuild : savedVer;
     }
 
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
index dc00780..0ddbdcf 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
@@ -231,10 +231,11 @@ public class ProactiveFatBuildSync {
 
     /**
      *
-     * @param conn
-     * @param buildId
-     * @param existingBuild
-     * @return null if nothing was saved, use existing build
+     * @param conn TC connection to load data
+     * @param buildId build ID (TC identification).
+     * @param existingBuild build from DB.
+     * @return null if nothing was saved, use existing build. Non null value indicates that
+     * new build if it was updated.
      */
     @Nullable
     public FatBuildCompacted loadBuild(ITeamcityConn conn, int buildId,
@@ -317,6 +318,7 @@ public class ProactiveFatBuildSync {
                 }
                 else
                     build = Build.createFakeStub();
+                //todo here can be situation we have build ref, but don't have a build
             } else {
                 logger.error("Loading build [" + buildId + "] for server [" + srvNme + "] failed:" + e.getMessage(), e);
 
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
index b5f1b1a..7e582a3 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
@@ -56,8 +56,8 @@ public class InvocationData {
         return allHistRuns;
     }
 
-    public void add(IStringCompactor c, TestCompacted testCompacted, int build, long startDate) {
-        final boolean failedTest = testCompacted.isFailedTest(c);
+    public void add(int testSuccess, TestCompacted testCompacted, int build, long startDate) {
+        final boolean failedTest = testCompacted.status()==testSuccess;
 
         if (invocationMap.containsKey(build))
             return;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
index 795e00b..497534e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
@@ -18,15 +18,12 @@
 package org.apache.ignite.ci.teamcity.ignited.runhist;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.collect.Lists;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.ci.analysis.IVersionedEntity;
 import org.apache.ignite.ci.teamcity.ignited.IRunHistory;
-import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.TestCompacted;
 
 import javax.annotation.Nullable;
-import java.util.Date;
 import java.util.List;
 
 public class RunHistCompacted implements IVersionedEntity, IRunHistory {
@@ -93,13 +90,13 @@ public class RunHistCompacted implements IVersionedEntity, IRunHistory {
     }
 
     /**
-     * @param c Compactor.
+     * @param testSuccess Test success reference string code.
      * @param testCompacted Test compacted.
      * @param build Build.
      * @param startDate Start date.
      */
-    public void addTestRun(IStringCompactor c, TestCompacted testCompacted, int build, long startDate) {
-        data.add(c, testCompacted, build, startDate);
+    public void addTestRun(int testSuccess, TestCompacted testCompacted, int build, long startDate) {
+        data.add(testSuccess, testCompacted, build, startDate);
     }
 
     /** {@inheritDoc} */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompactedDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompactedDao.java
index 8df708f..3f25a1d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompactedDao.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompactedDao.java
@@ -19,19 +19,24 @@ package org.apache.ignite.ci.teamcity.ignited.runhist;
 
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cache.CacheEntryProcessor;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.ci.db.TcHelperDb;
+import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrence;
 import org.apache.ignite.ci.teamcity.ignited.IRunHistory;
 import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.apache.ignite.ci.teamcity.ignited.fatbuild.TestCompacted;
 import org.apache.ignite.configuration.CacheConfiguration;
 
+import javax.cache.processor.EntryProcessorException;
+import javax.cache.processor.MutableEntry;
 import javax.inject.Inject;
 import javax.inject.Provider;
 import java.util.Collections;
 
 public class RunHistCompactedDao {
     /** Cache name*/
-    public static final String TEST_HIST_CACHE_NAME = "testRunHist";
+    public static final String TEST_HIST_CACHE_NAME = "testRunHistV0";
 
     /** Ignite provider. */
     @Inject
@@ -74,4 +79,33 @@ public class RunHistCompactedDao {
 
         return testHistCache.get(new RunHistKey(srvIdMaskHigh, testName, branchId));
     }
+
+    public void addInvocation(final int srvId,
+                              final TestCompacted t,
+                              final int buildId,
+                              final long buildStartDateTs,
+                              final int branchName) {
+        RunHistKey histKey = new RunHistKey(srvId, t.testName(), branchName);
+
+        final int testSuccessCode = compactor.getStringId(TestOccurrence.STATUS_SUCCESS);
+
+        testHistCache.invoke(histKey,
+                new CacheEntryProcessor<RunHistKey, RunHistCompacted, Object>() {
+                    @Override
+                    public Object process(MutableEntry<RunHistKey, RunHistCompacted> entry, Object... parms) throws EntryProcessorException {
+                        RunHistCompacted hist = entry.getValue();
+
+                        if (hist == null)
+                            hist = new RunHistCompacted(entry.getKey());
+
+                        hist.addTestRun(testSuccessCode, t, buildId, buildStartDateTs);
+
+                        entry.setValue(hist);
+
+                        return null;
+                    }
+                }
+        );
+
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
index 5b332fc..97d0a94 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
@@ -17,10 +17,14 @@
 
 package org.apache.ignite.ci.teamcity.ignited.runhist;
 
+import org.apache.ignite.ci.di.scheduler.IScheduler;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
 import org.apache.ignite.ci.teamcity.pure.ITeamcityConn;
 import org.apache.ignite.internal.util.GridConcurrentHashSet;
 
 import javax.annotation.concurrent.GuardedBy;
+import javax.inject.Inject;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -30,6 +34,22 @@ import java.util.Set;
  *
  */
 public class RunHistSync {
+    @Inject
+    IStringCompactor compactor;
+
+    @Inject IScheduler scheduler;
+
+    @Inject RunHistCompactedDao dao;
+
+    public void syncLater(int srvId, int buildId, FatBuildCompacted build) {
+        if(!build.isFinished(compactor))
+            return;
+
+        build.getAllTests().forEach(t -> {
+            dao.addInvocation(srvId, t, build.id(), build.getStartDateTs(), build.branchName());
+        });
+    }
+
     /**
      * Scope of work: builds to be loaded from a connection.
      */
@@ -42,6 +62,4 @@ public class RunHistSync {
 
     @GuardedBy("this")
     private Map<String, SyncTask> buildToLoad = new HashMap<>();
-
-
 }
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
index f83a8e3..35b53ea 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
@@ -53,6 +53,7 @@ import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildDao;
 import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistCompacted;
 import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistCompactedDao;
 import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistKey;
+import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistSync;
 import org.apache.ignite.ci.teamcity.pure.BuildHistoryEmulator;
 import org.apache.ignite.ci.teamcity.pure.ITeamcityHttpConnection;
 import org.apache.ignite.ci.user.ICredentialsProv;
@@ -379,7 +380,12 @@ public class IgnitedTcInMemoryIntegrationTest {
 
         System.out.println(resMap);
 
-        resMap.forEach(dao::save);
+       // resMap.forEach(dao::save);
+
+        final RunHistSync histSync = injector.getInstance(RunHistSync.class);
+        buildsMap.forEach((id, build) -> {
+            histSync.syncLater(U.safeAbs(srvId.hashCode()), id, build);
+        });
 
         final ITeamcityIgnitedProvider inst = injector.getInstance(ITeamcityIgnitedProvider.class);
         final ITeamcityIgnited server = inst.server(srvId, Mockito.mock(ICredentialsProv.class));
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
index eaafd3e..2ae303d 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
@@ -19,6 +19,7 @@ package org.apache.ignite.ci.teamcity.ignited;
 
 import com.google.common.base.Preconditions;
 import org.apache.ignite.ci.analysis.TestInBranch;
+import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrence;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
 import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistCompacted;
 import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistKey;
@@ -130,7 +131,8 @@ public class TeamcityIgnitedMock {
 
                 final RunHistCompacted hist = histCache.computeIfAbsent(histKey, RunHistCompacted::new);
 
-                hist.addTestRun(c, t, build.id(), build.getStartDateTs());
+                final int successCode = c.getStringId(TestOccurrence.STATUS_SUCCESS);
+                hist.addTestRun(successCode, t, build.id(), build.getStartDateTs());
             });
         }