import org.hamcrest.Matchers;
import org.junit.rules.ErrorCollector;
+import org.slf4j.LoggerFactory;
public class Benchmark extends ErrorCollector {
static {
if (ENABLED) {
- System.out.println("Assertions are calibrated for SonarSource dedicated box. " +
+ LoggerFactory.getLogger(Benchmark.class).warn("Assertions are calibrated for SonarSource dedicated box. " +
"They can be disabled by setting the property -DenableBenchmarkAssertions=false.");
}
}
import org.sonar.api.issue.Issue;
import org.sonar.api.rule.Severity;
import org.sonar.api.utils.internal.Uuids;
+import org.sonar.server.es.EsClient;
import org.sonar.server.issue.IssueQuery;
import org.sonar.server.issue.index.IssueAuthorizationDao;
import org.sonar.server.issue.index.IssueAuthorizationIndexer;
private static final Logger LOGGER = LoggerFactory.getLogger("benchmarkIssues");
- final static int PROJECTS = 100;
+ final static int PROJECTS = 1;
final static int FILES_PER_PROJECT = 100;
final static int ISSUES_PER_FILE = 100;
LOGGER.info(String.format("%d issues indexed in %d ms (%d docs/second)", issues.count.get(), period, 1000 * issues.count.get() / period));
benchmark.expectBetween("Time to index issues", period, 350000L, 430000L);
+ // be sure that physical files do not evolve during estimation of size
+ tester.get(EsClient.class).prepareOptimize("issues").get();
long dirSize = FileUtils.sizeOfDirectory(tester.getEsServerHolder().getHomeDir());
LOGGER.info(String.format("ES dir: " + FileUtils.byteCountToDisplaySize(dirSize)));
benchmark.expectBetween("ES dir size (b)", dirSize, 385L * FileUtils.ONE_MB, 420L * FileUtils.ONE_MB);
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.sonar.server.es.EsClient;
import org.sonar.server.source.index.SourceLineDoc;
import org.sonar.server.source.index.SourceLineIndex;
+import org.sonar.server.source.index.SourceLineIndexDefinition;
import org.sonar.server.source.index.SourceLineIndexer;
import org.sonar.server.source.index.SourceLineResultSetIterator;
import org.sonar.server.tester.ServerTester;
long nbLines = files.count.get() * LINES_PER_FILE;
LOGGER.info(String.format("%d lines indexed in %d ms (%d docs/second)", nbLines, period, nbLines / period));
+ // be sure that physical files do not evolve during estimation of size
+ tester.get(EsClient.class).prepareOptimize(SourceLineIndexDefinition.INDEX).get();
long dirSize = FileUtils.sizeOfDirectory(tester.getEsServerHolder().getHomeDir());
LOGGER.info(String.format("ES dir: " + FileUtils.byteCountToDisplaySize(dirSize)));
benchmark.expectBetween("ES dir size (b)", dirSize, 80L * FileUtils.ONE_MB, 100L * FileUtils.ONE_MB);
// optimize lucene segments and revert index settings
// Optimization must be done before re-applying replicas:
// http://www.elasticsearch.org/blog/performance-considerations-elasticsearch-indexing/
- // TODO do not use nativeClient, else request is not profiled
- client.nativeClient().admin().indices().prepareOptimize(indexName)
- .setMaxNumSegments(1)
- .setWaitForMerge(true)
- .get();
+ client.prepareOptimize(indexName).get();
updateSettings(largeInitialSettings);
}
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequestBuilder;
import org.elasticsearch.action.admin.indices.flush.FlushRequestBuilder;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder;
+import org.elasticsearch.action.admin.indices.optimize.OptimizeRequestBuilder;
import org.elasticsearch.action.admin.indices.refresh.RefreshRequestBuilder;
import org.elasticsearch.action.admin.indices.stats.IndicesStatsRequestBuilder;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
return new ProxyIndexRequestBuilder(client, profiling).setIndex(index).setType(type);
}
+ public OptimizeRequestBuilder prepareOptimize(String indexName) {
+ // TODO add proxy for profiling
+ return nativeClient().admin().indices().prepareOptimize(indexName)
+ .setMaxNumSegments(1)
+ .setWaitForMerge(true);
+ }
+
+
public long getLastUpdatedAt(String indexName, String typeName) {
SearchRequestBuilder request = prepareSearch(indexName)
.setTypes(typeName)