View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.hadoop.hbase.master;
19  
20  import org.apache.hadoop.hbase.testclassification.MediumTests;
21  import org.apache.hadoop.hbase.ServerName;
22  import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
23  import org.apache.hadoop.hbase.util.ManualEnvironmentEdge;
24  import org.apache.hadoop.hbase.util.Pair;
25  import org.junit.Assert;
26  import org.junit.Test;
27  import org.junit.experimental.categories.Category;
28  
29  import java.util.List;
30  import java.util.Set;
31  
32  import static org.junit.Assert.assertFalse;
33  import static org.junit.Assert.assertTrue;
34  
35  @Category(MediumTests.class)
36  public class TestDeadServer {
37    final ServerName hostname123 = ServerName.valueOf("127.0.0.1", 123, 3L);
38    final ServerName hostname123_2 = ServerName.valueOf("127.0.0.1", 123, 4L);
39    final ServerName hostname1234 = ServerName.valueOf("127.0.0.2", 1234, 4L);
40    final ServerName hostname12345 = ServerName.valueOf("127.0.0.2", 12345, 4L);
41  
42    @Test public void testIsDead() {
43      DeadServer ds = new DeadServer();
44      ds.add(hostname123);
45      assertTrue(ds.areDeadServersInProgress());
46      ds.finish(hostname123);
47      assertFalse(ds.areDeadServersInProgress());
48  
49      ds.add(hostname1234);
50      assertTrue(ds.areDeadServersInProgress());
51      ds.finish(hostname1234);
52      assertFalse(ds.areDeadServersInProgress());
53  
54      ds.add(hostname12345);
55      assertTrue(ds.areDeadServersInProgress());
56      ds.finish(hostname12345);
57      assertFalse(ds.areDeadServersInProgress());
58  
59      // Already dead =       127.0.0.1,9090,112321
60      // Coming back alive =  127.0.0.1,9090,223341
61  
62      final ServerName deadServer = ServerName.valueOf("127.0.0.1", 9090, 112321L);
63      assertFalse(ds.cleanPreviousInstance(deadServer));
64      ds.add(deadServer);
65      assertTrue(ds.isDeadServer(deadServer));
66      Set<ServerName> deadServerNames = ds.copyServerNames();
67      for (ServerName eachDeadServer : deadServerNames) {
68        Assert.assertNotNull(ds.getTimeOfDeath(eachDeadServer));
69      }
70      final ServerName deadServerHostComingAlive =
71          ServerName.valueOf("127.0.0.1", 9090, 223341L);
72      assertTrue(ds.cleanPreviousInstance(deadServerHostComingAlive));
73      assertFalse(ds.isDeadServer(deadServer));
74      assertFalse(ds.cleanPreviousInstance(deadServerHostComingAlive));
75    }
76  
77  
78    @Test
79    public void testSortExtract(){
80      ManualEnvironmentEdge mee = new ManualEnvironmentEdge();
81      EnvironmentEdgeManager.injectEdge(mee);
82      mee.setValue(1);
83  
84      DeadServer d = new DeadServer();
85  
86  
87      d.add(hostname123);
88      mee.incValue(1);
89      d.add(hostname1234);
90      mee.incValue(1);
91      d.add(hostname12345);
92  
93      List<Pair<ServerName, Long>> copy = d.copyDeadServersSince(2L);
94      Assert.assertEquals(2, copy.size());
95  
96      Assert.assertEquals(hostname1234, copy.get(0).getFirst());
97      Assert.assertEquals(new Long(2L), copy.get(0).getSecond());
98  
99      Assert.assertEquals(hostname12345, copy.get(1).getFirst());
100     Assert.assertEquals(new Long(3L), copy.get(1).getSecond());
101 
102     EnvironmentEdgeManager.reset();
103   }
104 
105   @Test
106   public void testClean(){
107     DeadServer d = new DeadServer();
108     d.add(hostname123);
109 
110     d.cleanPreviousInstance(hostname12345);
111     Assert.assertFalse(d.isEmpty());
112 
113     d.cleanPreviousInstance(hostname1234);
114     Assert.assertFalse(d.isEmpty());
115 
116     d.cleanPreviousInstance(hostname123_2);
117     Assert.assertTrue(d.isEmpty());
118   }
119 
120 }
121