001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.rest.model; 019 020import static org.junit.jupiter.api.Assertions.assertEquals; 021import static org.junit.jupiter.api.Assertions.assertFalse; 022 023import java.util.Iterator; 024import org.apache.hadoop.hbase.TableName; 025import org.apache.hadoop.hbase.testclassification.RestTests; 026import org.apache.hadoop.hbase.testclassification.SmallTests; 027import org.apache.hadoop.hbase.util.Bytes; 028import org.junit.jupiter.api.Tag; 029 030@Tag(RestTests.TAG) 031@Tag(SmallTests.TAG) 032public class TestStorageClusterStatusModel extends TestModelBase<StorageClusterStatusModel> { 033 034 public TestStorageClusterStatusModel() throws Exception { 035 super(StorageClusterStatusModel.class); 036 037 AS_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" 038 + "<ClusterStatus averageLoad=\"1.0\" regions=\"2\" requests=\"0\">" 039 + "<DeadNodes/><LiveNodes>" 040 + "<Node heapSizeMB=\"128\" maxHeapSizeMB=\"1024\" name=\"test1\" requests=\"0\" " 041 + "startCode=\"1245219839331\"><Region currentCompactedKVs=\"1\" memstoreSizeMB=\"0\" " 042 + "name=\"aGJhc2U6cm9vdCwsMA==\" readRequestsCount=\"1\" rootIndexSizeKB=\"1\" " 043 + "storefileIndexSizeKB=\"0\" storefileSizeMB=\"0\" storefiles=\"1\" stores=\"1\" " 044 + "totalCompactingKVs=\"1\" totalStaticBloomSizeKB=\"1\" totalStaticIndexSizeKB=\"1\" " 045 + "writeRequestsCount=\"2\"/></Node>" 046 + "<Node heapSizeMB=\"512\" maxHeapSizeMB=\"1024\" name=\"test2\" requests=\"0\" " 047 + "startCode=\"1245239331198\">" + "<Region currentCompactedKVs=\"1\" memstoreSizeMB=\"0\" " 048 + "name=\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\" readRequestsCount=\"1\" " 049 + "rootIndexSizeKB=\"1\" storefileIndexSizeKB=\"0\" storefileSizeMB=\"0\" " 050 + "storefiles=\"1\" stores=\"1\" totalCompactingKVs=\"1\" totalStaticBloomSizeKB=\"1\" " 051 + "totalStaticIndexSizeKB=\"1\" writeRequestsCount=\"2\"/></Node></LiveNodes>" 052 + "</ClusterStatus>"; 053 054 AS_PB = "Cj8KBXRlc3QxEOO6i+eeJBgAIIABKIAIMicKDWhiYXNlOnJvb3QsLDAQARgBIAAoADAAOAFAAkgB" 055 + "UAFYAWABaAEKSwoFdGVzdDIQ/pKx8J4kGAAggAQogAgyMwoZaGJhc2U6bWV0YSwsMTI0NjAwMDA0" 056 + "MzcyNBABGAEgACgAMAA4AUACSAFQAVgBYAFoARgCIAApAAAAAAAA8D8="; 057 058 // Using jackson will break json backward compatibilty for this representation 059 // but the original one was broken as it would only print one Node element 060 // so the format itself was broken 061 AS_JSON = 062 "{\"regions\":2,\"requests\":0,\"averageLoad\":1.0,\"LiveNodes\":[{\"name\":\"test1\"," 063 + "\"Region\":[{\"name\":\"aGJhc2U6cm9vdCwsMA==\",\"stores\":1,\"storefiles\":1," 064 + "\"storefileSizeMB\":0,\"memStoreSizeMB\":0,\"storefileIndexSizeKB\":0," 065 + "\"readRequestsCount\":1,\"cpRequestsCount\":1,\"writeRequestsCount\":2," 066 + "\"rootIndexSizeKB\":1,\"totalStaticIndexSizeKB\":1,\"totalStaticBloomSizeKB\":1," 067 + "\"totalCompactingKVs\":1,\"currentCompactedKVs\":1}],\"requests\":0," 068 + "\"startCode\":1245219839331,\"heapSizeMB\":128,\"maxHeapSizeMB\":1024}," 069 + "{\"name\":\"test2\",\"Region\":[{\"name\":\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\"," 070 + "\"stores\":1,\"storefiles\":1,\"storefileSizeMB\":0,\"memStoreSizeMB\":0," 071 + "\"storefileIndexSizeKB\":0,\"readRequestsCount\":1,\"cpRequestsCount\":1," 072 + "\"writeRequestsCount\":2,\"rootIndexSizeKB\":1,\"totalStaticIndexSizeKB\":1," 073 + "\"totalStaticBloomSizeKB\":1,\"totalCompactingKVs\":1,\"currentCompactedKVs\":1}]," 074 + "\"requests\":0,\"startCode\":1245239331198,\"heapSizeMB\":512," 075 + "\"maxHeapSizeMB\":1024}],\"DeadNodes\":[]}"; 076 } 077 078 @Override 079 protected StorageClusterStatusModel buildTestModel() { 080 StorageClusterStatusModel model = new StorageClusterStatusModel(); 081 model.setRegions(2); 082 model.setRequests(0); 083 model.setAverageLoad(1.0); 084 model.addLiveNode("test1", 1245219839331L, 128, 1024).addRegion(Bytes.toBytes("hbase:root,,0"), 085 1, 1, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 1); 086 model.addLiveNode("test2", 1245239331198L, 512, 1024).addRegion( 087 Bytes.toBytes(TableName.META_TABLE_NAME + ",,1246000043724"), 1, 1, 0, 0, 0, 1, 1, 2, 1, 1, 1, 088 1, 1); 089 return model; 090 } 091 092 @Override 093 protected void checkModel(StorageClusterStatusModel model) { 094 assertEquals(2, model.getRegions()); 095 assertEquals(0, model.getRequests()); 096 assertEquals(1.0, model.getAverageLoad(), 0.0); 097 Iterator<StorageClusterStatusModel.Node> nodes = model.getLiveNodes().iterator(); 098 StorageClusterStatusModel.Node node = nodes.next(); 099 assertEquals("test1", node.getName()); 100 assertEquals(1245219839331L, node.getStartCode()); 101 assertEquals(128, node.getHeapSizeMB()); 102 assertEquals(1024, node.getMaxHeapSizeMB()); 103 Iterator<StorageClusterStatusModel.Node.Region> regions = node.getRegions().iterator(); 104 StorageClusterStatusModel.Node.Region region = regions.next(); 105 assertEquals("hbase:root,,0", Bytes.toString(region.getName())); 106 assertEquals(1, region.getStores()); 107 assertEquals(1, region.getStorefiles()); 108 assertEquals(0, region.getStorefileSizeMB()); 109 assertEquals(0, region.getMemStoreSizeMB()); 110 assertEquals(0, region.getStorefileIndexSizeKB()); 111 assertEquals(1, region.getReadRequestsCount()); 112 assertEquals(2, region.getWriteRequestsCount()); 113 assertEquals(1, region.getRootIndexSizeKB()); 114 assertEquals(1, region.getTotalStaticIndexSizeKB()); 115 assertEquals(1, region.getTotalStaticBloomSizeKB()); 116 assertEquals(1, region.getTotalCompactingKVs()); 117 assertEquals(1, region.getCurrentCompactedKVs()); 118 assertFalse(regions.hasNext()); 119 node = nodes.next(); 120 assertEquals("test2", node.getName()); 121 assertEquals(1245239331198L, node.getStartCode()); 122 assertEquals(512, node.getHeapSizeMB()); 123 assertEquals(1024, node.getMaxHeapSizeMB()); 124 regions = node.getRegions().iterator(); 125 region = regions.next(); 126 assertEquals(TableName.META_TABLE_NAME + ",,1246000043724", Bytes.toString(region.getName())); 127 assertEquals(1, region.getStores()); 128 assertEquals(1, region.getStorefiles()); 129 assertEquals(0, region.getStorefileSizeMB()); 130 assertEquals(0, region.getMemStoreSizeMB()); 131 assertEquals(0, region.getStorefileIndexSizeKB()); 132 assertEquals(1, region.getReadRequestsCount()); 133 assertEquals(2, region.getWriteRequestsCount()); 134 assertEquals(1, region.getRootIndexSizeKB()); 135 assertEquals(1, region.getTotalStaticIndexSizeKB()); 136 assertEquals(1, region.getTotalStaticBloomSizeKB()); 137 assertEquals(1, region.getTotalCompactingKVs()); 138 assertEquals(1, region.getCurrentCompactedKVs()); 139 140 assertFalse(regions.hasNext()); 141 assertFalse(nodes.hasNext()); 142 } 143}