|
19 | 19 | package com.senseidb.test;
|
20 | 20 |
|
21 | 21 | import java.io.File;
|
| 22 | +import java.io.IOException; |
| 23 | +import java.net.InetAddress; |
| 24 | +import java.net.InetSocketAddress; |
22 | 25 | import java.net.URL;
|
23 | 26 |
|
24 | 27 | import javax.management.InstanceAlreadyExistsException;
|
25 | 28 |
|
26 | 29 | import com.senseidb.indexing.activity.facet.ActivityRangeFacetHandler;
|
27 | 30 | import org.apache.log4j.Logger;
|
| 31 | +import org.apache.zookeeper.server.NIOServerCnxn; |
| 32 | +import org.apache.zookeeper.server.ZooKeeperServer; |
| 33 | +import org.apache.zookeeper.server.persistence.FileTxnSnapLog; |
28 | 34 | import org.mortbay.jetty.Server;
|
29 | 35 | import org.springframework.context.ApplicationContext;
|
30 | 36 | import org.springframework.context.support.ClassPathXmlApplicationContext;
|
@@ -68,68 +74,76 @@ public class SenseiStarter {
|
68 | 74 | public static SenseiRequestScatterRewriter requestRewriter;
|
69 | 75 | public static NetworkServer networkServer1;
|
70 | 76 | public static NetworkServer networkServer2;
|
71 |
| - public static final String SENSEI_TEST_CONF_FILE="sensei-test.spring"; |
72 | 77 | public static SenseiZoieFactory<?> _zoieFactory;
|
73 | 78 | public static boolean started = false;
|
| 79 | + public static URL federatedBrokerUrl; |
74 | 80 |
|
75 |
| - public static URL federatedBrokerUrl; |
| 81 | + private static TestZkServer zkServer = new TestZkServer(); |
76 | 82 |
|
77 | 83 |
|
78 | 84 | /**
|
79 | 85 | * Will start the new Sensei instance once per process
|
80 | 86 | */
|
81 | 87 | public static synchronized void start(String confDir1, String confDir2) {
|
| 88 | + try { |
| 89 | + zkServer.start(); |
| 90 | + } catch (Exception ex) { |
| 91 | + logger.error("Failed to start zookeeper", ex); |
| 92 | + return; |
| 93 | + } |
| 94 | + |
82 | 95 | ActivityRangeFacetHandler.isSynchronized = true;
|
83 | 96 | if (started) {
|
84 | 97 | logger.warn("The server had been already started");
|
85 | 98 | return;
|
86 | 99 | }
|
87 | 100 | try {
|
88 | 101 | JmxSenseiMBeanServer.registerCustomMBeanServer();
|
89 |
| - ConfDir1 = new File(SenseiStarter.class.getClassLoader().getResource(confDir1).toURI()); |
90 |
| - |
91 |
| - ConfDir2 = new File(SenseiStarter.class.getClassLoader().getResource(confDir2).toURI()); |
92 |
| - org.apache.log4j.PropertyConfigurator.configure("resources/log4j.properties"); |
93 |
| - loadFromSpringContext(); |
94 |
| - boolean removeSuccessful = rmrf(IndexDir); |
95 |
| - if (!removeSuccessful) { |
96 |
| - throw new IllegalStateException("The index dir " + IndexDir + " coulnd't be purged"); |
97 |
| - } |
98 |
| - SenseiServerBuilder senseiServerBuilder1 = null; |
99 |
| - senseiServerBuilder1 = new SenseiServerBuilder(ConfDir1, null); |
100 |
| - node1 = senseiServerBuilder1.buildServer(); |
101 |
| - httpServer1 = senseiServerBuilder1.buildHttpRestServer(); |
102 |
| - logger.info("Node 1 created."); |
103 |
| - SenseiServerBuilder senseiServerBuilder2 = null; |
104 |
| - senseiServerBuilder2 = new SenseiServerBuilder(ConfDir2, null); |
105 |
| - node2 = senseiServerBuilder2.buildServer(); |
106 |
| - httpServer2 = senseiServerBuilder2.buildHttpRestServer(); |
107 |
| - logger.info("Node 2 created."); |
108 |
| - broker = null; |
109 |
| - try |
110 |
| - { |
111 |
| - broker = new SenseiBroker(networkClient, clusterClient, true); |
112 |
| - } catch (NorbertException ne) { |
113 |
| - logger.info("shutting down cluster...", ne); |
114 |
| - clusterClient.shutdown(); |
115 |
| - throw ne; |
116 |
| - } |
117 |
| - httpRestSenseiService = new HttpRestSenseiServiceImpl("http", "localhost", 8079, "/sensei"); |
118 |
| - logger.info("Cluster client started"); |
119 |
| - Runtime.getRuntime().addShutdownHook(new Thread(){ |
120 |
| - @Override |
121 |
| - public void run(){ |
122 |
| - shutdownSensei(); |
123 |
| - }}); |
124 |
| - node1.start(true); |
125 |
| - httpServer1.start(); |
126 |
| - logger.info("Node 1 started"); |
127 |
| - node2.start(true); |
128 |
| - httpServer2.start(); |
129 |
| - logger.info("Node 2 started"); |
130 |
| - SenseiUrl = new URL("http://localhost:8079/sensei"); |
131 |
| - federatedBrokerUrl = new URL("http://localhost:8079/sensei/federatedBroker/"); |
132 |
| - waitTillServerStarts(); |
| 102 | + ConfDir1 = new File(SenseiStarter.class.getClassLoader().getResource(confDir1).toURI()); |
| 103 | + |
| 104 | + ConfDir2 = new File(SenseiStarter.class.getClassLoader().getResource(confDir2).toURI()); |
| 105 | + org.apache.log4j.PropertyConfigurator.configure("resources/log4j.properties"); |
| 106 | + loadFromSpringContext(); |
| 107 | + boolean removeSuccessful = rmrf(IndexDir); |
| 108 | + if (!removeSuccessful) { |
| 109 | + throw new IllegalStateException("The index dir " + IndexDir + " coulnd't be purged"); |
| 110 | + } |
| 111 | + SenseiServerBuilder senseiServerBuilder1 = null; |
| 112 | + senseiServerBuilder1 = new SenseiServerBuilder(ConfDir1, null); |
| 113 | + node1 = senseiServerBuilder1.buildServer(); |
| 114 | + httpServer1 = senseiServerBuilder1.buildHttpRestServer(); |
| 115 | + logger.info("Node 1 created."); |
| 116 | + SenseiServerBuilder senseiServerBuilder2 = null; |
| 117 | + senseiServerBuilder2 = new SenseiServerBuilder(ConfDir2, null); |
| 118 | + node2 = senseiServerBuilder2.buildServer(); |
| 119 | + httpServer2 = senseiServerBuilder2.buildHttpRestServer(); |
| 120 | + logger.info("Node 2 created."); |
| 121 | + broker = null; |
| 122 | + try |
| 123 | + { |
| 124 | + broker = new SenseiBroker(networkClient, clusterClient, true); |
| 125 | + } catch (NorbertException ne) { |
| 126 | + logger.info("shutting down cluster...", ne); |
| 127 | + clusterClient.shutdown(); |
| 128 | + throw ne; |
| 129 | + } |
| 130 | + httpRestSenseiService = new HttpRestSenseiServiceImpl("http", "localhost", 8079, "/sensei"); |
| 131 | + logger.info("Cluster client started"); |
| 132 | + Runtime.getRuntime().addShutdownHook(new Thread(){ |
| 133 | + @Override |
| 134 | + public void run(){ |
| 135 | + shutdownSensei(); |
| 136 | + }}); |
| 137 | + node1.start(true); |
| 138 | + httpServer1.start(); |
| 139 | + logger.info("Node 1 started"); |
| 140 | + node2.start(true); |
| 141 | + httpServer2.start(); |
| 142 | + logger.info("Node 2 started"); |
| 143 | + SenseiUrl = new URL("http://localhost:8079/sensei"); |
| 144 | + federatedBrokerUrl = new URL("http://localhost:8079/sensei/federatedBroker/"); |
| 145 | + |
| 146 | + waitTillServerStarts(); |
133 | 147 | } catch (Throwable ex) {
|
134 | 148 | logger.error("Could not start the sensei", ex);
|
135 | 149 | throw new RuntimeException(ex);
|
@@ -198,6 +212,7 @@ private static void shutdownSensei() {
|
198 | 212 | try{networkClient.shutdown();}catch(Throwable t){}
|
199 | 213 | try{clusterClient.shutdown();}catch(Throwable t){}
|
200 | 214 | rmrf(IndexDir);
|
| 215 | + zkServer.stop(); |
201 | 216 | }
|
202 | 217 |
|
203 | 218 | }
|
0 commit comments