Repository: lens Updated Branches: refs/heads/master fa2df7cb0 -> 138d11353
LENS-1519 :Result download url to be made configurable Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/d94bcb11 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/d94bcb11 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/d94bcb11 Branch: refs/heads/master Commit: d94bcb11f94d3f06a5edd4a739f9db4380512a8d Parents: c6423ae Author: Rajitha R <rajit...@apache.org> Authored: Mon Jun 11 21:19:52 2018 +0530 Committer: Rajitha.R <rajit...@im0318-l0.corp.inmobi.com> Committed: Mon Jun 11 21:19:52 2018 +0530 ---------------------------------------------------------------------- .../lens/server/api/LensConfConstants.java | 15 +++++++- .../query/DefaultDownloadResultUrlProvider.java | 36 ++++++++++++++++++++ .../api/query/DownloadResultUrlProvider.java | 29 ++++++++++++++++ .../lens/server/query/LensPersistentResult.java | 11 ++++-- .../server/query/QueryExecutionServiceImpl.java | 3 ++ src/site/apt/user/cli.apt | 2 +- src/site/apt/user/client-config.apt | 12 ++++--- 7 files changed, 100 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/d94bcb11/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java b/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java index 5a4e3dd..2147f08 100644 --- a/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java @@ -23,6 +23,8 @@ import javax.ws.rs.core.MediaType; import org.apache.lens.api.parse.Parser; import org.apache.lens.server.api.error.LensException; import org.apache.lens.server.api.metastore.*; +import org.apache.lens.server.api.query.DefaultDownloadResultUrlProvider; +import org.apache.lens.server.api.query.DownloadResultUrlProvider; import org.apache.lens.server.api.query.cost.FactPartitionBasedQueryCost; import org.apache.lens.server.api.query.cost.QueryCost; @@ -733,7 +735,6 @@ public final class LensConfConstants { public static final int DEFAULT_KDC_LOGIN_SERVICE_INTERVAL_IN_MINUTES = 360; - /** * Lens principal for kerberos authentication */ @@ -1265,6 +1266,18 @@ public final class LensConfConstants { */ public static final String COMPLETENESS_CHECKER_CLASS = "lens.cube.metastore.completeness.checker.class"; + /*The class that implements the result download url provider interface */ + public static final String RESULT_DOWNLOAD_URL_PROVIDER_CLASS = SERVER_PFX + "result.download.url.provider.class"; + + /*The default result download url provider class */ + public static final Class<? extends DownloadResultUrlProvider> DEFAULT_RESULT_DOWNLOAD_URL_PROVIDER = + DefaultDownloadResultUrlProvider.class.asSubclass(DownloadResultUrlProvider.class); + + /** + * The download url content config + */ + public static final String QUERY_EMAIL_DOWNLOAD_URL = QUERY_PFX + "email.download.url"; + /** * The default implementation of DataCompletenessChecker */ http://git-wip-us.apache.org/repos/asf/lens/blob/d94bcb11/lens-server-api/src/main/java/org/apache/lens/server/api/query/DefaultDownloadResultUrlProvider.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/query/DefaultDownloadResultUrlProvider.java b/lens-server-api/src/main/java/org/apache/lens/server/api/query/DefaultDownloadResultUrlProvider.java new file mode 100644 index 0000000..cf8a066 --- /dev/null +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/query/DefaultDownloadResultUrlProvider.java @@ -0,0 +1,36 @@ +/** + * 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. + */ +package org.apache.lens.server.api.query; + +import org.apache.lens.server.api.LensConfConstants; + +import org.apache.hadoop.conf.Configuration; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class DefaultDownloadResultUrlProvider implements DownloadResultUrlProvider { + + @Override + public String getResultUrl(Configuration conf, String queryHandle) { + log.debug("Returning Default result set url "); + return conf.get(LensConfConstants.SERVER_BASE_URL, LensConfConstants.DEFAULT_SERVER_BASE_URL) + + "queryapi/queries/" + queryHandle + "/httpresultset"; + } +} http://git-wip-us.apache.org/repos/asf/lens/blob/d94bcb11/lens-server-api/src/main/java/org/apache/lens/server/api/query/DownloadResultUrlProvider.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/query/DownloadResultUrlProvider.java b/lens-server-api/src/main/java/org/apache/lens/server/api/query/DownloadResultUrlProvider.java new file mode 100644 index 0000000..136bf60 --- /dev/null +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/query/DownloadResultUrlProvider.java @@ -0,0 +1,29 @@ +/** + * 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. + */ +package org.apache.lens.server.api.query; + +import org.apache.hadoop.conf.Configuration; + +/* +* The interface to implement for returning download url. This is embedded in the query competion email sent to the user +* */ +public interface DownloadResultUrlProvider { + + String getResultUrl(Configuration conf, String queryHandle); +} http://git-wip-us.apache.org/repos/asf/lens/blob/d94bcb11/lens-server/src/main/java/org/apache/lens/server/query/LensPersistentResult.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/query/LensPersistentResult.java b/lens-server/src/main/java/org/apache/lens/server/query/LensPersistentResult.java index 3f24343..91bb701 100644 --- a/lens-server/src/main/java/org/apache/lens/server/query/LensPersistentResult.java +++ b/lens-server/src/main/java/org/apache/lens/server/query/LensPersistentResult.java @@ -25,12 +25,14 @@ import org.apache.lens.server.api.LensConfConstants; import org.apache.lens.server.api.driver.LensResultSetMetadata; import org.apache.lens.server.api.driver.PersistentResultSet; import org.apache.lens.server.api.error.LensException; +import org.apache.lens.server.api.query.DownloadResultUrlProvider; import org.apache.lens.server.api.query.FinishedLensQuery; import org.apache.lens.server.api.query.QueryContext; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hbase.util.ReflectionUtils; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -54,6 +56,8 @@ public class LensPersistentResult extends PersistentResultSet { @Getter private String httpResultUrl = null; + private DownloadResultUrlProvider resultUrlSetter = null; + /** * Instantiates a new lens persistent result. * @param queryHandle the query handle @@ -71,8 +75,11 @@ public class LensPersistentResult extends PersistentResultSet { this.fileSize = fileSize; this.conf = conf; if (isHttpResultAvailable()) { - this.httpResultUrl = conf.get(LensConfConstants.SERVER_BASE_URL, LensConfConstants.DEFAULT_SERVER_BASE_URL) - + "queryapi/queries/" + queryHandle + "/httpresultset"; + resultUrlSetter = ReflectionUtils.newInstance(this.conf.getClass(LensConfConstants.RESULT_DOWNLOAD_URL_PROVIDER_CLASS, + LensConfConstants.DEFAULT_RESULT_DOWNLOAD_URL_PROVIDER, DownloadResultUrlProvider.class)); + this.httpResultUrl = resultUrlSetter.getResultUrl(this.conf, queryHandle.toString()); + log.info("Config : " + this.conf.get(LensConfConstants.RESULT_DOWNLOAD_URL_PROVIDER_CLASS) + " Result url set as : " + + this.httpResultUrl); } } http://git-wip-us.apache.org/repos/asf/lens/blob/d94bcb11/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java index 4d141e5..77fce0b 100644 --- a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java +++ b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java @@ -1932,11 +1932,13 @@ public class QueryExecutionServiceImpl extends BaseLensService implements QueryE */ private LensPersistentResult getResultsetFromDAO(QueryHandle queryHandle) throws LensException { FinishedLensQuery query = lensServerDao.getQuery(queryHandle.toString()); + QueryContext ctx = allQueries.get(queryHandle); if (query != null) { if (query.getResult() == null) { throw new NotFoundException("InMemory Query result purged " + queryHandle); } try { + conf.addResource(ctx.getConf()); return new LensPersistentResult(query, conf); } catch (Exception e) { throw new LensException(e); @@ -1966,6 +1968,7 @@ public class QueryExecutionServiceImpl extends BaseLensService implements QueryE LensResultSet resultSet = resultSets.get(queryHandle); if (resultSet == null) { if (ctx.isPersistent() && ctx.getQueryOutputFormatter() != null) { + conf.addResource(ctx.getConf()); resultSets.put(queryHandle, new LensPersistentResult(ctx, conf)); } else if (ctx.isResultAvailableInDriver() && !ctx.isQueryClosedOnDriver()) { //InMemory result can not be returned for a closed query http://git-wip-us.apache.org/repos/asf/lens/blob/d94bcb11/src/site/apt/user/cli.apt ---------------------------------------------------------------------- diff --git a/src/site/apt/user/cli.apt b/src/site/apt/user/cli.apt index 12bc88c..aca2498 100644 --- a/src/site/apt/user/cli.apt +++ b/src/site/apt/user/cli.apt @@ -238,7 +238,7 @@ User CLI Commands *--+--+ |fact drop all storages [--fact_name] \<fact_name\>|drop all storages associated to fact <<<fact_name>>>\ | *--+--+ -|fact drop partitions [--fact_name] \<fact_name\> [--storage_name] \<storage_name\> [[--filter] \<partition-filter\>]|drop all partitions associated with fact <<<fact_name>>>, storage <<<storage_name>>> filtered by <<<partition-filter>>>\ | +|fact drop partitions [--fact_name] \<fact_name\> [--storage_name] \<storage_name\> [--update_period] \<update_period\> [[--filter] \<partition-filter\>]|drop all partitions associated with fact <<<fact_name>>>, storage <<<storage_name>>> filtered by <<<partition-filter>>>\ | *--+--+ |fact drop storage [--fact_name] \<fact_name\> [--storage_name] \<storage_name\>|drop storage <<<storage_name>>> from fact <<<fact_name>>>\ | *--+--+ http://git-wip-us.apache.org/repos/asf/lens/blob/d94bcb11/src/site/apt/user/client-config.apt ---------------------------------------------------------------------- diff --git a/src/site/apt/user/client-config.apt b/src/site/apt/user/client-config.apt index 4f0b2b4..0da93f1 100644 --- a/src/site/apt/user/client-config.apt +++ b/src/site/apt/user/client-config.apt @@ -38,12 +38,16 @@ Lens client configuration *--+--+---+--+ |7|lens.client.requestfilter.ws.filter.impl|org.apache.lens.client.RequestFilter|Implementation class for Request Filter| *--+--+---+--+ -|8|lens.client.user.name|anonymous|Lens client user name| +|8|lens.client.ssl.enabled|false|Specifies whether https is enabled for lens server or not.| *--+--+---+--+ -|9|lens.client.ws.request.filternames|requestfilter|These JAX-RS filters would be started in the specified order when lens-client starts| +|9|lens.client.ssl.ignore.server.cert|true|Specifies whether https is enabled for lens server or not.| *--+--+---+--+ -|10|lens.query.cancel.on.timeout|false|Specifies whether to attempt cancellation of a query whose execution takes longer than the timeout value specified while submitting the query for execution.| +|10|lens.client.user.name|anonymous|Lens client user name| *--+--+---+--+ -|11|lens.server.base.url|http://0.0.0.0:9999/lensapi|The base url for the lens server| +|11|lens.client.ws.request.filternames|requestfilter|These JAX-RS filters would be started in the specified order when lens-client starts| +*--+--+---+--+ +|12|lens.query.cancel.on.timeout|false|Specifies whether to attempt cancellation of a query whose execution takes longer than the timeout value specified while submitting the query for execution.| +*--+--+---+--+ +|13|lens.server.base.url|http://0.0.0.0:9999/lensapi|The base url for the lens server| *--+--+---+--+ The configuration parameters and their default values