package org.infinispan.server.hotrod.util; import java.util.Iterator; import org.infinispan.Cache; import org.infinispan.CacheStream; import org.infinispan.commons.util.IteratorMapper; import org.infinispan.configuration.cache.CompatibilityModeConfiguration; import org.infinispan.server.hotrod.HotRodTypeConverter; /** * @author <a href="mailto:rtsang@redhat.com">Ray Tsang</a> * @since 5.2 */ public final class BulkUtil { // The scope constants correspond to values defined in by the Hot Rod protocol spec // (http://infinispan.org/docs/9.0.x/user_guide/user_guide.html#_hot_rod_protocol_1_2) public static final int DEFAULT_SCOPE = 0; public static final int GLOBAL_SCOPE = 1; public static final int LOCAL_SCOPE = 2; public static Iterator<byte[]> getAllKeys(Cache<byte[], ?> cache, int scope) { CompatibilityModeConfiguration compatibility = cache.getCacheConfiguration().compatibility(); CacheStream stream = cache.keySet().stream(); HotRodTypeConverter converter = new HotRodTypeConverter(null); if (compatibility.enabled() && compatibility.marshaller() != null) { converter.setMarshaller(compatibility.marshaller()); } return new IteratorMapper<Object, byte[]>(stream.iterator(), k -> { if (k instanceof byte[]) { return (byte[]) k; } return (byte[]) converter.unboxKey(k); }); } }