Sequoiadb 测试体验系列之六 – Java 开发3

上一篇笔记中更新了在集合中的删除,更新,查询等操作。这次尝试一下SequoiaDB的集群操作。包括复制组的创建和删除,复制组的启动和停止,在复制组中添加、删除、启动、停止节点,获取复制组中的主从节点等。

import java.util.ArrayList;
import java.util.List;

import org.bson.BSONObject;
import org.bson.BasicBSONObject;

import com.sequoiadb.base.Node.NodeStatus;
import com.sequoiadb.base.DBCursor;
import com.sequoiadb.base.Node;
import com.sequoiadb.base.ReplicaGroup;
import com.sequoiadb.base.Sequoiadb;
import com.sequoiadb.exception.BaseException;

public class BlogRG {

	static String rgName = "testRG";
	static String hostName = "sdbserver1";

	public static void main(String[] args) {

		//连接数据库
		String host = "192.168.20.46";
		String port = "11810";
		String usr = "admin";
		String password = "admin";

		Sequoiadb sdb = null;

		try {
			sdb = new Sequoiadb(host + ":" + port, usr, password);
		} catch (BaseException e) {
			e.printStackTrace();
			System.exit(1);
		}

		//打印有关复制组信息(名称、个数)
		printGroupInfo(sdb);

		//清除环境,删掉重复的复制组
		if(isGroupExist(sdb,rgName)){
			System.out.println("Removing the old replica group...");
			sdb.removeReplicaGroup(rgName);
		}

		printGroupInfo(sdb);

		//添加新复制组
		System.out.println("Adding the new replica group...");
		ReplicaGroup rg = sdb.createReplicaGroup(rgName);

		printGroupInfo(sdb);

		//打印复制组内节点信息
		System.out.println("Tere are " + rg.getNodeNum(NodeStatus.SDB_NODE_ALL) + " nodes in the group.");

		//添加三个新的节点
		Node node1 = addNode(rg,50000);
		Node node2 = addNode(rg,50010);
		Node node3 = addNode(rg,50020);

		//打印复制组内节点信息
		System.out.println("Tere are " + rg.getNodeNum(NodeStatus.SDB_NODE_ALL) + " nodes in the group.");

		//获取复制组的主从节点
		Node master = rg.getMaster();
		System.out.println("The master node is " +master.getPort());
		System.out.println("The slave node is " + rg.getSlave().getPort());

		//停止主节点
		System.out.println("stoping the master node...");
		master.stop();

		//等待主节点停止
		while(rg.getMaster().getPort() == master.getPort()){
			try{
				Thread.sleep(2000);
			} catch (Exception e){
			}
		}

		//查看新选举的主节点
		System.out.println("re-selecting the master node...");
		System.out.println("The master node is " + rg.getMaster().getPort());

	}

	private static void printGroupInfo(Sequoiadb sdb){
		ArrayList names = sdb.getReplicaGroupNames();
		int count = 0;
		System.out.print("The replica groups are ");
		for (Object name : names){
			count++;
			System.out.print((String)name + ", ");
		}
		System.out.println("\nThere are " + count + " replica groups in total.");
	}

	private static boolean isGroupExist(Sequoiadb sdb, String rgName){
		ArrayList names = sdb.getReplicaGroupNames();
		for (Object name : names){
			if(rgName.equals((String)name))
					return true;
		}
		return false;
	}

	private static Node addNode(ReplicaGroup rg, int port){
		if(rg.getNode(hostName,port)!= null)
			rg.removeNode(hostName, port, null);
		Node node = rg.createNode(hostName,port,"/opt/sequoiadb/database/test/" + port,null);
		System.out.println("starting the node " + port + "...");
		node.start();
		return node;
	}

}

上面的代码在数据库中添加新的复制组,并在新的复制组内添加三个主节点,数据组自动选举出新的主节点,停止主节点后,复制组内重新选举新的主节点。

运行以上代码后的结果是:

