public Object visit(ExecutionEndEvent event) {
      final MutableExecutionInfo exec = executionMap.remove(event.executionId);
      if (exec == null) {
        return missing(event);
      }
      retiredExecutionMap.put(exec.executionId, exec);
      foo(exec, event);
      foo(exec.stmt.aggExec, event);
      foo(exec.stmt.conn.aggExec, event);
      foo(server.aggExec, event);

      // Since the execution info will no longer be in the table,
      // broadcast the final info to anyone who is interested.
      RolapUtil.MONITOR_LOGGER.debug(exec.fix());
      return null;
    }
 private void foo(MutableExecutionInfo exec, CellCacheSegmentDeleteEvent event) {
   ++exec.cellCacheSegmentDeleteCount;
   exec.cellCacheSegmentCoordinateSum -= event.coordinateCount;
   switch (event.source) {
     case EXTERNAL:
       ++exec.cellCacheSegmentDeleteViaExternalCount;
       break;
   }
 }
 private void foo(MutableExecutionInfo exec, CellCacheSegmentCreateEvent event) {
   ++exec.cellCacheSegmentCreateCount;
   exec.cellCacheSegmentCoordinateSum += event.coordinateCount;
   exec.cellCacheSegmentCellCount += event.actualCellCount;
   switch (event.source) {
     case ROLLUP:
       ++exec.cellCacheSegmentCreateViaRollupCount;
       break;
     case EXTERNAL:
       ++exec.cellCacheSegmentCreateViaExternalCount;
       break;
     case SQL:
       ++exec.cellCacheSegmentCreateViaSqlCount;
       break;
     default:
       throw Util.unexpected(event.source);
   }
 }
    private void foo(MutableExecutionInfo exec, ExecutionEndEvent event) {
      // NOTE: 'exec.phaseCount += event.phaseCount' would be wrong,
      // because we have already incremented each time we got an
      // ExecutionPhaseEvent. For a similar reason, we do not update
      // exec.cellCacheHitCount etc. each phase.

      ++exec.endCount;
      ++exec.phaseCount;
      exec.cellCacheHitCount += event.cellCacheHitCount;
      exec.cellCacheMissCount += event.cellCacheMissCount;
      exec.cellCachePendingCount += event.cellCachePendingCount;
      exec.cellCacheRequestCount +=
          (event.cellCacheHitCount + event.cellCacheMissCount + event.cellCachePendingCount);
      exec.cellCacheHitCountDelta = 0;
      exec.cellCacheMissCountDelta = 0;
      exec.cellCachePendingCountDelta = 0;
    }
 private void foo(MutableExecutionInfo exec, ExecutionPhaseEvent event) {
   ++exec.phaseCount;
   exec.cellCacheHitCountDelta = event.hitCount;
   exec.cellCacheMissCountDelta = event.missCount;
   exec.cellCachePendingCountDelta = event.pendingCount;
 }