public void executeQuery(CompiledQuery query, CompiledQueryMix queryMix) { double timeInSeconds; String queryString = query.getQueryString(); String parametrizedQueryString = query.getParametrizedQueryString(); String encodedParamString = query.getEncodedParamString(); byte queryType = query.getQueryType(); int queryNr = query.getNr(); NetQuery qe; if (query.source.isParametrized) qe = new NetQuery( serverURL, parametrizedQueryString, encodedParamString, queryType, defaultGraph, timeout); else qe = new NetQuery(serverURL, queryString, "", queryType, defaultGraph, timeout); int queryMixRun = queryMix.getRun() + 1; InputStream is = qe.exec(); if (is == null) { // then Timeout! double t = this.timeout / 1000.0; System.out.println("Query " + queryNr + ": " + t + " seconds timeout!"); queryMix.reportTimeOut(); // inc. timeout counter queryMix.setCurrent(0, t); qe.close(); return; } int resultCount = 0; try { // Write XML result into result if (queryType == Query.SELECT_TYPE) resultCount = countResults(is); else resultCount = countBytes(is); timeInSeconds = qe.getExecutionTimeInSeconds(); } catch (SocketTimeoutException e) { double t = this.timeout / 1000.0; System.out.println("Query " + queryNr + ": " + t + " seconds timeout!"); queryMix.reportTimeOut(); // inc. timeout counter queryMix.setCurrent(0, t); qe.close(); return; } if (logger.isEnabledFor(Level.ALL) && queryMixRun > 0) logResultInfo(queryNr, queryMixRun, timeInSeconds, queryString, queryType, resultCount); queryMix.setCurrent(resultCount, timeInSeconds); qe.close(); }
public void run() { queryMix = new CompiledQueryMix(maxQuery); while (!Thread.interrupted()) { boolean inWarmup; boolean inRun; boolean gotNew; synchronized (manager) { gotNew = pool.getNextQueryMix(queryMix); inWarmup = manager.isWarmupPhase(); inRun = manager.isRunPhase(); } if (interrupted()) { System.err.println("Thread interrupted. Quitting..."); return; } // Either the warmup querymixes or the run querymixes ended if (!gotNew) { try { if (inWarmup) { // finish work for warmup if (!finishedWarmup) { manager.finishWarmup(this); finishedWarmup = true; } sleep(20); // still warmup, but no querymix, so wait and try again continue; } else if (!inRun) { sleep(20); // Run phase didn't start yet, so sleep continue; } else { // The run ended, report results, if there are any manager.finishRun(this); return; // And end Thread } } catch (InterruptedException e) { System.err.println("Thread interrupted. Quitting..."); conn.close(); return; } } else { // else run the Querymix Long startTime = System.nanoTime(); while (queryMix.hasNext()) { CompiledQuery next = queryMix.getNext(); if (manager.ignoreQueries[next.getNr() - 1]) queryMix.setCurrent(0, -1.0); else { conn.executeQuery(next, queryMix); } } System.out.println( "Thread " + nr + ": query mix " + queryMix.getRun() + ": " + String.format(Locale.US, "%.2f", queryMix.getQueryMixRuntime() * 1000) + "ms, total: " + String.format( Locale.US, "%.2f", (System.nanoTime() - startTime) / (double) 1000000) + "ms"); queryMix.finishRun(); } } }