private boolean mustBeAfter(Class<? extends Transaction> a, Class<? extends Transaction> b,
                                List<OrderingConstraint> constraints) {
        for (OrderingConstraint fromA : findAllOrderingConstraintsFrom(a, constraints)) {
            if (fromA.after().equals(b)) return true;
            if (mustBeAfter(fromA.after(), b, constraints)) return true;
        }
        return false;
    }
Returns whether transaction type B must be after type A according to the ordering constraints.
This is the same as asking whether there is a path between node a and b in the bi-directional
graph defined by the ordering constraints.
vespajlib/src/main/java/com/yahoo/transaction/NestedTransaction.java