package org.infinispan.util.concurrent.locks; import org.infinispan.atomic.DeltaCompositeKey; import org.infinispan.distribution.DistributionInfo; import org.infinispan.distribution.Ownership; import org.infinispan.interceptors.locking.ClusteringDependentLogic; /** * Utility methods for locking keys. * * @author Pedro Ruivo * @since 8.0 */ public class LockUtil { private LockUtil() { } /** * It filters the {@code key} by lock ownership. * * @param key the key to check * @param clusteringDependentLogic the {@link ClusteringDependentLogic} to check the ownership of the keys. * @return the {@link Ownership}. * @throws NullPointerException if {@code clusteringDependentLogic} is {@code null}. */ public static Ownership getLockOwnership(Object key, ClusteringDependentLogic clusteringDependentLogic) { Object keyToCheck = key instanceof DeltaCompositeKey ? ((DeltaCompositeKey) key).getDeltaAwareValueKey() : key; DistributionInfo distributionInfo = clusteringDependentLogic.getCacheTopology().getDistribution(keyToCheck); return distributionInfo.writeOwnership(); } public static boolean isLockOwner(Object key, ClusteringDependentLogic clusteringDependentLogic) { Object keyToCheck = key instanceof DeltaCompositeKey ? ((DeltaCompositeKey) key).getDeltaAwareValueKey() : key; return clusteringDependentLogic.getCacheTopology().getDistribution(keyToCheck).isPrimary(); } }