package org.infinispan.distribution;
import java.util.Collection;
import java.util.List;
import org.infinispan.remoting.transport.Address;
/**
* @author Radim Vansa
* @author Dan Berindei
* @since 9.0
*/
public class DistributionInfo {
private final int segmentId;
// The write CH always includes the read CH, and the primary owner is always in the read CH
private final Address primary;
private final List<Address> readOwners;
private final List<Address> writeOwners;
private final Collection<Address> writeBackups;
private final boolean isPrimary;
private final boolean isReadOwner;
private final boolean isWriteOwner;
private final boolean isWriteBackup;
public DistributionInfo(int segmentId, Address primary, List<Address> readOwners, List<Address> writeOwners,
Collection<Address> writeBackups, Address localAddress) {
this.segmentId = segmentId;
this.primary = primary;
this.readOwners = readOwners;
this.writeOwners = writeOwners;
this.writeBackups = writeBackups;
this.isPrimary = primary.equals(localAddress);
this.isReadOwner = readOwners.contains(localAddress);
this.isWriteOwner = writeOwners.contains(localAddress);
this.isWriteBackup = this.isWriteOwner && !this.isPrimary;
}
public int segmentId() {
return segmentId;
}
public Address primary() {
return primary;
}
public List<Address> readOwners() {
return readOwners;
}
public List<Address> writeOwners() {
return writeOwners;
}
public Collection<Address> writeBackups() {
return writeBackups;
}
public boolean isPrimary() {
return isPrimary;
}
public boolean isReadOwner() {
return isReadOwner;
}
public boolean isWriteOwner() {
return isWriteOwner;
}
public boolean isWriteBackup() {
return isWriteBackup;
}
public Ownership readOwnership() {
return isPrimary ? Ownership.PRIMARY : (isReadOwner ? Ownership.BACKUP : Ownership.NON_OWNER);
}
public Ownership writeOwnership() {
return isPrimary ? Ownership.PRIMARY : (isWriteOwner ? Ownership.BACKUP : Ownership.NON_OWNER);
}
}