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.rest.model;
19  
20  import java.util.Iterator;
21  
22  import org.apache.hadoop.hbase.testclassification.SmallTests;
23  import org.apache.hadoop.hbase.TableName;
24  import org.apache.hadoop.hbase.util.Bytes;
25  
26  import org.junit.experimental.categories.Category;
27  
28  @Category(SmallTests.class)
29  public class TestStorageClusterStatusModel extends TestModelBase<StorageClusterStatusModel> {
30    public TestStorageClusterStatusModel() throws Exception {
31      super(StorageClusterStatusModel.class);
32  
33      AS_XML =
34        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
35        "<ClusterStatus averageLoad=\"1.0\" regions=\"2\" requests=\"0\">" +
36        "<DeadNodes/><LiveNodes>" +
37        "<Node heapSizeMB=\"128\" maxHeapSizeMB=\"1024\" name=\"test1\" requests=\"0\" startCode=\"1245219839331\">" +
38        "<Region currentCompactedKVs=\"1\" memstoreSizeMB=\"0\" name=\"aGJhc2U6cm9vdCwsMA==\" readRequestsCount=\"1\" " +
39        "rootIndexSizeKB=\"1\" storefileIndexSizeMB=\"0\" storefileSizeMB=\"0\" storefiles=\"1\" stores=\"1\" " +
40        "totalCompactingKVs=\"1\" totalStaticBloomSizeKB=\"1\" totalStaticIndexSizeKB=\"1\" writeRequestsCount=\"2\"/>" +
41        "</Node>" +
42        "<Node heapSizeMB=\"512\" maxHeapSizeMB=\"1024\" name=\"test2\" requests=\"0\" startCode=\"1245239331198\">" +
43        "<Region currentCompactedKVs=\"1\" memstoreSizeMB=\"0\" name=\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\" " +
44        "readRequestsCount=\"1\" rootIndexSizeKB=\"1\" storefileIndexSizeMB=\"0\" storefileSizeMB=\"0\" " +
45        "storefiles=\"1\" stores=\"1\" totalCompactingKVs=\"1\" totalStaticBloomSizeKB=\"1\" " +
46        "totalStaticIndexSizeKB=\"1\" writeRequestsCount=\"2\"/></Node></LiveNodes></ClusterStatus>";
47  
48      AS_PB =
49        "Cj8KBXRlc3QxEOO6i+eeJBgAIIABKIAIMicKDWhiYXNlOnJvb3QsLDAQARgBIAAoADAAOAFAAkgB" +
50        "UAFYAWABaAEKSwoFdGVzdDIQ/pKx8J4kGAAggAQogAgyMwoZaGJhc2U6bWV0YSwsMTI0NjAwMDA0" +
51        "MzcyNBABGAEgACgAMAA4AUACSAFQAVgBYAFoARgCIAApAAAAAAAA8D8=";
52  
53  
54      //Using jackson will break json backward compatibilty for this representation
55      //but the original one was broken as it would only print one Node element
56      //so the format itself was broken
57      AS_JSON =
58        "{\"regions\":2,\"requests\":0,\"averageLoad\":1.0,\"LiveNodes\":[{\"name\":\"test1\"," +
59            "\"Region\":[{\"name\":\"aGJhc2U6cm9vdCwsMA==\",\"stores\":1,\"storefiles\":1," +
60            "\"storefileSizeMB\":0,\"memstoreSizeMB\":0,\"storefileIndexSizeMB\":0," +
61            "\"readRequestsCount\":1,\"writeRequestsCount\":2,\"rootIndexSizeKB\":1," +
62            "\"totalStaticIndexSizeKB\":1,\"totalStaticBloomSizeKB\":1,\"totalCompactingKVs\":1," +
63            "\"currentCompactedKVs\":1}],\"requests\":0,\"startCode\":1245219839331," +
64            "\"heapSizeMB\":128,\"maxHeapSizeMB\":1024},{\"name\":\"test2\"," +
65            "\"Region\":[{\"name\":\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\",\"stores\":1," +
66            "\"storefiles\":1,\"storefileSizeMB\":0,\"memstoreSizeMB\":0,\"storefileIndexSizeMB\":0," +
67            "\"readRequestsCount\":1,\"writeRequestsCount\":2,\"rootIndexSizeKB\":1," +
68            "\"totalStaticIndexSizeKB\":1,\"totalStaticBloomSizeKB\":1,\"totalCompactingKVs\":1," +
69            "\"currentCompactedKVs\":1}],\"requests\":0,\"startCode\":1245239331198," +
70            "\"heapSizeMB\":512,\"maxHeapSizeMB\":1024}],\"DeadNodes\":[]}";
71    }
72  
73    @Override
74    protected StorageClusterStatusModel buildTestModel() {
75      StorageClusterStatusModel model = new StorageClusterStatusModel();
76      model.setRegions(2);
77      model.setRequests(0);
78      model.setAverageLoad(1.0);
79      model.addLiveNode("test1", 1245219839331L, 128, 1024)
80        .addRegion(Bytes.toBytes("hbase:root,,0"), 1, 1, 0, 0, 0, 1, 2, 1, 1, 1, 1, 1);
81      model.addLiveNode("test2", 1245239331198L, 512, 1024)
82        .addRegion(Bytes.toBytes(TableName.META_TABLE_NAME+",,1246000043724"),1, 1, 0, 0, 0,
83            1, 2, 1, 1, 1, 1, 1);
84      return model;
85    }
86  
87    @Override
88    protected void checkModel(StorageClusterStatusModel model) {
89      assertEquals(2, model.getRegions());
90      assertEquals(0, model.getRequests());
91      assertEquals(1.0, model.getAverageLoad(), 0.0);
92      Iterator<StorageClusterStatusModel.Node> nodes =
93        model.getLiveNodes().iterator();
94      StorageClusterStatusModel.Node node = nodes.next();
95      assertEquals("test1", node.getName());
96      assertEquals(1245219839331L, node.getStartCode());
97      assertEquals(128, node.getHeapSizeMB());
98      assertEquals(1024, node.getMaxHeapSizeMB());
99      Iterator<StorageClusterStatusModel.Node.Region> regions =
100       node.getRegions().iterator();
101     StorageClusterStatusModel.Node.Region region = regions.next();
102     assertTrue(Bytes.toString(region.getName()).equals(
103         "hbase:root,,0"));
104     assertEquals(1, region.getStores());
105     assertEquals(1, region.getStorefiles());
106     assertEquals(0, region.getStorefileSizeMB());
107     assertEquals(0, region.getMemstoreSizeMB());
108     assertEquals(0, region.getStorefileIndexSizeMB());
109     assertEquals(1, region.getReadRequestsCount());
110     assertEquals(2, region.getWriteRequestsCount());
111     assertEquals(1, region.getRootIndexSizeKB());
112     assertEquals(1, region.getTotalStaticIndexSizeKB());
113     assertEquals(1, region.getTotalStaticBloomSizeKB());
114     assertEquals(1, region.getTotalCompactingKVs());
115     assertEquals(1, region.getCurrentCompactedKVs());
116     assertFalse(regions.hasNext());
117     node = nodes.next();
118     assertEquals("test2", node.getName());
119     assertEquals(1245239331198L, node.getStartCode());
120     assertEquals(512, node.getHeapSizeMB());
121     assertEquals(1024, node.getMaxHeapSizeMB());
122     regions = node.getRegions().iterator();
123     region = regions.next();
124     assertEquals(Bytes.toString(region.getName()),
125         TableName.META_TABLE_NAME+",,1246000043724");
126     assertEquals(1, region.getStores());
127     assertEquals(1, region.getStorefiles());
128     assertEquals(0, region.getStorefileSizeMB());
129     assertEquals(0, region.getMemstoreSizeMB());
130     assertEquals(0, region.getStorefileIndexSizeMB());
131     assertEquals(1, region.getReadRequestsCount());
132     assertEquals(2, region.getWriteRequestsCount());
133     assertEquals(1, region.getRootIndexSizeKB());
134     assertEquals(1, region.getTotalStaticIndexSizeKB());
135     assertEquals(1, region.getTotalStaticBloomSizeKB());
136     assertEquals(1, region.getTotalCompactingKVs());
137     assertEquals(1, region.getCurrentCompactedKVs());
138 
139     assertFalse(regions.hasNext());
140     assertFalse(nodes.hasNext());
141   }
142 }