Google Caliper: не удается завершить тест (работник вышел без предоставления данных)

Когда я пытаюсь запустить метод эталонного теста с помощью Caliper, он завершается до завершения любых измерений. В отладчике я подтвердил, что Caliper дважды выполняет метод эталонного теста, когда он проходит фазу пробного запуска. Но когда он пытается запустить эксперименты, он выходит, прежде чем что-то завершить.

Метод тестирования очень прост (хотя он вызывает много другого кода приложения):

@Benchmark
public int testNewOrder(int reps) {
    OrderRequest newOrder = this.newOrder;
    for (int i = 0; i < reps; i++) {
        router.getWorker().processOrderRequest(USER_CONN_ID, newOrder, System.currentTimeMillis());
        mockFixEngineManager.clear();           
    }
    return 10;
}

Бег с --verbose не дает никакого другого выхода, который я вижу. Весь вывод:

Experiment selection: 
  Instruments:   [allocation, runtime]
  User parameters:   {}
  Virtual machines:  [default]
  Selection type:    Full cartesian product

This selection yields 2 experiments.
Starting experiment 1 of 2: {instrument=allocation, benchmarkMethod=testNewOrder, vm=default, parameters={}}… The worker exited without producing data. It has likely crashed. Run with --verbose to see any worker output.

Я работаю на Windows 7, используя JDK 1.7.0_40 (в случае, если это имеет значение). Я прогнал код Caliper через отладчик, и я вижу, что он выходит здесь:

// ExperimentingCaliperRun.java, line 384

     processFuture.addListener(new Runnable() {
        @Override public void run() {
          if (!pipeReaderFuture.isDone()) {
            // the process completed without the pipe ever being written to.  it crashed.
            // TODO(gak): get the output from the worker so we can know why it crashed
            stdout.print("The worker exited without producing data. "
                + "It has likely crashed. Run with --verbose to see any worker output.\n");
            stdout.flush();
            System.exit(1);
          }
        }
      }, MoreExecutors.sameThreadExecutor());

pipeReaderFuture.isDone() возвращает ложь Я не уверен почему. Там нет ошибок, записанных в stderr.

1 ответ

Решение

Это был выпуск суппорта №230. После того, как я опубликовал подробности ошибки, разработчики смогли опубликовать исправление. Чтобы получить исправление, вам нужно извлечь последнюю версию из репозитория Git y, чтобы получить исправление.

Другие вопросы по тегам