@Override public int compare(QueryContext o1, QueryContext o2) { if (o2.getAccumulatedMillis() > o1.getAccumulatedMillis()) { return 1; } else if (o2.getAccumulatedMillis() < o1.getAccumulatedMillis()) { return -1; } else { return o1.getQueryId().compareTo(o2.getQueryId()); } } });
@Override public ITuple next() { if (scanCount++ % 100 == 1) { QueryContextFacade.current().checkMillisBeforeDeadline(); } if (++scanCountDelta >= 1000) { flushScanCountDelta(); } return tupleIterator.next(); }
@Override protected QueryContext initialValue() { QueryContext queryContext = new QueryContext(); RUNNING_CTX_MAP.put(queryContext.getQueryId(), queryContext); return queryContext; } };
@Override public void close() throws IOException { queryContext.addAndGetScannedRows(scannedRows); queryContext.addAndGetScannedBytes(scannedBytes); for (ResultScanner scanner : scanners) { scanner.close(); } hbaseTable.close(); }
final SegmentQueryResult.Builder segmentQueryResultBuilder, final String segmentQueryCacheKey) { final String queryId = queryContext.getQueryId(); queryContext.stop(ex); if (queryContext.isStopped()) { logger.error(logHeader + "Error when visiting cubes by endpoint", queryContext.getThrowable()); // double log coz the query thread may already timeout
sqlResponse = query(sqlRequest, queryContext.getQueryId()); } else if (kylinConfig.isPushDownEnabled() && kylinConfig.isPushDownUpdateEnabled()) { sqlResponse = update(sqlRequest); long scanCountThreshold = kylinConfig.getQueryScanCountCacheThreshold(); long scanBytesThreshold = kylinConfig.getQueryScanBytesCacheThreshold(); sqlResponse.setDuration(queryContext.getAccumulatedMillis()); logger.info("Stats of SQL response: isException: {}, duration: {}, total scan count {}", // String.valueOf(sqlResponse.getIsException()), String.valueOf(sqlResponse.getDuration()), queryContext.stop(e);
if (querySegmentCacheEnabled) { try { logger.info("Query-{}: try to get segment result from cache for segment:{}", queryContext.getQueryId(), cubeSeg); calculatedSegmentQueryCacheKey = getSegmentQueryCacheKey(scanRequest); if (segmentResult == null) { logger.info("Query-{}: no segment result is cached for segment:{}, take time:{}ms", queryContext.getQueryId(), cubeSeg, spendTime); } else { logger.info("Query-{}: get segment result from cache for segment:{}, take time:{}ms", queryContext.getQueryId(), cubeSeg, spendTime); if (segmentResult.getCubeSegmentStatisticsBytes() != null) { queryContext.addCubeSegmentStatistics(storageContext.ctxId, (CubeSegmentStatistics) SerializationUtils .deserialize(segmentResult.getCubeSegmentStatisticsBytes())); final String queryId = queryContext.getQueryId(); if (queryId != null) { builder.setQueryId(queryId); queryContext.getQueryId(), Integer.toHexString(System.identityHashCode(scanRequest))); for (final Pair<byte[], byte[]> epRange : getEPKeyRanges(cuboidBaseShard, shardNum, totalShards)) { executorService.submit(new Runnable() {
/** * invoked by program */ public static void resetCurrent() { QueryContext queryContext = CURRENT_CTX.get(); if (queryContext != null) { RUNNING_CTX_MAP.remove(queryContext.getQueryId()); CURRENT_CTX.remove(); } }
/** * @param runningTime in milliseconds * @return running queries that have run more than specified time */ public static TreeSet<QueryContext> getLongRunningQueries(long runningTime) { SortedSet<QueryContext> allRunningQueries = getAllRunningQueries(); QueryContext tmpCtx = new QueryContext(runningTime + 1L); // plus 1 to include those contexts in same accumulatedMills but different uuid return (TreeSet<QueryContext>) allRunningQueries.headSet(tmpCtx); } }
public OLAPQuery(DataContext optiqContext, EnumeratorTypeEnum type, int ctxId) { this.optiqContext = optiqContext; this.type = type; this.contextId = ctxId; QueryContextFacade.current().addContext(ctxId, type.toString(), type == EnumeratorTypeEnum.OLAP); }
final SegmentQueryResult.Builder segmentQueryResultBuilder, final String segmentQueryCacheKey) { final String queryId = queryContext.getQueryId(); queryContext.stop(ex); if (queryContext.isStopped()) { logger.error(logHeader + "Error when visiting cubes by endpoint", queryContext.getThrowable()); // double log coz the query thread may already timeout
if (querySegmentCacheEnabled) { try { logger.info("Query-{}: try to get segment result from cache for segment:{}", queryContext.getQueryId(), cubeSeg); calculatedSegmentQueryCacheKey = getSegmentQueryCacheKey(scanRequest); if (segmentResult == null) { logger.info("Query-{}: no segment result is cached for segment:{}, take time:{}ms", queryContext.getQueryId(), cubeSeg, spendTime); } else { logger.info("Query-{}: get segment result from cache for segment:{}, take time:{}ms", queryContext.getQueryId(), cubeSeg, spendTime); if (segmentResult.getCubeSegmentStatisticsBytes() != null) { queryContext.addCubeSegmentStatistics(storageContext.ctxId, (CubeSegmentStatistics) SerializationUtils .deserialize(segmentResult.getCubeSegmentStatisticsBytes())); final String queryId = queryContext.getQueryId(); if (queryId != null) { builder.setQueryId(queryId); queryContext.getQueryId(), Integer.toHexString(System.identityHashCode(scanRequest))); for (final Pair<byte[], byte[]> epRange : getEPKeyRanges(cuboidBaseShard, shardNum, totalShards)) { executorService.submit(new Runnable() {
/** * invoked by program */ public static void resetCurrent() { QueryContext queryContext = CURRENT_CTX.get(); if (queryContext != null) { RUNNING_CTX_MAP.remove(queryContext.getQueryId()); CURRENT_CTX.remove(); } }
@Override public void close() throws IOException { queryContext.addAndGetScannedRows(scannedRows); queryContext.addAndGetScannedBytes(scannedBytes); for (ResultScanner scanner : scanners) { scanner.close(); } hbaseTable.close(); }
/** * @param runningTime in milliseconds * @return running queries that have run more than specified time */ public static TreeSet<QueryContext> getLongRunningQueries(long runningTime) { SortedSet<QueryContext> allRunningQueries = getAllRunningQueries(); QueryContext tmpCtx = new QueryContext(runningTime + 1L); // plus 1 to include those contexts in same accumulatedMills but different uuid return (TreeSet<QueryContext>) allRunningQueries.headSet(tmpCtx); } }
public OLAPQuery(DataContext optiqContext, EnumeratorTypeEnum type, int ctxId) { this.optiqContext = optiqContext; this.type = type; this.contextId = ctxId; QueryContextFacade.current().addContext(ctxId, type.toString(), type == EnumeratorTypeEnum.OLAP); }
try (SetThreadName ignored = new SetThreadName("Query %s", queryContext.getQueryId())) { SQLResponse sqlResponse = null; String sql = sqlRequest.getSql(); sqlResponse.setDuration(queryContext.getAccumulatedMillis()); logQuery(queryContext.getQueryId(), sqlRequest, sqlResponse); try { recordMetric(sqlRequest, sqlResponse);
@Override protected QueryContext initialValue() { QueryContext queryContext = new QueryContext(); RUNNING_CTX_MAP.put(queryContext.getQueryId(), queryContext); return queryContext; } };
protected long getCoprocessorTimeoutMillis() { long coopTimeout; if (BackdoorToggles.getQueryTimeout() != -1) { coopTimeout = BackdoorToggles.getQueryTimeout(); } else { coopTimeout = cubeSeg.getConfig().getQueryCoprocessorTimeoutSeconds() * 1000L; } int rpcTimeout; Configuration hconf = HBaseConnection.getCurrentHBaseConfiguration(); rpcTimeout = hconf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT); // HBase rpc timeout must be longer than coprocessor timeout if ((int) (coopTimeout * 1.1) > rpcTimeout) { rpcTimeout = (int) (coopTimeout * 1.1); hconf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, rpcTimeout); } // coprocessor timeout is 0 by default if (coopTimeout <= 0) { coopTimeout = (long) (rpcTimeout * 0.9); } queryContext.checkMillisBeforeDeadline(); logger.debug("{} = {} ms, use {} ms as timeout for coprocessor", HConstants.HBASE_RPC_TIMEOUT_KEY, rpcTimeout, coopTimeout); return coopTimeout; }
@Override public int compare(QueryContext o1, QueryContext o2) { if (o2.getAccumulatedMillis() > o1.getAccumulatedMillis()) { return 1; } else if (o2.getAccumulatedMillis() < o1.getAccumulatedMillis()) { return -1; } else { return o1.getQueryId().compareTo(o2.getQueryId()); } } });