The replica groups are SYSCatalogGroup, datagroup, testRG,
There are 3 replica groups in total.
Removing the old replica group...
The replica groups are SYSCatalogGroup, datagroup,
There are 2 replica groups in total.
Adding the new replica group...
The replica groups are SYSCatalogGroup, datagroup, testRG,
There are 3 replica groups in total.
Tere are 0 nodes in the group.
starting the node 50000...
starting the node 50010...
starting the node 50020...
Tere are 3 nodes in the group.
The master node is 50000
The slave node is 50010
stoping the master node...
re-selecting the master node...
The master node is 50020

可以看出,程序开始运行时,数据库内有三个复制组,其中testRG是上次运行遗留下来的无用复制组,另外两个是数据库默认的两个复制组。通过removeReplicaGroup()方法删除多余的testRG复制组,之后通过createReplicaGroup()添加新的testRG复制组,并且在新建的组内通过createNode()和start()添加并启动50000,50010,50020三个新的节点。通过getMaster()和getSlave()方法获取组内的主从节点,并利用stop()停止主节点50000,主节点完全停止后,组内将重新自动选举出新的主节点50020。

运行完成后,通过shell控制台查看数据库testRG复制组的详细情况:

>rg.getDetail()
{
  "Group": [
    {
      "HostName": "sdbserver1",
      "dbpath": "/opt/sequoiadb/database/test/50000",
      "Service": [
        {
          "Type": 0,
          "Name": "50000"
        },
        {
          "Type": 1,
          "Name": "50001"
        },
        {
          "Type": 2,
          "Name": "50002"
        }
      ],
      "NodeID": 1053
    },
    {
      "HostName": "sdbserver1",
      "dbpath": "/opt/sequoiadb/database/test/50010",
      "Service": [
        {
          "Type": 0,
          "Name": "50010"
        },
        {
          "Type": 1,
          "Name": "50011"
        },
        {
          "Type": 2,
          "Name": "50012"
        }
      ],
      "NodeID": 1054
    },
    {
      "HostName": "sdbserver1",
      "dbpath": "/opt/sequoiadb/database/test/50020",
      "Service": [
        {
          "Type": 0,
          "Name": "50020"
        },
        {
          "Type": 1,
          "Name": "50021"
        },
        {
          "Type": 2,
          "Name": "50022"
        }
      ],
      "NodeID": 1055
    }
  ],
  "GroupID": 1023,
  "GroupName": "testRG",
  "PrimaryNode": 1055,
  "Role": 0,
  "Status": 0,
  "Version": 4,
  "_id": {
    "$oid": "53d9d38e14a63a88c621edd8"
  }
}
Return 1 row(s).
Takes 0.4716s.

可以看出组内有三个节点,主节点(PrimaryNode)为1055,也就是50020。

Sequoiadb 测试体验系列之六 – Java 开发3

时间: 2024-08-04 04:12:19

Sequoiadb 测试体验系列之六 – Java 开发3的相关文章

【java系列】java开发环境搭建

描述 本篇文章主要讲解基于windows 10系统搭建java开发环境,主要内容包括如下: (1)安装资料准备 (2)安装过程讲解 (3)测试是否安装成功 (4)Hello Word测试 1   安装材料准备 java开发环境搭建前,需要准备JDK和Eclipse. 1.1  JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 1.2  Eclipse 下载地址:http://www.eclips

JAVA开发工具IDEA使用体验

在完成了个人项目之后,由于我对打算对JAVA开发进行更多的尝试,我尝试了一下新的开发环境IDEA,在这里我简单的说一下使用体验. 首先IDEA是没有中文的,虽然大部分开发环境都是没有中文的,但是对比于我一直在用的netbeans的全中文操作环境还是区别很大 不过IDEA对插件的支持就完全不是netbeans可比的,相对于netbeans可怜的插件量,IDEA的插件很多,可以帮助你更简单的实现代码. 在便捷性上,IDEA的快捷键,快捷指令,代码插入等简单的功能可以免去在编写代码工程中的大量的重复工

