Github user zd-project commented on a diff in the pull request: https://github.com/apache/storm/pull/2764#discussion_r209059400 --- Diff: storm-server/src/main/java/org/apache/storm/daemon/nimbus/Nimbus.java --- @@ -1984,11 +2074,13 @@ private int fragmentedCpu() { Cluster cluster = new Cluster(inimbus, supervisors, topoToSchedAssignment, topologies, conf); cluster.setStatusMap(idToSchedStatus.get()); - long beforeSchedule = System.currentTimeMillis(); + schedulingStartTime.set(Time.nanoTime()); scheduler.schedule(topologies, cluster); - long scheduleTimeElapsedMs = System.currentTimeMillis() - beforeSchedule; - LOG.debug("Scheduling took {} ms for {} topologies", scheduleTimeElapsedMs, topologies.getTopologies().size()); - scheduleTopologyTimeMs.update(scheduleTimeElapsedMs); + //Will compiler optimize the order of evalutation and cause race condition? + long elapsed = -schedulingStartTime.getAndSet(null) + Time.nanoTime(); --- End diff -- Now I remembered. I did this to alter the evaluation order so that `#getAndSet` is evaluated first.
---