Esempio n. 1
0
  public void driverFinished(DriverContext driverContext) {
    checkNotNull(driverContext, "driverContext is null");

    if (!drivers.remove(driverContext)) {
      throw new IllegalArgumentException("Unknown driver " + driverContext);
    }

    DriverStats driverStats = driverContext.getDriverStats();

    completedDrivers.getAndIncrement();

    // remove the memory reservation
    memoryReservation.getAndAdd(-driverStats.getMemoryReservation().toBytes());

    queuedTime.add(driverStats.getQueuedTime().roundTo(NANOSECONDS));
    elapsedTime.add(driverStats.getElapsedTime().roundTo(NANOSECONDS));

    totalScheduledTime.getAndAdd(driverStats.getTotalScheduledTime().roundTo(NANOSECONDS));
    totalCpuTime.getAndAdd(driverStats.getTotalCpuTime().roundTo(NANOSECONDS));
    totalUserTime.getAndAdd(driverStats.getTotalUserTime().roundTo(NANOSECONDS));

    totalBlockedTime.getAndAdd(driverStats.getTotalBlockedTime().roundTo(NANOSECONDS));

    // merge the operator stats into the operator summary
    List<OperatorStats> operators = driverStats.getOperatorStats();
    for (OperatorStats operator : operators) {
      // TODO: replace with ConcurrentMap.compute() when we migrate to java 8
      OperatorStats updated;
      OperatorStats current;
      do {
        current = operatorSummaries.get(operator.getOperatorId());
        if (current != null) {
          updated = current.add(operator);
        } else {
          updated = operator;
        }
      } while (!compareAndSet(operatorSummaries, operator.getOperatorId(), current, updated));
    }

    rawInputDataSize.update(driverStats.getRawInputDataSize().toBytes());
    rawInputPositions.update(driverStats.getRawInputPositions());

    processedInputDataSize.update(driverStats.getProcessedInputDataSize().toBytes());
    processedInputPositions.update(driverStats.getProcessedInputPositions());

    outputDataSize.update(driverStats.getOutputDataSize().toBytes());
    outputPositions.update(driverStats.getOutputPositions());
  }