There's some duplicate logic here - not a cause to reject the pull - but felt it was worth pointing out. Could simply replace 373-392 and with something like:
        } catch (Exception e) {
            if (e instanceof RunNodesException) {
                RunNodesException rne = (RunNodesException) e;
                if (rne.getNodeErrors().size() > 0) {
                    node = Iterables.get(rne.getNodeErrors().keySet(), 0);
                }
            }