Repository: ambari Updated Branches: refs/heads/trunk a15fc7fc1 -> 36d0271f7
http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrDocumentSource.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrDocumentSource.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrDocumentSource.java index 2181ba3..5ded9ac 100644 --- a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrDocumentSource.java +++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrDocumentSource.java @@ -18,6 +18,8 @@ */ package org.apache.ambari.infra.job.archive; +import org.apache.ambari.infra.job.CloseableIterator; +import org.apache.ambari.infra.job.ObjectSource; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrClient; @@ -29,27 +31,29 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.time.format.DateTimeFormatter; -public class SolrDocumentSource implements DocumentSource { +public class SolrDocumentSource implements ObjectSource<Document> { public static final DateTimeFormatter SOLR_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"); private static final Logger LOG = LoggerFactory.getLogger(SolrDocumentSource.class); - private final String zkHost; + private final String zkConnectionString; private final SolrQueryProperties properties; - private final String endValue; + private final String start; + private final String end; - public SolrDocumentSource(String zkHost, SolrQueryProperties properties, String endValue) { - this.zkHost = zkHost; + public SolrDocumentSource(String zkConnectionString, SolrQueryProperties properties, String start, String end) { + this.zkConnectionString = zkConnectionString; this.properties = properties; - this.endValue = endValue; + this.start = start; + this.end = end; } @Override - public DocumentIterator open(Document current, int rows) { - CloudSolrClient client = new CloudSolrClient.Builder().withZkHost(zkHost).build(); + public CloseableIterator<Document> open(Document current, int rows) { + CloudSolrClient client = new CloudSolrClient.Builder().withZkHost(zkConnectionString).build(); client.setDefaultCollection(properties.getCollection()); SolrQuery query = properties.toQueryBuilder() - .setEndValue(endValue) + .setInterval(start, end) .setDocument(current) .build(); query.setRows(rows); http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryBuilder.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryBuilder.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryBuilder.java index d0f6d40..b3ea14e 100644 --- a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryBuilder.java +++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryBuilder.java @@ -25,6 +25,7 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static org.apache.commons.lang.StringUtils.isBlank; import static org.apache.solr.client.solrj.SolrQuery.ORDER.asc; public class SolrQueryBuilder { @@ -32,6 +33,7 @@ public class SolrQueryBuilder { public static final Pattern PARAMETER_PATTERN = Pattern.compile("\\$\\{[a-z]+\\}"); private String queryText; + private String startValue; private String endValue; private String filterQueryText; private Document document; @@ -51,6 +53,12 @@ public class SolrQueryBuilder { return this; } + public SolrQueryBuilder setInterval(String startValue, String endValue) { + this.startValue = startValue; + this.endValue = endValue; + return this; + } + public SolrQueryBuilder setFilterQueryText(String filterQueryText) { this.filterQueryText = filterQueryText; return this; @@ -71,19 +79,21 @@ public class SolrQueryBuilder { SolrQuery solrQuery = new SolrQuery(); String query = queryText; - query = setEndValueOn(query); + query = setValueOn(query, "${start}", startValue); + query = setValueOn(query, "${end}", endValue); solrQuery.setQuery(query); if (filterQueryText != null) { String filterQuery = filterQueryText; - filterQuery = setEndValueOn(filterQuery); + filterQuery = setValueOn(filterQuery, "${start}", startValue); + filterQuery = setValueOn(filterQuery, "${end}", endValue); Set<String> paramNames = collectParamNames(filterQuery); if (document != null) { for (String parameter : paramNames) { if (document.get(parameter) != null) - filterQuery = filterQuery.replace(String.format("${%s}", parameter), document.get(parameter)); + filterQuery = filterQuery.replace(String.format("${%s}", parameter), String.format("\"%s\"", document.get(parameter))); } } @@ -99,10 +109,14 @@ public class SolrQueryBuilder { return solrQuery; } - private String setEndValueOn(String query) { - if (endValue != null) - query = query.replace("${end}", endValue); - return query; + private String setValueOn(String query, String placeHolder, String value) { + if (isBlank(value)) { + value = "*"; + } + else { + value = '"' + value + '"'; + } + return query.replace(placeHolder, value); } private Set<String> collectParamNames(String filterQuery) { http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryProperties.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryProperties.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryProperties.java index 444a15b..f062879 100644 --- a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryProperties.java +++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/SolrQueryProperties.java @@ -19,6 +19,12 @@ package org.apache.ambari.infra.job.archive; import org.hibernate.validator.constraints.NotBlank; +import org.springframework.batch.core.JobParameters; + +import java.util.ArrayList; +import java.util.List; + +import static org.apache.commons.lang.StringUtils.isBlank; public class SolrQueryProperties { @NotBlank @@ -26,7 +32,7 @@ public class SolrQueryProperties { @NotBlank private String queryText; private String filterQueryText; - private String[] sort; + private String[] sortColumn; public String getCollection() { return collection; @@ -52,18 +58,40 @@ public class SolrQueryProperties { this.filterQueryText = filterQueryText; } - public String[] getSort() { - return sort; + public String[] getSortColumn() { + return sortColumn; } - public void setSort(String[] sort) { - this.sort = sort; + public void setSortColumn(String[] sortColumn) { + this.sortColumn = sortColumn; } public SolrQueryBuilder toQueryBuilder() { return new SolrQueryBuilder(). setQueryText(queryText) .setFilterQueryText(filterQueryText) - .addSort(sort); + .addSort(sortColumn); + } + + public void apply(JobParameters jobParameters) { + collection = jobParameters.getString("collection", collection); + queryText = jobParameters.getString("queryText", queryText); + filterQueryText = jobParameters.getString("filterQueryText", filterQueryText); + + String sortValue; + List<String> sortColumns = new ArrayList<>(); + int i = 0; + while ((sortValue = jobParameters.getString(String.format("sortColumn[%d]", i))) != null) { + sortColumns.add(sortValue); + ++i; + } + + if (sortColumns.size() > 0) + sortColumn = sortColumns.toArray(new String[sortColumns.size()]); + } + + public void validate() { + if (isBlank(collection)) + throw new IllegalArgumentException("The property collection can not be null or empty string!"); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/TarGzCompressor.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/TarGzCompressor.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/TarGzCompressor.java index 8e34ca9..55ba58a 100644 --- a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/TarGzCompressor.java +++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/archive/TarGzCompressor.java @@ -25,7 +25,7 @@ import org.apache.commons.io.IOUtils; import java.io.*; -public class TarGzCompressor implements FileAction { +public class TarGzCompressor extends AbstractFileAction { @Override public File perform(File inputFile) { File tarGzFile = new File(inputFile.getParent(), inputFile.getName() + ".tar.gz"); http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties b/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties index 7ef70aa..27b36b3 100644 --- a/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties +++ b/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties @@ -20,13 +20,41 @@ management.security.enabled=false management.health.solr.enabled=false infra-manager.server.data.folder=/tmp -infra-manager.jobs.solr_data_export.zoo_keeper_socket=zookeeper:2181 -infra-manager.jobs.solr_data_export.read_block_size=100 -infra-manager.jobs.solr_data_export.write_block_size=150 -infra-manager.jobs.solr_data_export.file_name_suffix_column=logtime -infra-manager.jobs.solr_data_export.destination_directory_path=/tmp/ambariInfraManager -infra-manager.jobs.solr_data_export.query.collection=hadoop_logs -infra-manager.jobs.solr_data_export.query.query_text=logtime:[* TO "${end}"] -infra-manager.jobs.solr_data_export.query.filter_query_text=(logtime:"${logtime}" AND id:{"${id}" TO *]) OR logtime:{"${logtime}" TO "${end}"] -infra-manager.jobs.solr_data_export.query.sort[0]=logtime -infra-manager.jobs.solr_data_export.query.sort[1]=id +infra-manager.jobs.solr_data_export.export_service_logs.zoo_keeper_connection_string=zookeeper:2181 +infra-manager.jobs.solr_data_export.export_service_logs.read_block_size=100 +infra-manager.jobs.solr_data_export.export_service_logs.write_block_size=150 +infra-manager.jobs.solr_data_export.export_service_logs.file_name_suffix_column=logtime +infra-manager.jobs.solr_data_export.export_service_logs.destination_directory_path=/tmp/ambariInfraManager +infra-manager.jobs.solr_data_export.export_service_logs.query.collection=hadoop_logs +infra-manager.jobs.solr_data_export.export_service_logs.query.query_text=logtime:[${start} TO ${end}] +infra-manager.jobs.solr_data_export.export_service_logs.query.filter_query_text=(logtime:${logtime} AND id:{${id} TO *]) OR logtime:{${logtime} TO ${end}] +infra-manager.jobs.solr_data_export.export_service_logs.query.sort_column[0]=logtime +infra-manager.jobs.solr_data_export.export_service_logs.query.sort_column[1]=id +infra-manager.jobs.solr_data_export.export_audit_logs.zoo_keeper_connection_string=zookeeper:2181 +infra-manager.jobs.solr_data_export.export_audit_logs.read_block_size=100 +infra-manager.jobs.solr_data_export.export_audit_logs.write_block_size=150 +# TODO: logtime may not be enough: The same filename can be generated when more than write_block_size count docs has the same logtime value +infra-manager.jobs.solr_data_export.export_audit_logs.file_name_suffix_column=logtime +infra-manager.jobs.solr_data_export.export_audit_logs.destination_directory_path=/tmp/ambariInfraManager +infra-manager.jobs.solr_data_export.export_audit_logs.query.collection=audit_logs +infra-manager.jobs.solr_data_export.export_audit_logs.query.query_text=logtime:[${start} TO ${end}] +infra-manager.jobs.solr_data_export.export_audit_logs.query.filter_query_text=(logtime:${logtime} AND id:{${id} TO *]) OR logtime:{${logtime} TO ${end}] +infra-manager.jobs.solr_data_export.export_audit_logs.query.sort_column[0]=logtime +infra-manager.jobs.solr_data_export.export_audit_logs.query.sort_column[1]=id +# TODO: s3_access_key and s3_secret_key to separate file +infra-manager.jobs.solr_data_export.export_audit_logs.s3_access_key=remote-identity +infra-manager.jobs.solr_data_export.export_audit_logs.s3_secret_key=remote-credential +infra-manager.jobs.solr_data_export.export_audit_logs.s3_key_prefix=solr_archive_ +infra-manager.jobs.solr_data_export.export_audit_logs.s3_bucket_name=testbucket +infra-manager.jobs.solr_data_export.export_audit_logs.s3_endpoint=http://fakes3:4569 +# TODO: configure ranger audit logs +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.zoo_keeper_connection_string=zookeeper:2181 +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.read_block_size=100 +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.write_block_size=150 +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.file_name_suffix_column=logtime +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.destination_directory_path=/tmp/ambariInfraManager +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.query.collection=hadoop_logs +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.query.query_text=logtime:[* TO "${end}"] +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.query.filter_query_text=(logtime:"${logtime}" AND id:{"${id}" TO *]) OR logtime:{"${logtime}" TO "${end}"] +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.query.sort_column[0]=logtime +#infra-manager.jobs.solr_data_export.export_ranger_audit_logs.query.sort_column[1]=id http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentExportPropertiesTest.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentExportPropertiesTest.java b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentExportPropertiesTest.java new file mode 100644 index 0000000..ae93710 --- /dev/null +++ b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentExportPropertiesTest.java @@ -0,0 +1,54 @@ +package org.apache.ambari.infra.job.archive; + +import org.junit.Test; + +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +public class DocumentExportPropertiesTest { + @Test + public void testDeepCopy() throws Exception { + DocumentExportProperties documentExportProperties = new DocumentExportProperties(); + documentExportProperties.setDestinationDirectoryPath("/tmp"); + documentExportProperties.setFileNameSuffixColumn(".json"); + documentExportProperties.setReadBlockSize(10); + documentExportProperties.setWriteBlockSize(20); + documentExportProperties.setZooKeeperConnectionString("localhost:2181"); + SolrQueryProperties query = new SolrQueryProperties(); + query.setFilterQueryText("id:1167"); + query.setQueryText("name:'Joe'"); + query.setCollection("Users"); + query.setSortColumn(new String[] {"name"}); + documentExportProperties.setQuery(query); + + DocumentExportProperties parsed = documentExportProperties.deepCopy(); + + assertThat(parsed.getDestinationDirectoryPath(), is(documentExportProperties.getDestinationDirectoryPath())); + assertThat(parsed.getFileNameSuffixColumn(), is(documentExportProperties.getFileNameSuffixColumn())); + assertThat(parsed.getReadBlockSize(), is(documentExportProperties.getReadBlockSize())); + assertThat(parsed.getWriteBlockSize(), is(documentExportProperties.getWriteBlockSize())); + assertThat(parsed.getZooKeeperConnectionString(), is(documentExportProperties.getZooKeeperConnectionString())); + assertThat(parsed.getQuery().getQueryText(), is(query.getQueryText())); + assertThat(parsed.getQuery().getFilterQueryText(), is(query.getFilterQueryText())); + assertThat(parsed.getQuery().getCollection(), is(query.getCollection())); + assertThat(parsed.getQuery().getSortColumn(), is(query.getSortColumn())); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentItemReaderTest.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentItemReaderTest.java b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentItemReaderTest.java index 942713f..0776c3c 100644 --- a/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentItemReaderTest.java +++ b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/DocumentItemReaderTest.java @@ -19,6 +19,8 @@ package org.apache.ambari.infra.job.archive; +import org.apache.ambari.infra.job.CloseableIterator; +import org.apache.ambari.infra.job.ObjectSource; import org.easymock.EasyMockRunner; import org.easymock.EasyMockSupport; import org.easymock.Mock; @@ -45,11 +47,11 @@ public class DocumentItemReaderTest extends EasyMockSupport { private DocumentItemReader documentItemReader; @Mock - private DocumentSource documentSource; + private ObjectSource<Document> documentSource; @Mock - private DocumentIterator documentIterator; + private CloseableIterator<Document> documentIterator; @Mock - private DocumentIterator documentIterator2; + private CloseableIterator<Document> documentIterator2; @Before public void setUp() throws Exception { http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/LocalDocumentItemWriterTest.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/LocalDocumentItemWriterTest.java b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/LocalDocumentItemWriterTest.java index 6411ff1..3af93bc 100644 --- a/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/LocalDocumentItemWriterTest.java +++ b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/LocalDocumentItemWriterTest.java @@ -35,7 +35,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -49,12 +49,12 @@ public class LocalDocumentItemWriterTest extends EasyMockSupport { private LocalDocumentItemWriter localDocumentItemWriter; private File outFile; @Mock - private FileAction fileAction; + private ItemWriterListener itemWriterListener; @Before public void setUp() throws Exception { outFile = File.createTempFile("LocalDocumentItemWriterTest", "json.tmp"); - localDocumentItemWriter = new LocalDocumentItemWriter(outFile, fileAction); + localDocumentItemWriter = new LocalDocumentItemWriter(outFile, itemWriterListener); } @After @@ -65,7 +65,7 @@ public class LocalDocumentItemWriterTest extends EasyMockSupport { @Test public void testWrite() throws Exception { - expect(fileAction.perform(outFile)).andReturn(outFile); + itemWriterListener.onCompleted(outFile); expectLastCall(); replayAll(); localDocumentItemWriter.write(DOCUMENT); http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryBuilderTest.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryBuilderTest.java b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryBuilderTest.java index 4d5ebf1..e9513dc 100644 --- a/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryBuilderTest.java +++ b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryBuilderTest.java @@ -48,7 +48,7 @@ public class SolrQueryBuilderTest { @Test public void testSetQuery() throws Exception { SolrQuery solrQuery = new SolrQueryBuilder() - .setQueryText("logtime:[* TO \"${end}\"]") + .setQueryText("logtime:[* TO ${end}]") .setEndValue("2017-11-27'T'10:12:11.372Z") .build(); assertThat(solrQuery.getQuery(), is("logtime:[* TO \"2017-11-27'T'10:12:11.372Z\"]")); @@ -57,7 +57,7 @@ public class SolrQueryBuilderTest { @Test public void testSetFilterQuery() throws Exception { SolrQuery solrQuery = new SolrQueryBuilder() - .setFilterQueryText("(logtime:\"${logtime}\" AND id:{\"${id}\" TO *]) OR logtime:{\"${logtime}\" TO \"${end}\"]") + .setFilterQueryText("(logtime:${logtime} AND id:{${id} TO *]) OR logtime:{${logtime} TO ${end}]") .setDocument(DOCUMENT) .setEndValue("2017-11-27'T'10:12:11.372Z") .build(); @@ -76,7 +76,7 @@ public class SolrQueryBuilderTest { @Test public void testSetFilterQueryWhenEndValueIsNull() throws Exception { SolrQuery solrQuery = new SolrQueryBuilder() - .setFilterQueryText("logtime:\"${logtime}\" AND id:{\"${id}\" TO *]") + .setFilterQueryText("logtime:${logtime} AND id:{${id} TO *]") .setDocument(DOCUMENT) .build(); assertThat(solrQuery.getFilterQueries()[0], is("logtime:\"2017-10-02'T'10:00:11.634Z\" AND id:{\"1\" TO *]")); @@ -110,4 +110,16 @@ public class SolrQueryBuilderTest { assertThat(solrQuery.getSorts().get(0).getItem(), is("logtime")); assertThat(solrQuery.getSorts().get(1).getItem(), is("id")); } + + @Test + public void test_start_and_end_values_are_given() throws Exception { + SolrQuery solrQuery = new SolrQueryBuilder().setQueryText("id:[${start} TO ${end}]").setInterval("10", "13").build(); + assertThat(solrQuery.getQuery(), is("id:[\"10\" TO \"13\"]")); + } + + @Test + public void test_start_and_end_values_are_null() throws Exception { + SolrQuery solrQuery = new SolrQueryBuilder().setQueryText("id:[${start} TO ${end}]").build(); + assertThat(solrQuery.getQuery(), is("id:[* TO *]")); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryPropertiesTest.java ---------------------------------------------------------------------- diff --git a/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryPropertiesTest.java b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryPropertiesTest.java new file mode 100644 index 0000000..322775e --- /dev/null +++ b/ambari-infra/ambari-infra-manager/src/test/java/org/apache/ambari/infra/job/archive/SolrQueryPropertiesTest.java @@ -0,0 +1,54 @@ +package org.apache.ambari.infra.job.archive; + +import org.junit.Test; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.JobParametersBuilder; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +public class SolrQueryPropertiesTest { + @Test + public void testApplySortColumns() throws Exception { + JobParameters jobParameters = new JobParametersBuilder() + .addString("sortColumn[0]", "logtime") + .addString("sortColumn[1]", "id") + .toJobParameters(); + + SolrQueryProperties solrQueryProperties = new SolrQueryProperties(); + solrQueryProperties.setSortColumn(new String[] {"testColumn"}); + solrQueryProperties.apply(jobParameters); + assertThat(solrQueryProperties.getSortColumn().length, is(2)); + assertThat(solrQueryProperties.getSortColumn()[0], is("logtime")); + assertThat(solrQueryProperties.getSortColumn()[1], is("id")); + } + + @Test + public void testApplyWhenNoSortIsDefined() throws Exception { + JobParameters jobParameters = new JobParametersBuilder() + .toJobParameters(); + + SolrQueryProperties solrQueryProperties = new SolrQueryProperties(); + solrQueryProperties.setSortColumn(new String[] {"testColumn"}); + solrQueryProperties.apply(jobParameters); + assertThat(solrQueryProperties.getSortColumn().length, is(1)); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/36d0271f/ambari-infra/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-infra/pom.xml b/ambari-infra/pom.xml index e4b6a76..9e7a71b 100644 --- a/ambari-infra/pom.xml +++ b/ambari-infra/pom.xml @@ -23,7 +23,6 @@ <version>2.0.0.0-SNAPSHOT</version> <relativePath>../ambari-project</relativePath> </parent> - <groupId>org.apache.ambari</groupId> <modelVersion>4.0.0</modelVersion> <artifactId>ambari-infra</artifactId> <version>2.0.0.0-SNAPSHOT</version> @@ -44,6 +43,7 @@ <module>ambari-infra-solr-client</module> <module>ambari-infra-solr-plugin</module> <module>ambari-infra-manager</module> + <module>ambari-infra-manager-it</module> </modules> <build> @@ -161,6 +161,9 @@ <exclude>**/*.json</exclude> <exclude>**/*.log</exclude> <exclude>**/*.txt</exclude> + <exclude>**/docker/Profile</exclude> + <exclude>**/docker/.env</exclude> + <exclude>**/*.story</exclude> </excludes> </configuration> <executions>