1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.replication.regionserver;
19
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.hadoop.conf.Configuration;
23 import org.apache.hadoop.conf.Configured;
24 import org.apache.hadoop.fs.FileSystem;
25 import org.apache.hadoop.fs.Path;
26 import org.apache.hadoop.hbase.Abortable;
27 import org.apache.hadoop.hbase.HBaseConfiguration;
28 import org.apache.hadoop.hbase.HConstants;
29 import org.apache.hadoop.hbase.Server;
30 import org.apache.hadoop.hbase.ServerName;
31 import org.apache.hadoop.hbase.catalog.CatalogTracker;
32 import org.apache.hadoop.hbase.replication.regionserver.Replication;
33 import org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager;
34 import org.apache.hadoop.hbase.util.FSUtils;
35 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
36 import org.apache.hadoop.util.Tool;
37 import org.apache.hadoop.util.ToolRunner;
38
39
40
41
42
43
44
45
46
47
48 public class ReplicationSyncUp extends Configured implements Tool {
49
50 static final Log LOG = LogFactory.getLog(ReplicationSyncUp.class.getName());
51
52 private static Configuration conf;
53
54 private static final long SLEEP_TIME = 10000;
55
56
57
58 public static void setConfigure(Configuration config) {
59 conf = config;
60 }
61
62
63
64
65
66
67 public static void main(String[] args) throws Exception {
68 if (conf == null) conf = HBaseConfiguration.create();
69 int ret = ToolRunner.run(conf, new ReplicationSyncUp(), args);
70 System.exit(ret);
71 }
72
73 @Override
74 public int run(String[] args) throws Exception {
75 Replication replication;
76 ReplicationSourceManager manager;
77 FileSystem fs;
78 Path oldLogDir, logDir, rootDir;
79 ZooKeeperWatcher zkw;
80
81 Abortable abortable = new Abortable() {
82 @Override
83 public void abort(String why, Throwable e) {
84 }
85
86 @Override
87 public boolean isAborted() {
88 return false;
89 }
90 };
91
92 zkw =
93 new ZooKeeperWatcher(conf, "syncupReplication" + System.currentTimeMillis(), abortable,
94 true);
95
96 rootDir = FSUtils.getRootDir(conf);
97 fs = FileSystem.get(conf);
98 oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);
99 logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);
100
101 System.out.println("Start Replication Server start");
102 replication = new Replication(new DummyServer(zkw), fs, logDir, oldLogDir);
103 manager = replication.getReplicationManager();
104 manager.init();
105
106 try {
107 int numberOfOldSource = 1;
108 while (numberOfOldSource > 0) {
109 Thread.sleep(SLEEP_TIME);
110 numberOfOldSource = manager.getOldSources().size();
111 }
112 } catch (InterruptedException e) {
113 System.err.println("didn't wait long enough:" + e);
114 return (-1);
115 }
116
117 manager.join();
118 zkw.close();
119
120 return (0);
121 }
122
123 static class DummyServer implements Server {
124 String hostname;
125 ZooKeeperWatcher zkw;
126
127 DummyServer(ZooKeeperWatcher zkw) {
128
129 hostname = System.currentTimeMillis() + ".SyncUpTool.replication.org";
130 this.zkw = zkw;
131 }
132
133 DummyServer(String hostname) {
134 this.hostname = hostname;
135 }
136
137 @Override
138 public Configuration getConfiguration() {
139 return conf;
140 }
141
142 @Override
143 public ZooKeeperWatcher getZooKeeper() {
144 return zkw;
145 }
146
147 @Override
148 public CatalogTracker getCatalogTracker() {
149 return null;
150 }
151
152 @Override
153 public ServerName getServerName() {
154 return ServerName.valueOf(hostname, 1234, 1L);
155 }
156
157 @Override
158 public void abort(String why, Throwable e) {
159 }
160
161 @Override
162 public boolean isAborted() {
163 return false;
164 }
165
166 @Override
167 public void stop(String why) {
168 }
169
170 @Override
171 public boolean isStopped() {
172 return false;
173 }
174 }
175 }