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();
  }
Exemplo n.º 2
0
  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();
      }
    }
  }