Merge branch 'master' of https://github.com/RajashekharInmobi/lens
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
index 34069d9..357d4de 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
@@ -1830,30 +1830,19 @@
for (UpdatePeriod updatePeriod : updatePeriods) {
tableNames.add(updatePeriodToTableMap.get(updatePeriod));
}
- if (tableNames.size() <= 1) {
- XStorageTableElement tblElement = JAXBUtils.getXStorageTableFromHiveTable(
- getHiveTable(MetastoreUtil.getFactOrDimtableStorageTableName(cft.getName(), storageName)));
- tblElement.setStorageName(storageName);
- for (UpdatePeriod p : updatePeriods) {
- tblElement.getUpdatePeriods().getUpdatePeriod().add(XUpdatePeriod.valueOf(p.name()));
- }
- factTable.getStorageTables().getStorageTable().add(tblElement);
- } else {
- // Multiple storage tables.
- XStorageTableElement tblElement = new XStorageTableElement();
- tblElement.setStorageName(storageName);
- XUpdatePeriods xUpdatePeriods = new XUpdatePeriods();
- tblElement.setUpdatePeriods(xUpdatePeriods);
- for (Map.Entry entry : updatePeriodToTableMap.entrySet()) {
- XUpdatePeriodTableDescriptor updatePeriodTableDescriptor = new XUpdatePeriodTableDescriptor();
- updatePeriodTableDescriptor.setTableDesc(getStorageTableDescFromHiveTable(
+ XStorageTableElement tblElement = new XStorageTableElement();
+ tblElement.setStorageName(storageName);
+ XUpdatePeriods xUpdatePeriods = new XUpdatePeriods();
+ tblElement.setUpdatePeriods(xUpdatePeriods);
+ for (Map.Entry entry : updatePeriodToTableMap.entrySet()) {
+ XUpdatePeriodTableDescriptor updatePeriodTableDescriptor = new XUpdatePeriodTableDescriptor();
+ updatePeriodTableDescriptor.setTableDesc(getStorageTableDescFromHiveTable(
this.getHiveTable(MetastoreUtil.getFactOrDimtableStorageTableName(cft.getName(),
- (String) entry.getValue()))));
- updatePeriodTableDescriptor.setUpdatePeriod(XUpdatePeriod.valueOf(((UpdatePeriod) entry.getKey()).name()));
- xUpdatePeriods.getUpdatePeriodTableDescriptor().add(updatePeriodTableDescriptor);
- }
- factTable.getStorageTables().getStorageTable().add(tblElement);
+ (String) entry.getValue()))));
+ updatePeriodTableDescriptor.setUpdatePeriod(XUpdatePeriod.valueOf(((UpdatePeriod) entry.getKey()).name()));
+ xUpdatePeriods.getUpdatePeriodTableDescriptor().add(updatePeriodTableDescriptor);
}
+ factTable.getStorageTables().getStorageTable().add(tblElement);
}
fact = factTable;
}
diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/query/PreparedQueryContext.java b/lens-server-api/src/main/java/org/apache/lens/server/api/query/PreparedQueryContext.java
index 0b08459..69ee7c4 100644
--- a/lens-server-api/src/main/java/org/apache/lens/server/api/query/PreparedQueryContext.java
+++ b/lens-server-api/src/main/java/org/apache/lens/server/api/query/PreparedQueryContext.java
@@ -49,10 +49,17 @@
private final QueryPrepareHandle prepareHandle;
/**
- * The prepared time.
+ * The prepare start time.
*/
@Getter
- private final Date preparedTime;
+ private final Date prepareStartTime;
+
+ /**
+ * The prepare end time.
+ */
+ @Getter
+ @Setter
+ private Date prepareEndTime = null;
/**
* The prepared user.
@@ -94,7 +101,7 @@
public PreparedQueryContext(String query, String user, Configuration conf, LensConf qconf, Collection<LensDriver>
drivers) {
super(query, user, qconf, conf, drivers, true);
- this.preparedTime = new Date();
+ this.prepareStartTime = new Date();
this.preparedUser = user;
this.prepareHandle = new QueryPrepareHandle(UUID.randomUUID());
this.conf = conf;
@@ -119,9 +126,9 @@
@Override
public long getDelay(TimeUnit units) {
long delayMillis;
- if (this.preparedTime != null) {
+ if (this.prepareStartTime != null) {
Date now = new Date();
- long elapsedMills = now.getTime() - this.preparedTime.getTime();
+ long elapsedMills = now.getTime() - this.prepareStartTime.getTime();
delayMillis = millisInWeek - elapsedMills;
return units.convert(delayMillis, TimeUnit.MILLISECONDS);
} else {
@@ -147,7 +154,7 @@
* @return the lens prepared query
*/
public LensPreparedQuery toPreparedQuery() {
- return new LensPreparedQuery(prepareHandle, userQuery, preparedTime, preparedUser, getDriverContext()
+ return new LensPreparedQuery(prepareHandle, userQuery, prepareStartTime, preparedUser, getDriverContext()
.getSelectedDriver() != null ? getDriverContext().getSelectedDriver().getFullyQualifiedName() : null,
getDriverContext().getSelectedDriverQuery(), lensConf);
}
diff --git a/lens-server/src/main/java/org/apache/lens/server/query/LensServerDAO.java b/lens-server/src/main/java/org/apache/lens/server/query/LensServerDAO.java
index 983365d..24748fc 100644
--- a/lens-server/src/main/java/org/apache/lens/server/query/LensServerDAO.java
+++ b/lens-server/src/main/java/org/apache/lens/server/query/LensServerDAO.java
@@ -35,6 +35,7 @@
import org.apache.lens.api.query.QueryStatus;
import org.apache.lens.server.api.error.LensException;
import org.apache.lens.server.api.query.FinishedLensQuery;
+import org.apache.lens.server.api.query.PreparedQueryContext;
import org.apache.lens.server.api.query.QueryContext;
import org.apache.lens.server.session.LensSessionImpl;
import org.apache.lens.server.util.UtilityMethods;
@@ -47,6 +48,7 @@
import org.apache.hadoop.conf.Configuration;
import com.google.common.collect.Lists;
+
import lombok.extern.slf4j.Slf4j;
/**
@@ -821,4 +823,32 @@
return result;
}
+
+ /**
+ * DAO method to insert a new Prepared query into Table.
+ *
+ * @param preparedQueryContext to be inserted
+ * @throws SQLException the exception
+ */
+ public void insertPreparedQuery(PreparedQueryContext preparedQueryContext) throws SQLException {
+ String sql = "insert into prepared_queries (handle, userquery, submitter, timetaken, queryname, drivername, "
+ + "driverquery, starttime)" + " values (?,?,?,?,?,?,?)";
+ Connection conn = null;
+ try {
+ conn = getConnection();
+ conn.setAutoCommit(false);
+ QueryRunner runner = new QueryRunner();
+
+ long timeTaken =
+ preparedQueryContext.getPrepareEndTime().getTime() - preparedQueryContext.getPrepareStartTime().getTime();
+
+ runner.update(conn, sql, preparedQueryContext.getPrepareHandle().getQueryHandleString(),
+ preparedQueryContext.getUserQuery(), preparedQueryContext.getSubmittedUser(), timeTaken,
+ preparedQueryContext.getQueryName(), preparedQueryContext.getDriverContext().getSelectedDriver(),
+ preparedQueryContext.getSelectedDriverQuery(), preparedQueryContext.getPrepareStartTime());
+ conn.commit();
+ } finally {
+ DbUtils.closeQuietly(conn);
+ }
+ }
}
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 9e5f2e6..c3d78cd 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
@@ -149,6 +149,8 @@
*/
public static final String PREPARED_QUERY_PURGER_COUNTER = "prepared-query-purger-errors";
+ public static final String PREPARED_QUERY_INSERT_COUNTER = "prepared-query-insert-errors";
+
/**
* The millis in week.
*/
@@ -2054,7 +2056,12 @@
acquire(sessionHandle);
prepared = prepareQuery(sessionHandle, query, lensConf, SubmitOp.PREPARE);
prepared.setQueryName(queryName);
- prepared.getSelectedDriver().prepare(prepared);
+ try {
+ lensServerDao.insertPreparedQuery(prepared);
+ } catch (Exception e) {
+ incrCounter(PREPARED_QUERY_INSERT_COUNTER);
+ }
+
return prepared.getPrepareHandle();
} catch (LensException e) {
if (prepared != null) {
@@ -2087,6 +2094,7 @@
preparedQueries.put(prepared.getPrepareHandle(), prepared);
preparedQueryQueue.add(prepared);
incrCounter(PREPARED_QUERIES_COUNTER);
+ prepared.setPrepareEndTime(new Date());
return prepared;
}
@@ -3031,7 +3039,7 @@
continue;
}
}
- long queryPrepTime = preparedQueryContext.getPreparedTime().getTime();
+ long queryPrepTime = preparedQueryContext.getPrepareStartTime().getTime();
if (fromTime <= queryPrepTime && queryPrepTime < toTime) {
continue;
}
diff --git a/pom.xml b/pom.xml
index 9525332..3deff5d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,7 +103,7 @@
<war.plugin.version>2.1.1</war.plugin.version>
<license.plugin.version>2.6</license.plugin.version>
<buildnumber.plugin.version>1.0</buildnumber.plugin.version>
- <findbugs.plugin.version>3.0.1</findbugs.plugin.version>
+ <findbugs.plugin.version>3.0.4</findbugs.plugin.version>
<antrun.plugin.version>1.8</antrun.plugin.version>
<cobertura.plugin.version>2.7</cobertura.plugin.version>