@Override public void cancelRequest(String sessionId, long executionId) throws AdminException { try { this.dqp.cancelRequest(sessionId, executionId); } catch (TeiidComponentException e) { throw new AdminProcessingException(e); } }
@Override public ResultsFuture<ResultsMessage> executeRequest(long reqID,RequestMessage requestMsg) throws TeiidProcessingException { return executeRequest(reqID, requestMsg, null); }
/** * Return a list of {@link RequestMetadata} for the given session */ public List<RequestMetadata> getRequestsForSession(String sessionId) { ClientState state = getClientState(sessionId, false); if (state == null) { return Collections.emptyList(); } return buildRequestInfos(state.getRequests(), -1); }
void removeRequest(final RequestWorkItem workItem) { finishProcessing(workItem); this.requests.remove(workItem.requestID); ClientState state = getClientState(workItem.getDqpWorkContext().getSessionId(), false); if (state != null) { state.removeRequest(workItem.requestID); } }
public ResultsFuture<ResultsMessage> executeRequest(long reqID,RequestMessage requestMsg, Long queryTimeout) throws TeiidProcessingException { DQPWorkContext workContext = DQPWorkContext.getWorkContext(); checkActive(workContext); RequestID requestID = workContext.getRequestID(reqID); requestMsg.setFetchSize(Math.min(requestMsg.getFetchSize(), this.config.getMaxRowsFetchSize())); request = new Request(); ClientState state = this.getClientState(workContext.getSessionId(), true); if (state.session == null) { state.session = workContext.getSession(); request.setPreParser(this.config.getPreParser()); request.setUserRequestConcurrency(this.getUserRequestSourceConcurrency()); ResultsFuture<ResultsMessage> resultsFuture = new ResultsFuture<ResultsMessage>(); final RequestWorkItem workItem = new RequestWorkItem(this, requestMsg, request, resultsFuture.getResultsReceiver(), requestID, workContext); logMMCommand(workItem, Event.NEW, null, null); addRequest(requestID, workItem, state); long timeout = workContext.getVDB().getQueryTimeout(); timeout = Math.min(timeout>0?timeout:Long.MAX_VALUE, config.getQueryTimeout()>0?config.getQueryTimeout():Long.MAX_VALUE); synchronized (waitingPlans) { if (runInThread || currentlyActivePlans <= maxActivePlans) { startActivePlan(workItem, !runInThread); } else { if (LogManager.isMessageToBeRecorded(LogConstants.CTX_DQP, MessageLevel.DETAIL)) {
bm.setInlineLobs(false); FakeBufferService bs = new FakeBufferService(bm, bm); core = new DQPCore(); core.setBufferManager(bs.getBufferManager()); core.setResultsetCache(new SessionAwareCache<CachedResults>("resultset", new DefaultCacheFactory(new CacheConfiguration()), SessionAwareCache.Type.RESULTSET, 0)); core.setPreparedPlanCache(new SessionAwareCache<PreparedPlan>("preparedplan", new DefaultCacheFactory(new CacheConfiguration()), SessionAwareCache.Type.PREPAREDPLAN, 0)); core.setTransactionService(new FakeTransactionService()); daa.setPolicyDecider(new DataRolePolicyDecider()); config.setAuthorizationValidator(daa); core.start(config); core.getPrepPlanCache().setModTime(1); core.getRsCache().setTupleBufferCache(bs.getBufferManager());
@Test public void testBufferReuse() throws Exception { //the sql should return 100 rows String sql = "SELECT A.IntKey FROM BQT1.SmallA as A, BQT1.SmallA as B ORDER BY A.IntKey"; //$NON-NLS-1$ String userName = "1"; //$NON-NLS-1$ String sessionid = "1"; //$NON-NLS-1$ RequestMessage reqMsg = exampleRequestMessage(sql); reqMsg.setCursorType(ResultSet.TYPE_FORWARD_ONLY); DQPWorkContext.getWorkContext().getSession().setSessionId(sessionid); DQPWorkContext.getWorkContext().getSession().setUserName(userName); ((BufferManagerImpl)core.getBufferManager()).setProcessorBatchSize(1); Future<ResultsMessage> message = core.executeRequest(reqMsg.getExecutionId(), reqMsg); ResultsMessage rm = message.get(500000, TimeUnit.MILLISECONDS); assertNull(rm.getException()); assertEquals(8, rm.getResultsList().size()); RequestWorkItem item = core.getRequestWorkItem(DQPWorkContext.getWorkContext().getRequestID(reqMsg.getExecutionId())); assertEquals(100, item.resultsBuffer.getRowCount()); }
DQPWorkContext.getWorkContext().getSession().setSessionId(sessionid); DQPWorkContext.getWorkContext().getSession().setUserName(userName); ((BufferManagerImpl)core.getBufferManager()).setProcessorBatchSize(1); Future<ResultsMessage> message = core.executeRequest(reqMsg.getExecutionId(), reqMsg); ResultsMessage rm = message.get(500000, TimeUnit.MILLISECONDS); assertNull(rm.getException()); RequestWorkItem item = core.getRequestWorkItem(DQPWorkContext.getWorkContext().getRequestID(reqMsg.getExecutionId())); message = core.processCursorRequest(reqMsg.getExecutionId(), 9, rowsPerBatch); rm = message.get(500000, TimeUnit.MILLISECONDS); assertNull(rm.getException()); item = core.getRequestWorkItem(DQPWorkContext.getWorkContext().getRequestID(reqMsg.getExecutionId())); message = core.processCursorRequest(reqMsg.getExecutionId(), start, rowsPerBatch); rm = message.get(5000, TimeUnit.MILLISECONDS); assertNull(rm.getException()); message = core.executeRequest(reqMsg.getExecutionId(), reqMsg); rm = message.get(500000, TimeUnit.MILLISECONDS); assertNull(rm.getException()); item = core.getRequestWorkItem(DQPWorkContext.getWorkContext().getRequestID(reqMsg.getExecutionId())); message = core.processCursorRequest(reqMsg.getExecutionId(), 9, rowsPerBatch); rm = message.get(500000, TimeUnit.MILLISECONDS); assertNull(rm.getException());
<T> FutureWork<T> addWork(Callable<T> callable, CompletionListener<T> listener, int priority) { FutureWork<T> work = new FutureWork<T>(callable, priority); work.setRequestId(this.requestID.toString()); WorkWrapper<T> wl = new WorkWrapper<T>(work); work.addCompletionListener(wl); work.addCompletionListener(listener); synchronized (queue) { if (totalThreads < dqpCore.getUserRequestSourceConcurrency()) { dqpCore.addWork(work); totalThreads++; wl.submitted = true; } else { queue.add(wl); LogManager.logDetail(LogConstants.CTX_DQP, this.requestID, " reached max source concurrency of ", dqpCore.getUserRequestSourceConcurrency()); //$NON-NLS-1$ } } return work; }
private AtomicRequestMessage createRequest(RequestWorkItem workItem, Command command, String modelName, String connectorBindingId, int nodeID) throws TeiidComponentException { RequestMessage request = workItem.requestMsg; // build the atomic request based on original request + context info AtomicRequestMessage aqr = new AtomicRequestMessage(request, workItem.getDqpWorkContext(), nodeID); aqr.setCommand(command); aqr.setModelName(modelName); aqr.setMaxResultRows(requestMgr.getMaxSourceRows()); aqr.setExceptionOnMaxRows(requestMgr.isExceptionOnMaxSourceRows()); aqr.setPartialResults(request.supportsPartialResults()); aqr.setSerial(requestMgr.getUserRequestSourceConcurrency() == 1); aqr.setTransactionContext(workItem.getTransactionContext()); aqr.setBufferManager(this.getBufferManager()); if (connectorBindingId == null) { VDBMetaData vdb = workItem.getDqpWorkContext().getVDB(); ModelMetaData model = vdb.getModel(modelName); List<String> bindings = model.getSourceNames(); if (bindings == null || bindings.size() != 1) { // this should not happen, but it did occur when setting up the SystemAdmin models throw new TeiidComponentException(QueryPlugin.Event.TEIID30554, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30554, modelName, workItem.getDqpWorkContext().getVdbName(), workItem.getDqpWorkContext().getVdbVersion())); } connectorBindingId = bindings.get(0); Assertion.isNotNull(connectorBindingId, "could not obtain connector id"); //$NON-NLS-1$ } aqr.setConnectorName(connectorBindingId); return aqr; }
@Test public void testUsingFinalBuffer() throws Exception { String sql = "select intkey from bqt1.smalla order by intkey"; ((BufferManagerImpl)core.getBufferManager()).setProcessorBatchSize(2); agds.sleep = 50; RequestMessage reqMsg = exampleRequestMessage(sql); Future<ResultsMessage> message = core.executeRequest(reqMsg.getExecutionId(), reqMsg); ResultsMessage rm = message.get(500000, TimeUnit.MILLISECONDS); assertNull(rm.getException()); assertEquals(10, rm.getResultsList().size()); message = core.processCursorRequest(reqMsg.getExecutionId(), 3, 2); rm = message.get(500000, TimeUnit.MILLISECONDS); assertNull(rm.getException()); assertEquals(2, rm.getResultsList().size()); }
public SessionAwareCache<CachedResults> getRsCache() { return dqpCore.getRsCache(); }
workItem = requestManager.getRequestWorkItem(requestID); } catch (TeiidProcessingException e) { if (preparedSql == null) { ClientState state = requestManager.getClientState(workContext.getSessionId(), false); if (state != null) { tempTableStore = state.sessionTables;
protected void processNew() throws TeiidProcessingException, TeiidComponentException { planningStart = System.currentTimeMillis(); SessionAwareCache<CachedResults> rsCache = dqpCore.getRsCache(); processor = request.processor; planningEnd = System.currentTimeMillis(); this.dqpCore.logMMCommand(this, Event.PLAN, null, null); collector = new BatchCollector(processor, processor.getBufferManager(), this.request.context, isForwardOnly()) {
private ResultsMessage execute(String userName, int sessionid, RequestMessage reqMsg) throws InterruptedException, ExecutionException, TimeoutException, TeiidProcessingException { DQPWorkContext.getWorkContext().getSession().setSessionId(String.valueOf(sessionid)); DQPWorkContext.getWorkContext().getSession().setUserName(userName); Future<ResultsMessage> message = core.executeRequest(reqMsg.getExecutionId(), reqMsg); assertNotNull(core.getClientState(String.valueOf(sessionid), false)); ResultsMessage results = message.get(500000, TimeUnit.MILLISECONDS); return results; } }
@Override public void finishedDeployment(String name, CompositeVDB vdb) { if (!vdb.getVDB().getStatus().equals(Status.ACTIVE)) { return; } GlobalTableStore gts = CompositeGlobalTableStore.createInstance(vdb, dqp.getBufferManager(), replicator); vdb.getVDB().addAttchment(GlobalTableStore.class, gts); }
@Override protected void resumeProcessing() { if (!this.useCallingThread) { dqpCore.addWork(this); } }
public ResultsFuture<ResultsMessage> processCursorRequest(long reqID, int batchFirst, int fetchSize) throws TeiidProcessingException { if (LogManager.isMessageToBeRecorded(LogConstants.CTX_DQP, MessageLevel.DETAIL)) { LogManager.logDetail(LogConstants.CTX_DQP, "DQP process cursor request", batchFirst, fetchSize); //$NON-NLS-1$ } DQPWorkContext workContext = DQPWorkContext.getWorkContext(); ResultsFuture<ResultsMessage> resultsFuture = new ResultsFuture<ResultsMessage>(); RequestWorkItem workItem = getRequestWorkItem(workContext.getRequestID(reqID)); workItem.requestMore(batchFirst, batchFirst + Math.min(fetchSize, this.config.getMaxRowsFetchSize()) - 1, resultsFuture.getResultsReceiver()); return resultsFuture; }
static RequestWorkItem addRequest(DQPCore rm, RequestMessage requestMsg, RequestID id, Command originalCommand, DQPWorkContext workContext) { if (workContext == null) { workContext = new DQPWorkContext(); workContext.getSession().setSessionId(id.getConnectionID()); workContext.getSession().setUserName("foo"); //$NON-NLS-1$ } RequestWorkItem workItem = new RequestWorkItem(rm, requestMsg, null, null, id, workContext); workItem.setOriginalCommand(originalCommand); ClientState state = rm.getClientState(id.getConnectionID(), true); rm.addRequest(id, workItem, state); return workItem; }
private ResultsMessage helpExecute(String sql, String userName, int sessionid, boolean txnAutoWrap) throws Exception { RequestMessage reqMsg = exampleRequestMessage(sql); if (txnAutoWrap) { reqMsg.setTxnAutoWrapMode(RequestMessage.TXN_WRAP_ON); } ResultsMessage results = execute(userName, sessionid, reqMsg); core.terminateSession(String.valueOf(sessionid)); assertNull(core.getClientState(String.valueOf(sessionid), false)); if (results.getException() != null) { throw results.getException(); } return results; }