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