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/10/09 15:33:54 UTC
[ignite-teamcity-bot] branch ignite-9800-2 updated: IGNITE-9800:
Build history optimized from naive to faster implementation
This is an automated email from the ASF dual-hosted git repository.
dpavlov pushed a commit to branch ignite-9800-2
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
The following commit(s) were added to refs/heads/ignite-9800-2 by this push:
new 18688d1 IGNITE-9800: Build history optimized from naive to faster implementation
18688d1 is described below
commit 18688d191153d90d504d9f9308203a196fb3a970
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Tue Oct 9 18:33:52 2018 +0300
IGNITE-9800: Build history optimized from naive to faster implementation
---
.../tcbot/visa/TcBotTriggerAndSignOffService.java | 14 ++++----
.../ignite/ci/teamcity/ignited/BuildRefDao.java | 41 +++++++++++++++++++---
.../ci/teamcity/ignited/IStringCompactor.java | 3 ++
.../ci/teamcity/ignited/IgniteStringCompactor.java | 16 +++++++++
.../ci/teamcity/ignited/TeamcityIgnitedImpl.java | 13 +------
.../ignite/ci/web/rest/visa/TcBotVisaService.java | 8 ++---
.../src/main/webapp/css/style-1.5.css | 4 +++
ignite-tc-helper-web/src/main/webapp/prs.html | 30 +++++++++++-----
8 files changed, 94 insertions(+), 35 deletions(-)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
index 70a5096..2f5745d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
@@ -205,19 +205,21 @@ public class TcBotTriggerAndSignOffService {
}).collect(Collectors.toList());
}
- public List<BuildRef> buildsForContribution(String srvId, ICredentialsProv prov,
- String suiteId, String prId) {
-
+ @Nullable public String findBranchForPr(String srvId, ICredentialsProv prov, String suiteId, String prId) {
ITeamcityIgnited srv = teamcityIgnitedProvider.server(srvId, prov);
- List<BuildRef> buildHist = srv.getBuildHistory(suiteId, branchForTcA(prId));
+ String branchName = branchForTcA(prId);
+ List<BuildRef> buildHist = srv.getBuildHistory(suiteId, branchName);
if (!buildHist.isEmpty())
- return buildHist;
+ return buildHist.get(0).branchName();
buildHist = srv.getBuildHistory(suiteId, branchForTcB(prId));
- return buildHist;
+ if (!buildHist.isEmpty())
+ return buildHist.get(0).branchName();
+
+ return null;
}
String branchForTcA(String prId) {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
index ac109e1..cfcd3bd 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
@@ -17,6 +17,7 @@
package org.apache.ignite.ci.teamcity.ignited;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -25,12 +26,14 @@ import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Provider;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.ci.db.TcHelperDb;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
+import org.jetbrains.annotations.NotNull;
public class BuildRefDao {
/** Cache name*/
@@ -42,18 +45,18 @@ public class BuildRefDao {
/** Builds cache. */
private IgniteCache<Long, BuildRefCompacted> buildsCache;
- @Inject private IStringCompactor compacter;
+ /** Compactor. */
+ @Inject private IStringCompactor compactor;
public void init () {
Ignite ignite = igniteProvider.get();
buildsCache = ignite.getOrCreateCache(TcHelperDb.getCacheV2Config(TEAMCITY_BUILD_CACHE_NAME));
}
- public Stream<BuildRef> getAllBuilds(long srvIdMaskHigh) {
+ @NotNull protected Stream<BuildRefCompacted> compactedBuildsForServer(long srvIdMaskHigh) {
return StreamSupport.stream(buildsCache.spliterator(), false)
.filter(entry -> entry.getKey() >> 32 == srvIdMaskHigh)
- .map(javax.cache.Cache.Entry::getValue)
- .map(compacted -> compacted.toBuildRef(compacter));
+ .map(javax.cache.Cache.Entry::getValue);
}
public int saveChunk(long srvIdMaskHigh, List<BuildRef> ghData) {
@@ -66,7 +69,7 @@ public class BuildRefDao {
Map<Long, BuildRefCompacted> entriesToPut = new TreeMap<>();
List<BuildRefCompacted> collect = ghData.stream()
- .map(ref -> new BuildRefCompacted(compacter, ref))
+ .map(ref -> new BuildRefCompacted(compactor, ref))
.collect(Collectors.toList());
for (BuildRefCompacted next : collect) {
@@ -83,7 +86,35 @@ public class BuildRefDao {
return size;
}
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildId Build id.
+ */
private long buildIdToCacheKey(long srvIdMaskHigh, int buildId) {
return (long)buildId | srvIdMaskHigh << 32;
}
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeId Build type id.
+ * @param bracnhNameQry Bracnh name query.
+ */
+ @NotNull public List<BuildRef> findBuildsInHistory(long srvIdMaskHigh,
+ @Nullable String buildTypeId,
+ String bracnhNameQry) {
+
+ Integer buildTypeIdId = compactor.getStringIdIfPresent(buildTypeId);
+ if (buildTypeIdId == null)
+ return Collections.emptyList();
+
+ Integer bracnhNameQryId = compactor.getStringIdIfPresent(bracnhNameQry);
+ if (bracnhNameQryId == null)
+ return Collections.emptyList();
+
+ return compactedBuildsForServer(srvIdMaskHigh)
+ .filter(e -> e.buildTypeId == (int)buildTypeIdId)
+ .filter(e -> e.branchName == (int)bracnhNameQryId)
+ .map(compacted -> compacted.toBuildRef(compactor))
+ .collect(Collectors.toList());
+ }
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IStringCompactor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IStringCompactor.java
index bd6f8cf..59c2986 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IStringCompactor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IStringCompactor.java
@@ -21,8 +21,11 @@ public interface IStringCompactor {
* @param val Value.
*/
public int getStringId(String val);
+
/**
* @param id Id.
*/
public String getStringFromId(int id);
+
+ public Integer getStringIdIfPresent(String id);
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IgniteStringCompactor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IgniteStringCompactor.java
index f623cc0..5cd2a0b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IgniteStringCompactor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IgniteStringCompactor.java
@@ -150,6 +150,22 @@ public class IgniteStringCompactor implements IStringCompactor {
return next.getValue().val;
}
+ /** {@inheritDoc} */
+ @Override public Integer getStringIdIfPresent(String val) {
+ if (val == null)
+ return -1;
+
+ initIfNeeded();
+
+ CompactorEntity entity = stringsCache.get(val);
+
+ if (entity != null)
+ return entity.id;
+
+ return null;
+
+ }
+
@NotNull
public static <K, V> CacheConfiguration<K, V> getCache8PartsConfig(String name) {
CacheConfiguration<K, V> ccfg = new CacheConfiguration<>(name);
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 ff76a35..998cc34 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
@@ -17,11 +17,8 @@
package org.apache.ignite.ci.teamcity.ignited;
import java.util.List;
-import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
import javax.annotation.Nullable;
import javax.inject.Inject;
import org.apache.ignite.ci.ITeamcity;
@@ -29,7 +26,6 @@ import org.apache.ignite.ci.di.AutoProfiling;
import org.apache.ignite.ci.di.MonitoredTask;
import org.apache.ignite.ci.di.scheduler.IScheduler;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
-import org.jetbrains.annotations.NotNull;
public class TeamcityIgnitedImpl implements ITeamcityIgnited {
/** Server id. */
@@ -71,14 +67,7 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
else
bracnhNameQry = branchName;
- return allBuildsEver()
- .filter(e -> Objects.equals(e.buildTypeId, buildTypeId))
- .filter(e -> Objects.equals(e.branchName, bracnhNameQry))
- .collect(Collectors.toList());
- }
-
- @NotNull private Stream<BuildRef> allBuildsEver() {
- return buildRefDao.getAllBuilds(srvIdMaskHigh);
+ return buildRefDao.findBuildsInHistory(srvIdMaskHigh, buildTypeId, bracnhNameQry);
}
private void actualizeRecentBuilds() {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
index fa57009..bb2c71f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
@@ -26,11 +26,11 @@ import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
-import org.apache.ignite.ci.tcmodel.hist.BuildRef;
import org.apache.ignite.ci.user.ICredentialsProv;
import org.apache.ignite.ci.tcbot.visa.ContributionToCheck;
import org.apache.ignite.ci.tcbot.visa.TcBotTriggerAndSignOffService;
import org.apache.ignite.ci.web.CtxListener;
+import org.apache.ignite.ci.web.model.SimpleResult;
import org.apache.ignite.ci.web.rest.exception.ServiceUnauthorizedException;
import org.jetbrains.annotations.Nullable;
@@ -59,8 +59,8 @@ public class TcBotVisaService {
}
@GET
- @Path("buildsForContribution")
- public List<BuildRef> buildsForContribution(@Nullable @QueryParam("serverId") String srvId,
+ @Path("findBranchForPr")
+ public SimpleResult findBranchForPr(@Nullable @QueryParam("serverId") String srvId,
@Nonnull @QueryParam("suiteId") String suiteId,
@QueryParam("prId") String prId) {
ICredentialsProv prov = ICredentialsProv.get(req);
@@ -71,6 +71,6 @@ public class TcBotVisaService {
TcBotTriggerAndSignOffService instance = CtxListener.getInjector(ctx)
.getInstance(TcBotTriggerAndSignOffService.class);
- return instance.buildsForContribution(srvId, prov, suiteId, prId);
+ return new SimpleResult(instance.findBranchForPr(srvId, prov, suiteId, prId));
}
}
diff --git a/ignite-tc-helper-web/src/main/webapp/css/style-1.5.css b/ignite-tc-helper-web/src/main/webapp/css/style-1.5.css
index d670800..ffc2770 100644
--- a/ignite-tc-helper-web/src/main/webapp/css/style-1.5.css
+++ b/ignite-tc-helper-web/src/main/webapp/css/style-1.5.css
@@ -127,6 +127,10 @@ form, .formgroup {
box-shadow: 3px 2px 6px -2px rgba(0,0,0,0.64);
}
+.disabledbtn {
+ background: #b4b4b4;
+}
+
.idxpgbutton {
width: 100px;
min-height: 100px;
diff --git a/ignite-tc-helper-web/src/main/webapp/prs.html b/ignite-tc-helper-web/src/main/webapp/prs.html
index 2c330ef..8503675 100644
--- a/ignite-tc-helper-web/src/main/webapp/prs.html
+++ b/ignite-tc-helper-web/src/main/webapp/prs.html
@@ -95,6 +95,15 @@
});
}
+ function prShowHref(srvId, suiteId, branchName) {
+ return "/pr.html?serverId=" + srvId + "&" +
+ "suiteId=" + suiteId +
+ //"&baseBranchForTc=" +
+ "&branchForTc=" +
+ branchName +
+ "&action=Latest";
+ }
+
function showTable(result, srvId, suiteId) {
let tableForSrv = $('#serverContributions-' + srvId);
@@ -139,20 +148,25 @@
title: "Existing RunAll",
"render": function(data, type, row, meta){
let prId = data;
- if(type === 'display'){
- data = "<a href='/pr.html?serverId="+srvId+"&" +
-
- "suiteId=" + suiteId +
- //"&baseBranchForTc=" +
- "&branchForTc=pull%2F" + prId+ "%2Fhead&action=Latest'><button>Open /" + data + "/head</button></a>";
+ if(type === 'display') {
+ data = "<a id='link_" + prId + "' href='" +
+ prShowHref(srvId, suiteId, "pull%2F" + prId + "%2Fhead") +
+ "'>" +
+ "<button id='show_" + prId + "'>Open /" + data + "/head</button></a>";
$.ajax({
- url: "rest/visa/buildsForContribution?serverId=" + srvId +
+ url: "rest/visa/findBranchForPr?serverId=" + srvId +
"&suiteId=" + suiteId +
"&prId=" + prId,
success:
function (result) {
- console.log("Contribution "+prId + "branshes: " + result + " ")
+ console.log("Contribution " + prId + " bransh: " + result + " ");
+ if(isDefinedAndFilled(result.result)) {
+ $('#link_' + prId).attr('href', prShowHref(srvId, suiteId, result.result));
+
+ } else {
+ $('#show_' + prId).attr('class', 'disabledbtn');
+ }
}
});