纯 Java 开发 WebService 调用测试工具(wsCaller.jar)

注:本文来自hacpai.com:Tanken的<纯 Java 开发 WebService 调用测试工具(wsCaller.jar)>的文章 基于 Java 开发的 WebService 测试工具,不像上文的 iWallpaper.jar 只能实现在 Windows 系统下的功能,此工具发挥了 Java 跨平台的优势,亲测可在 Windows.Mac OS 及 Linux 下运行及使用.简单易用的专门用于测试 WebService 的小工具,在 2003 版 wsCaller.jar 的基础上

浅谈 什么是JAVA开发环境、测试环境及生产环境,及它的过程 (转)

从网上整理了一些回答加上个人理解. 环境分以下几种: 1.开发和配置环境:所有的开发和配置在这个环境里进行.一般情况下,只有这个环境可以改配置和进行开发,并且一般不在这个环境下创建数据.(开发环境就是每个开发人员电脑上的开发环境,只有开发人员可以配置和开发,写数据测试放在测试环境) 2.测试环境:新开发和配置通过系统传输到测试环境,进行功能测试,可以创建数据.(开发人员开发完上传到SVN,测试人员下载下来测试.我们公司测试人员不懂IDE,所以是由我们开发人员下载好,他直接通过IP地址访问来测试的

SWTBOK测试实践系列(2) --你会把开发人员提交测试的版本打回去吗?

开发人员奋斗了很多个夜晚,终于把版本提交测试了.他们可以松一口气了.但是噩耗很快传来,软件没有通过测试团队的预测试(为了保证测试进程,对开发人员提交的代码进行基本功能或业务流程的验证).开发经理老王,迅速找到负责预测试的测试经理老张. 老王说:老张啊,怎么回事?出什么问题了?我们好不容易开发完成了,你们怎么不测试还把版本打回来了? 老张说:你们提交的版本质量太差,没有我们的预测试,需要重新修改后,符合我们的要求,我们才能测试.你看看我们发现的这两个问题. 老王并没有看这两个问题,而是直接质疑老张

单例模式的几种实现--《java开发技术-在架构中体验设计模式和算法之美》

package com.doctor.java.design_pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /**  * 单例模式的几种实现--<java开发技术-在架构中体验设计模式和算法之美>  *   * @author doctor  *  * @time 2015年4月24日 下午11:11:03  */ public class SingletonPattern { /**  * @param a

SWTBOK测试实践系列(6) -- 开发人员为什么不做静态分析?

场景 某年某月某日,产品环境的2000多封自动发出的Email让我们项目组许多人的邮箱爆了.追查下来根源是一个很不起眼的缺陷.我们的程序对一个布尔值做了if(XXX = true)的判断,可来自上游系统的这个值不光是有true和false,还有空.也就是说上游系统中使用的是一个大布尔,是有true, false,null三态的,  而我们程序使用的是小布尔,只有true和false两态. 掉在大小布尔这个坑里也不是头一回了.记忆中前两年我们也掉进来过.有执著的QA一枚,翻箱倒柜地找,终于找到了当

【java开发系列】—— JDK安装

前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行java开发,是要使用JDK的,它是专门给开发人员使用的API工具包,编译器,JRE等等.而JRE是java相关的应用程序运行时所需要的环境,所以相对于JDK来说,提供的东西要少一些. 比如,我们进行开发时,要去JDK的路径下寻找相应的jar包或者lib使用它其中的函数.而我们使用的eclipse本身

[问八系列] Windows 8 开发 (6) - 使用 Windows 8 模拟器测试应用程序

今天因缘际会间,得知了 Visual Studio "11" 可以使用模拟器来测试应用程序,马上就试用了,不但简单,速度也很令人满意.而且只要一个简单的步骤,就能采用模拟器来启动自己的 Metro-style application. 在 Windows 8 中使用 Visual Studio "11" 开发 Metro-style application,最常用的测试方式应该会是直接按 F5 启动,然后用本机来测试应用程序,这是笔者之前所做的开发与测试方式,但老实