1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.master;
21
22 import static org.junit.Assert.fail;
23
24 import java.net.InetAddress;
25
26 import junit.framework.Assert;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30 import org.apache.hadoop.conf.Configuration;
31 import org.apache.hadoop.hbase.*;
32 import org.apache.hadoop.hbase.catalog.CatalogTracker;
33 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
34 import org.junit.Test;
35 import org.junit.experimental.categories.Category;
36
37 @Category(MediumTests.class)
38 public class TestClockSkewDetection {
39 private static final Log LOG =
40 LogFactory.getLog(TestClockSkewDetection.class);
41
42 @Test
43 public void testClockSkewDetection() throws Exception {
44 final Configuration conf = HBaseConfiguration.create();
45 ServerManager sm = new ServerManager(new Server() {
46 @Override
47 public CatalogTracker getCatalogTracker() {
48 return null;
49 }
50
51 @Override
52 public Configuration getConfiguration() {
53 return conf;
54 }
55
56 @Override
57 public ServerName getServerName() {
58 return null;
59 }
60
61 @Override
62 public ZooKeeperWatcher getZooKeeper() {
63 return null;
64 }
65
66 @Override
67 public void abort(String why, Throwable e) {}
68
69 @Override
70 public boolean isAborted() {
71 return false;
72 }
73
74 @Override
75 public boolean isStopped() {
76 return false;
77 }
78
79 @Override
80 public void stop(String why) {
81 }}, null, false);
82
83 LOG.debug("regionServerStartup 1");
84 InetAddress ia1 = InetAddress.getLocalHost();
85 sm.regionServerStartup(ia1, 1234, -1, System.currentTimeMillis());
86
87 final Configuration c = HBaseConfiguration.create();
88 long maxSkew = c.getLong("hbase.master.maxclockskew", 30000);
89 long warningSkew = c.getLong("hbase.master.warningclockskew", 1000);
90
91 try {
92 LOG.debug("regionServerStartup 2");
93 InetAddress ia2 = InetAddress.getLocalHost();
94 sm.regionServerStartup(ia2, 1235, -1, System.currentTimeMillis() - maxSkew * 2);
95 fail("HMaster should have thrown an ClockOutOfSyncException but didn't.");
96 } catch(ClockOutOfSyncException e) {
97
98 LOG.info("Recieved expected exception: "+e);
99 }
100
101
102 LOG.debug("regionServerStartup 3");
103 InetAddress ia3 = InetAddress.getLocalHost();
104 sm.regionServerStartup(ia3, 1236, -1, System.currentTimeMillis() - warningSkew * 2);
105
106 }
107
108 @org.junit.Rule
109 public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu =
110 new org.apache.hadoop.hbase.ResourceCheckerJUnitRule();
111 }
112