private Hop getRecipient(RoutingContext ctx) {
        Hop hop = null;
        if (subsetSize > 0) {
            synchronized (this) {
                CacheEntry entry = update(ctx);
                if (!entry.recipients.isEmpty()) {
                    if (++entry.offset >= entry.recipients.size()) {
                        entry.offset = 0;
                    }
                    hop = new Hop(entry.recipients.get(entry.offset));
                }
            }
        }
        if (hop == null) {
            hop = new Hop(ctx.getRoute().getHop(0));
            hop.setDirective(ctx.getDirectiveIndex(), new VerbatimDirective("*"));
        }
        return hop;
    }
Returns the appropriate recipient hop for the given routing context. This method provides synchronized access to
the internal cache.

@param ctx The routing context.
@return The recipient hop to use.
documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SubsetServicePolicy.java