From 2dcf01237ef801741888b06987a28711ff026e5b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Mon, 16 Feb 2015 17:32:28 +0100 Subject: [PATCH] SONAR-6023 Use summarized version for ES bulk request profiling --- .../es/request/ProxyBulkRequestBuilder.java | 62 +++++++++++++++++-- .../request/ProxyBulkRequestBuilderTest.java | 3 + 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/es/request/ProxyBulkRequestBuilder.java b/server/sonar-server/src/main/java/org/sonar/server/es/request/ProxyBulkRequestBuilder.java index 480e2b74915..66aee7b890e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/es/request/ProxyBulkRequestBuilder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/es/request/ProxyBulkRequestBuilder.java @@ -20,6 +20,10 @@ package org.sonar.server.es.request; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Multiset.Entry; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; import org.elasticsearch.action.ActionRequest; import org.elasticsearch.action.ListenableActionFuture; import org.elasticsearch.action.bulk.BulkRequestBuilder; @@ -32,6 +36,8 @@ import org.elasticsearch.common.unit.TimeValue; import org.sonar.core.profiling.Profiling; import org.sonar.core.profiling.StopWatch; +import java.util.Set; + public class ProxyBulkRequestBuilder extends BulkRequestBuilder { private final Profiling profiling; @@ -79,23 +85,71 @@ public class ProxyBulkRequestBuilder extends BulkRequestBuilder { public String toString() { StringBuilder message = new StringBuilder(); message.append("Bulk["); + HashMultiset groupedRequests = HashMultiset.create(); for (int i=0 ; i> entrySet = groupedRequests.entrySet(); + int size = entrySet.size(); + int current = 0; + for (Entry requestEntry : entrySet) { + message.append(requestEntry.getCount()).append(" ").append(requestEntry.getElement().toString()); + current++; + if (current < size) { message.append(", "); } } + message.append("]"); return message.toString(); } + + private static class BulkRequestKey { + private String requestType; + private String index; + private String docType; + + private BulkRequestKey(String requestType, String index, String docType) { + this.requestType = requestType; + this.index = index; + this.docType = docType; + } + + @Override + public boolean equals(Object obj) { + return EqualsBuilder.reflectionEquals(this, obj); + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this); + } + + @Override + public String toString() { + return String.format("%s request(s) on index %s and type %s", requestType, index, docType); + } + } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/es/request/ProxyBulkRequestBuilderTest.java b/server/sonar-server/src/test/java/org/sonar/server/es/request/ProxyBulkRequestBuilderTest.java index f96e451dd0b..e79cc839d28 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/es/request/ProxyBulkRequestBuilderTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/es/request/ProxyBulkRequestBuilderTest.java @@ -66,6 +66,9 @@ public class ProxyBulkRequestBuilderTest { req.add(new IndexRequest(FakeIndexDefinition.INDEX, FakeIndexDefinition.TYPE, "key3") .source(FakeIndexDefinition.newDoc(3))); + assertThat(req.toString()).isEqualTo( + "Bulk[1 delete request(s) on index fakes and type fake, 1 update request(s) on index fakes and type fake, 1 index request(s) on index fakes and type fake]"); + BulkResponse response = req.get(); assertThat(response.getItems()).hasSize(3); } -- 2.39.5