View Javadoc

1   /*
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  
20  package org.apache.hadoop.hbase.rest.model;
21  
22  import java.util.Iterator;
23  
24  import org.apache.hadoop.hbase.SmallTests;
25  import org.apache.hadoop.hbase.TableName;
26  import org.apache.hadoop.hbase.util.Base64;
27  import org.apache.hadoop.hbase.util.Bytes;
28  
29  import org.junit.experimental.categories.Category;
30  
31  @Category(SmallTests.class)
32  public class TestStorageClusterStatusModel extends TestModelBase<StorageClusterStatusModel> {
33  
34    public TestStorageClusterStatusModel() throws Exception {
35      super(StorageClusterStatusModel.class);
36  
37      AS_XML =
38        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
39        "<ClusterStatus averageLoad=\"1.0\" regions=\"2\" requests=\"0\">" +
40        "<DeadNodes/><LiveNodes>" +
41        "<Node heapSizeMB=\"128\" maxHeapSizeMB=\"1024\" name=\"test1\" requests=\"0\" startCode=\"1245219839331\">" +
42        "<Region currentCompactedKVs=\"1\" memstoreSizeMB=\"0\" name=\"aGJhc2U6cm9vdCwsMA==\" readRequestsCount=\"1\" " +
43        "rootIndexSizeKB=\"1\" storefileIndexSizeMB=\"0\" storefileSizeMB=\"0\" storefiles=\"1\" stores=\"1\" " +
44        "totalCompactingKVs=\"1\" totalStaticBloomSizeKB=\"1\" totalStaticIndexSizeKB=\"1\" writeRequestsCount=\"2\"/>" +
45        "</Node>" +
46        "<Node heapSizeMB=\"512\" maxHeapSizeMB=\"1024\" name=\"test2\" requests=\"0\" startCode=\"1245239331198\">" +
47        "<Region currentCompactedKVs=\"1\" memstoreSizeMB=\"0\" name=\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\" " +
48        "readRequestsCount=\"1\" rootIndexSizeKB=\"1\" storefileIndexSizeMB=\"0\" storefileSizeMB=\"0\" " +
49        "storefiles=\"1\" stores=\"1\" totalCompactingKVs=\"1\" totalStaticBloomSizeKB=\"1\" " +
50        "totalStaticIndexSizeKB=\"1\" writeRequestsCount=\"2\"/></Node></LiveNodes></ClusterStatus>";
51  
52      AS_PB =
53        "Cj8KBXRlc3QxEOO6i+eeJBgAIIABKIAIMicKDWhiYXNlOnJvb3QsLDAQARgBIAAoADAAOAFAAkgB" +
54        "UAFYAWABaAEKSwoFdGVzdDIQ/pKx8J4kGAAggAQogAgyMwoZaGJhc2U6bWV0YSwsMTI0NjAwMDA0" +
55        "MzcyNBABGAEgACgAMAA4AUACSAFQAVgBYAFoARgCIAApAAAAAAAA8D8=";
56  
57  
58      //Using jackson will break json backward compatibilty for this representation
59      //but the original one was broken as it would only print one Node element
60      //so the format itself was broken
61      AS_JSON =
62        "{\"regions\":2,\"requests\":0,\"averageLoad\":1.0,\"LiveNodes\":[{\"name\":\"test1\"," +
63            "\"Region\":[{\"name\":\"aGJhc2U6cm9vdCwsMA==\",\"stores\":1,\"storefiles\":1," +
64            "\"storefileSizeMB\":0,\"memstoreSizeMB\":0,\"storefileIndexSizeMB\":0," +
65            "\"readRequestsCount\":1,\"writeRequestsCount\":2,\"rootIndexSizeKB\":1," +
66            "\"totalStaticIndexSizeKB\":1,\"totalStaticBloomSizeKB\":1,\"totalCompactingKVs\":1," +
67            "\"currentCompactedKVs\":1}],\"requests\":0,\"startCode\":1245219839331," +
68            "\"heapSizeMB\":128,\"maxHeapSizeMB\":1024},{\"name\":\"test2\"," +
69            "\"Region\":[{\"name\":\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\",\"stores\":1," +
70            "\"storefiles\":1,\"storefileSizeMB\":0,\"memstoreSizeMB\":0,\"storefileIndexSizeMB\":0," +
71            "\"readRequestsCount\":1,\"writeRequestsCount\":2,\"rootIndexSizeKB\":1," +
72            "\"totalStaticIndexSizeKB\":1,\"totalStaticBloomSizeKB\":1,\"totalCompactingKVs\":1," +
73            "\"currentCompactedKVs\":1}],\"requests\":0,\"startCode\":1245239331198," +
74            "\"heapSizeMB\":512,\"maxHeapSizeMB\":1024}],\"DeadNodes\":[]}";
75    }
76  
77    protected StorageClusterStatusModel buildTestModel() {
78      StorageClusterStatusModel model = new StorageClusterStatusModel();
79      model.setRegions(2);
80      model.setRequests(0);
81      model.setAverageLoad(1.0);
82      model.addLiveNode("test1", 1245219839331L, 128, 1024)
83        .addRegion(Bytes.toBytes("hbase:root,,0"), 1, 1, 0, 0, 0, 1, 2, 1, 1, 1, 1, 1);
84      model.addLiveNode("test2", 1245239331198L, 512, 1024)
85        .addRegion(Bytes.toBytes(TableName.META_TABLE_NAME+",,1246000043724"),1, 1, 0, 0, 0,
86            1, 2, 1, 1, 1, 1, 1);
87      return model;
88    }
89  
90    protected void checkModel(StorageClusterStatusModel model) {
91      assertEquals(model.getRegions(), 2);
92      assertEquals(model.getRequests(), 0);
93      assertEquals(model.getAverageLoad(), 1.0);
94      Iterator<StorageClusterStatusModel.Node> nodes =
95        model.getLiveNodes().iterator();
96      StorageClusterStatusModel.Node node = nodes.next();
97      assertEquals(node.getName(), "test1");
98      assertEquals(node.getStartCode(), 1245219839331L);
99      assertEquals(node.getHeapSizeMB(), 128);
100     assertEquals(node.getMaxHeapSizeMB(), 1024);
101     Iterator<StorageClusterStatusModel.Node.Region> regions = 
102       node.getRegions().iterator();
103     StorageClusterStatusModel.Node.Region region = regions.next();
104     assertTrue(Bytes.toString(region.getName()).equals(
105         "hbase:root,,0"));
106     assertEquals(region.getStores(), 1);
107     assertEquals(region.getStorefiles(), 1);
108     assertEquals(region.getStorefileSizeMB(), 0);
109     assertEquals(region.getMemstoreSizeMB(), 0);
110     assertEquals(region.getStorefileIndexSizeMB(), 0);
111     assertEquals(region.getReadRequestsCount(), 1);
112     assertEquals(region.getWriteRequestsCount(), 2);
113     assertEquals(region.getRootIndexSizeKB(), 1);
114     assertEquals(region.getTotalStaticIndexSizeKB(), 1);
115     assertEquals(region.getTotalStaticBloomSizeKB(), 1);
116     assertEquals(region.getTotalCompactingKVs(), 1);
117     assertEquals(region.getCurrentCompactedKVs(), 1);
118     assertFalse(regions.hasNext());
119     node = nodes.next();
120     assertEquals(node.getName(), "test2");
121     assertEquals(node.getStartCode(), 1245239331198L);
122     assertEquals(node.getHeapSizeMB(), 512);
123     assertEquals(node.getMaxHeapSizeMB(), 1024);
124     regions = node.getRegions().iterator();
125     region = regions.next();
126     assertEquals(Bytes.toString(region.getName()),
127         TableName.META_TABLE_NAME+",,1246000043724");
128     assertEquals(region.getStores(), 1);
129     assertEquals(region.getStorefiles(), 1);
130     assertEquals(region.getStorefileSizeMB(), 0);
131     assertEquals(region.getMemstoreSizeMB(), 0);
132     assertEquals(region.getStorefileIndexSizeMB(), 0);
133     assertEquals(region.getReadRequestsCount(), 1);
134     assertEquals(region.getWriteRequestsCount(), 2);
135     assertEquals(region.getRootIndexSizeKB(), 1);
136     assertEquals(region.getTotalStaticIndexSizeKB(), 1);
137     assertEquals(region.getTotalStaticBloomSizeKB(), 1);
138     assertEquals(region.getTotalCompactingKVs(), 1);
139     assertEquals(region.getCurrentCompactedKVs(), 1);
140     
141     assertFalse(regions.hasNext());
142     assertFalse(nodes.hasNext());
143   }
144 }
145