use of com.cubrid.cubridmanager.ui.replication.editor.model.MasterNode in project cubrid-manager by CUBRID.
the class ReplicationEditor method createReplication.
/**
* create the replication
*
* @param replicationsList List<List<Node>>
*/
private void createReplication(List<List<Node>> replicationsList) {
List<String> tempList = new ArrayList<String>();
CreateReplicationJobExecutor executor = new CreateReplicationJobExecutor(this);
for (int i = 0; i < replicationsList.size(); i++) {
List<Node> replicationList = replicationsList.get(i);
MasterNode masterDb = null;
DistributorNode distDb = null;
SlaveNode slaveDb = null;
for (int j = 0; j < replicationList.size(); j++) {
Node node = replicationList.get(j);
if (node instanceof MasterNode) {
masterDb = (MasterNode) node;
} else if (node instanceof DistributorNode) {
distDb = (DistributorNode) node;
} else if (node instanceof SlaveNode) {
slaveDb = (SlaveNode) node;
}
HostNode host = (HostNode) node.getParent();
String str = host.getIp() + ":" + host.getPort() + ":" + node.getName();
if (isExist(str, tempList)) {
continue;
}
tempList.add(str);
String errorMsg = null;
if (node instanceof MasterNode) {
errorMsg = CreateReplicationUtil.createMasterTaskGroup(masterDb, CreateReplicationUtil.getAllSlaveOfMaster((MasterNode) node, replicationsList), executor);
if (errorMsg == null) {
errorMsg = CreateReplicationUtil.createReplServerTaskGroup(masterDb, executor);
}
} else if (node instanceof DistributorNode) {
if (j > 2) {
errorMsg = CreateReplicationUtil.createDistributorTaskGroup(masterDb, slaveDb, distDb, executor);
} else {
errorMsg = CreateReplicationUtil.createDistributorTaskGroup(masterDb, distDb, executor);
}
if (errorMsg == null) {
errorMsg = CreateReplicationUtil.createAgentTaskGroup(distDb, executor);
}
} else if (node instanceof SlaveNode) {
errorMsg = CreateReplicationUtil.createSlaveTaskGroup(masterDb, distDb, slaveDb, executor);
if (j > 2 && errorMsg == null) {
errorMsg = CreateReplicationUtil.createSlaveMasterTaskGroup(masterDb, slaveDb, executor);
if (errorMsg == null) {
errorMsg = CreateReplicationUtil.createReplServerTaskGroup(masterDb, executor);
}
}
}
if (errorMsg != null) {
CommonUITool.openErrorBox(errorMsg);
isEditable = true;
setDirty(true);
return;
}
}
}
JobFamily jobFamily = new JobFamily();
jobFamily.setServerName(JobFamily.ALL_SERVER);
jobFamily.setDbName(JobFamily.ALL_DB);
executor.schedule(Messages.createReplicationJobName, jobFamily, true, Job.SHORT);
}
use of com.cubrid.cubridmanager.ui.replication.editor.model.MasterNode in project cubrid-manager by CUBRID.
the class ReplicationEditor method doSave.
/**
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
* @param monitor IProgressMonitor
*/
public void doSave(IProgressMonitor monitor) {
List<ContainerNode> hostNodeList = diagram.getChildNodeList();
int hostSize = 0;
if (hostNodeList != null) {
hostSize = hostNodeList.size();
}
//check the host number,2 at less
if (hostSize <= 1) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.errInvalidReplDesign);
monitor.setCanceled(true);
return;
}
//check the host and replication component information integrity
for (int i = 0; i < hostSize; i++) {
HostNode host = (HostNode) hostNodeList.get(i);
if (!host.isValid()) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidHost, host.getName()));
monitor.setCanceled(true);
return;
}
List<LeafNode> leafNodeList = host.getChildNodeList();
for (int j = 0; j < leafNodeList.size(); j++) {
LeafNode node = leafNodeList.get(j);
if (!node.isValid()) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidReplComponent, node.getName()));
monitor.setCanceled(true);
return;
}
}
}
//check the replication component connection validity
List<List<Node>> replicationsList = new ArrayList<List<Node>>();
for (int i = 0; i < hostSize; i++) {
HostNode host = (HostNode) hostNodeList.get(i);
List<LeafNode> leafNodeList = host.getChildNodeList();
for (int j = 0; j < leafNodeList.size(); j++) {
LeafNode node = leafNodeList.get(j);
if (node instanceof MasterNode) {
List<ArrowConnection> connList = node.getOutgoingConnections();
if (connList == null || connList.isEmpty()) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidMasterConn1, node.getName()));
monitor.setCanceled(true);
return;
} else {
for (int k = 0; k < connList.size(); k++) {
LOGGER.debug("Replication chain" + k);
LOGGER.debug(node.getName());
List<Node> replicationList = new ArrayList<Node>();
replicationList.add(node);
HostNode masterHost = (HostNode) node.getParent();
ArrowConnection conn = connList.get(k);
HostNode distHost = (HostNode) conn.getTarget().getParent();
if (masterHost.getName().equals(distHost.getName())) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidMasterConn2, new String[] { node.getName(), conn.getTarget().getName() }));
monitor.setCanceled(true);
return;
}
createReplChain(replicationList, conn);
replicationsList.add(replicationList);
}
}
} else if (node instanceof DistributorNode) {
if (node.getIncomingConnections() == null || node.getIncomingConnections().size() == 0) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidDistConn1, node.getName()));
monitor.setCanceled(true);
return;
}
if (node.getOutgoingConnections() == null || node.getOutgoingConnections().size() == 0) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidDistConn2, node.getName()));
monitor.setCanceled(true);
return;
}
} else if (node instanceof SlaveNode && (node.getIncomingConnections() == null || node.getIncomingConnections().isEmpty())) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidSlaveConn, node.getName()));
monitor.setCanceled(true);
return;
}
}
}
int count = replicationsList.size();
if (count <= 0) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.errInvalidReplDesign);
monitor.setCanceled(true);
return;
}
for (int i = 0; i < count; i++) {
List<Node> replcationlist = replicationsList.get(i);
int size = replcationlist.size();
if (size < 3) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.errInvalidReplDesign);
monitor.setCanceled(true);
return;
}
if (!(replcationlist.get(size - 1) instanceof SlaveNode)) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.errInvalidReplDesign);
monitor.setCanceled(true);
return;
}
//check the connection validity,
for (int j = 1; j + 1 < size; j++) {
Node node1 = (Node) replcationlist.get(j).getParent();
Node node2 = (Node) replcationlist.get(j + 1).getParent();
//from the slave to the distributor can not in the same host
if (j % 2 == 0) {
if (node1.getName().equals(node2.getName())) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidConn1, new String[] { node1.getName(), node2.getName() }));
monitor.setCanceled(true);
return;
}
} else {
//from the distributor to the slave must be in the same host
if (!node1.getName().equals(node2.getName())) {
CommonUITool.openErrorBox(this.getSite().getShell(), Messages.bind(Messages.errInvalidConn2, new String[] { node1.getName(), node2.getName() }));
monitor.setCanceled(true);
return;
}
}
}
}
if (!CommonUITool.openConfirmBox(Messages.msgConfirmCreateRepl)) {
return;
}
isEditable = false;
getCommandStack().flush();
setDirty(false);
createReplication(replicationsList);
}
Aggregations