package com.alibaba.doris.dataserver.store.log.entry;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import com.alibaba.doris.common.util.ConcurrentHashSet;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class ClumpHeadEntry {
public ClumpHeadEntry() {
this.vnodeSet = new ConcurrentHashSet<Integer>();
this.isChanged = false;
}
public int getLogFileVersion() {
return logFileVersion;
}
public void setLogFileVersion(int logFileVersion) {
this.logFileVersion = logFileVersion;
}
public int getVnodeNum() {
return vnodeSet.size();
}
public boolean addVnode(int vnode) {
if (vnodeSet.add(new Integer(vnode))) {
isChanged = true;
return true;
}
return false;
}
public boolean removeVnode(int vnode) {
if (vnodeSet.remove(new Integer(vnode))) {
isChanged = true;
return true;
}
return false;
}
public boolean removeVnodes(List<Integer> vnodeList) {
if (vnodeList == null) {
throw new IllegalArgumentException("vnodeList is null");
}
if (vnodeSet.removeAll(vnodeList)) {
isChanged = true;
return true;
}
return false;
}
public boolean isChanged() {
return isChanged;
}
/**
* TODO: not safety, The "isChanged" variable have problem. HAHA.
*
* @param isChanged
*/
public void setChanged(boolean isChanged) {
this.isChanged = isChanged;
}
public Iterator<Integer> getVnodes() {
return vnodeSet.iterator();
}
private int logFileVersion = DEFAULT_LOGFILE_VERSION;
private Set<Integer> vnodeSet;
private volatile boolean isChanged;
private static final int DEFAULT_LOGFILE_VERSION = 1;
}