OrientDB完整的嵌入式集群测试

时间:2016-02-07 21:18:57

标签: java orientdb

我正在尝试创建一个简单的测试:

  1. 激活完整服务器嵌入式实例(Embedded ServerDistributed Configuration
  2. 在首次运行(Create a Database
  3. 期间以文档模式创建初始测试数据库
  4. 打开测试数据库(Open a Database
  5. 插入样本记录
  6. 获取样本记录
  7. 添加另一个节点并重复
  8. 我可以粗略地理解单独的步骤但是我在拼凑一个简单的测试用例时遇到了一些困难。例如,API文档假定是远程连接。我不确定这是否是适用的方法,如果是,我应该指定哪个URL。

    一旦我正确完成了步骤1,2和3,我应该可以参考步骤4和5的API文档。

    作为新手用户,我发现难以在上下文中解释文档。任何帮助或澄清将不胜感激。

    我正在尝试将此测试作为jUnit测试运行。以下是我到目前为止的情况:

    public class TestOrientDb {
    private static final Logger log = Logger.getLogger(TestOrientDb.class);
    
    @Test
    public void testFullEmbeddedServer() throws Exception {
        log.debug("connectiong to database server...");
        String orientdbHome = new File("src/test/resources").getAbsolutePath(); //Set OrientDB home to current directory
    
        log.debug("the orientdb home: " + orientdbHome);
        System.setProperty("ORIENTDB_HOME", orientdbHome);
    
        OServer server = OServerMain.create();
        URL configUrl = this.getClass().getResource("/orientdb-config.xml");
        server.startup(configUrl.openStream());
        server.activate();
    
        //HOW DO I CREATE A DATABASE HERE?
    
        //HOW DO I OPEN MY DATABASE TO USE THE API LIKE THIS: http://orientdb.com/docs/last/Document-Database.html
    
        //SHOULD I PAUSE THE THREAD TO KEEP THE SERVER ACTIVE?
        log.debug("shutting down orientdb...");
        server.shutdown();
    }}
    

    这是orientdb-config.xml:

    <orient-server>
    <users>
        <user name="root" password="password" resources="*"/>
    </users>
    <properties>
        <entry value="/etc/kwcn/databases" name="server.database.path"/>
        <entry name="log.console.level" value="fine"/>
    </properties>
    <handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
        <parameters>
            <!-- NODE-NAME. IF NOT SET IS AUTO GENERATED THE FIRST TIME THE SERVER RUN -->
            <!-- <parameter name="nodeName" value="europe1" /> -->
            <parameter name="enabled" value="true"/>
            <parameter name="configuration.db.default" value="${ORIENTDB_HOME}/orientdb-config.json"/>
            <parameter name="configuration.hazelcast" value="${ORIENTDB_HOME}/hazelcast.xml"/>
        </parameters>
    </handler>
    

    这是hazelcast.xml:

    <hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.0.xsd"
           xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <group>
        <name>orientdb</name>
        <password>orientdb</password>
    </group>
    <network>
        <port auto-increment="true">2434</port>
        <join>
            <multicast enabled="true">
                <multicast-group>235.1.1.1</multicast-group>
                <multicast-port>2434</multicast-port>
            </multicast>
        </join>
    </network>
    <executor-service>
        <pool-size>16</pool-size>
    </executor-service>
    

    这是orientdb-config.json:

    { "autoDeploy": true, "hotAlignment": false, "executionMode": "asynchronous", "readQuorum": 1, "writeQuorum": 2, "failureAvailableNodesLessQuorum": false, "readYourWrites": true, "servers": { "*": "master" }, "clusters": { "internal": { }, "index": { }, "*": { "servers": [ "<NEW_NODE>" ] } } }
    

    这是输出:

      2016-02-07 16:02:17:867 INFO OrientDB auto-config DISKCACHE=10,695MB (heap=3,641MB os=16,384MB disk=71,698MB) [orientechnologies] 2016-02-07 16:02:18:016 INFO Loading configuration from input stream [OServerConfigurationLoaderXml] 2016-02-07 16:02:18:127
      INFO OrientDB Server v2.2.0-beta is starting up... [OServer] 2016-02-07 16:02:18:133 INFO Databases directory: /etc/kwcn/databases [OServer] 2016-02-07 16:02:18:133 WARNI Network configuration was not found [OServer] 2016-02-07 16:02:18:133 WARNI Found
      ORIENTDB_ROOT_PASSWORD variable, using this value as root's password [OServer] 2016-02-07 16:02:18:523 INFO OrientDB Server is active v2.2.0-beta. [OServer] 2016-02-07 16:02:18:523 INFO OrientDB Server is shutting down... [OServer] 2016-02-07 16:02:18:523
      INFO Shutting down plugins: [OServerPluginManager] DEBUG [ kwcn.TestOrientDb]: shutting down orientdb... 2016-02-07 16:02:18:524 INFO Shutting down databases: [OServer] 2016-02-07 16:02:18:565 INFO OrientDB Engine shutdown complete [Orient] 2016-02-07
      16:02:18:566 INFO OrientDB Server shutdown complete

1 个答案:

答案 0 :(得分:1)

我建议你看看

https://github.com/orientechnologies/orientdb/blob/2.1.x/distributed/src/test/java/com/orientechnologies/orient/server/distributed/AbstractServerClusterTest.java

它是OrientDB分布式测试的基类。它的类层次结构看起来相当复杂,但最后它只是实例化多个服务器并委托子类来测试对它们的操作。

您也可以查看

https://github.com/orientechnologies/orientdb/blob/2.1.x/distributed/src/test/java/com/orientechnologies/orient/server/distributed/HATest.java

这是它的子类之一。实际上你可以复制或扩展它并在executeTest()方法中实现你自己的逻辑。

关于您的问题:

我如何在这里创建一个数据库?

作为一个普通的本地数据库:

new ODatabaseDocumentTx("plocal:...").open("admin", "admin");

rdd.mapPartitions(new scala.util.Random().shuffle(_))

//我如何打开我的数据库以使用这样的API:

与上述相同:

rdd.mapPartitions(iter => {
  val rng = new scala.util.Random()
  iter.map((rng.nextInt, _))
}).partitionBy(new HashPartitioner(rdd.partitions.size)).values

//我应该暂停线程以保持服务器活动吗?

没有必要暂停线程,服务器会创建一些非守护程序线程,因此它将保持活动状态。只要确保某人在测试结束时调用server.shutdown()(甚至从另一个线程)