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;
019
020import java.util.Collections;
021import java.util.List;
022import java.util.Map;
023import java.util.stream.Collectors;
024import org.apache.hadoop.hbase.client.CompactionState;
025import org.apache.hadoop.hbase.util.Strings;
026import org.apache.yetus.audience.InterfaceAudience;
027
028import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;
029import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;
030
031import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
032import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;
033import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;
034import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
035
036@InterfaceAudience.Private
037public final class RegionMetricsBuilder {
038
039  public static List<RegionMetrics>
040    toRegionMetrics(AdminProtos.GetRegionLoadResponse regionLoadResponse) {
041    return regionLoadResponse.getRegionLoadsList().stream()
042      .map(RegionMetricsBuilder::toRegionMetrics).collect(Collectors.toList());
043  }
044
045  public static RegionMetrics toRegionMetrics(ClusterStatusProtos.RegionLoad regionLoadPB) {
046    return RegionMetricsBuilder
047      .newBuilder(regionLoadPB.getRegionSpecifier().getValue().toByteArray())
048      .setBloomFilterSize(new Size(regionLoadPB.getTotalStaticBloomSizeKB(), Size.Unit.KILOBYTE))
049      .setCompactedCellCount(regionLoadPB.getCurrentCompactedKVs())
050      .setCompactingCellCount(regionLoadPB.getTotalCompactingKVs())
051      .setCompletedSequenceId(regionLoadPB.getCompleteSequenceId())
052      .setDataLocality(regionLoadPB.hasDataLocality() ? regionLoadPB.getDataLocality() : 0.0f)
053      .setDataLocalityForSsd(
054        regionLoadPB.hasDataLocalityForSsd() ? regionLoadPB.getDataLocalityForSsd() : 0.0f)
055      .setBlocksLocalWeight(
056        regionLoadPB.hasBlocksLocalWeight() ? regionLoadPB.getBlocksLocalWeight() : 0)
057      .setBlocksLocalWithSsdWeight(
058        regionLoadPB.hasBlocksLocalWithSsdWeight() ? regionLoadPB.getBlocksLocalWithSsdWeight() : 0)
059      .setBlocksTotalWeight(regionLoadPB.getBlocksTotalWeight())
060      .setCompactionState(
061        ProtobufUtil.createCompactionStateForRegionLoad(regionLoadPB.getCompactionState()))
062      .setFilteredReadRequestCount(regionLoadPB.getFilteredReadRequestsCount())
063      .setStoreFileUncompressedDataIndexSize(
064        new Size(regionLoadPB.getTotalStaticIndexSizeKB(), Size.Unit.KILOBYTE))
065      .setLastMajorCompactionTimestamp(regionLoadPB.getLastMajorCompactionTs())
066      .setMemStoreSize(new Size(regionLoadPB.getMemStoreSizeMB(), Size.Unit.MEGABYTE))
067      .setReadRequestCount(regionLoadPB.getReadRequestsCount())
068      .setCpRequestCount(regionLoadPB.getCpRequestsCount())
069      .setWriteRequestCount(regionLoadPB.getWriteRequestsCount())
070      .setStoreFileIndexSize(new Size(regionLoadPB.getStorefileIndexSizeKB(), Size.Unit.KILOBYTE))
071      .setStoreFileRootLevelIndexSize(
072        new Size(regionLoadPB.getRootIndexSizeKB(), Size.Unit.KILOBYTE))
073      .setStoreCount(regionLoadPB.getStores()).setStoreFileCount(regionLoadPB.getStorefiles())
074      .setStoreRefCount(regionLoadPB.getStoreRefCount())
075      .setMaxCompactedStoreFileRefCount(regionLoadPB.getMaxCompactedStoreFileRefCount())
076      .setStoreFileSize(new Size(regionLoadPB.getStorefileSizeMB(), Size.Unit.MEGABYTE))
077      .setStoreSequenceIds(regionLoadPB.getStoreCompleteSequenceIdList().stream()
078        .collect(Collectors.toMap(
079          (ClusterStatusProtos.StoreSequenceId s) -> s.getFamilyName().toByteArray(),
080          ClusterStatusProtos.StoreSequenceId::getSequenceId)))
081      .setUncompressedStoreFileSize(
082        new Size(regionLoadPB.getStoreUncompressedSizeMB(), Size.Unit.MEGABYTE))
083      .setRegionSizeMB(new Size(regionLoadPB.getRegionSizeMB(), Size.Unit.MEGABYTE))
084      .setCurrentRegionCachedRatio(regionLoadPB.getCurrentRegionCachedRatio())
085      .setCurrentRegionColdDataRatio(regionLoadPB.getCurrentRegionColdDataRatio()).build();
086  }
087
088  private static List<ClusterStatusProtos.StoreSequenceId>
089    toStoreSequenceId(Map<byte[], Long> ids) {
090    return ids.entrySet().stream()
091      .map(e -> ClusterStatusProtos.StoreSequenceId.newBuilder()
092        .setFamilyName(UnsafeByteOperations.unsafeWrap(e.getKey())).setSequenceId(e.getValue())
093        .build())
094      .collect(Collectors.toList());
095  }
096
097  public static ClusterStatusProtos.RegionLoad toRegionLoad(RegionMetrics regionMetrics) {
098    return ClusterStatusProtos.RegionLoad.newBuilder()
099      .setRegionSpecifier(HBaseProtos.RegionSpecifier.newBuilder()
100        .setType(HBaseProtos.RegionSpecifier.RegionSpecifierType.REGION_NAME)
101        .setValue(UnsafeByteOperations.unsafeWrap(regionMetrics.getRegionName())).build())
102      .setTotalStaticBloomSizeKB((int) regionMetrics.getBloomFilterSize().get(Size.Unit.KILOBYTE))
103      .setCurrentCompactedKVs(regionMetrics.getCompactedCellCount())
104      .setTotalCompactingKVs(regionMetrics.getCompactingCellCount())
105      .setCompleteSequenceId(regionMetrics.getCompletedSequenceId())
106      .setDataLocality(regionMetrics.getDataLocality())
107      .setFilteredReadRequestsCount(regionMetrics.getFilteredReadRequestCount())
108      .setTotalStaticIndexSizeKB(
109        (int) regionMetrics.getStoreFileUncompressedDataIndexSize().get(Size.Unit.KILOBYTE))
110      .setLastMajorCompactionTs(regionMetrics.getLastMajorCompactionTimestamp())
111      .setMemStoreSizeMB((int) regionMetrics.getMemStoreSize().get(Size.Unit.MEGABYTE))
112      .setReadRequestsCount(regionMetrics.getReadRequestCount())
113      .setCpRequestsCount(regionMetrics.getCpRequestCount())
114      .setWriteRequestsCount(regionMetrics.getWriteRequestCount())
115      .setStorefileIndexSizeKB((long) regionMetrics.getStoreFileIndexSize().get(Size.Unit.KILOBYTE))
116      .setRootIndexSizeKB(
117        (int) regionMetrics.getStoreFileRootLevelIndexSize().get(Size.Unit.KILOBYTE))
118      .setStores(regionMetrics.getStoreCount()).setStorefiles(regionMetrics.getStoreFileCount())
119      .setStoreRefCount(regionMetrics.getStoreRefCount())
120      .setMaxCompactedStoreFileRefCount(regionMetrics.getMaxCompactedStoreFileRefCount())
121      .setStorefileSizeMB((int) regionMetrics.getStoreFileSize().get(Size.Unit.MEGABYTE))
122      .addAllStoreCompleteSequenceId(toStoreSequenceId(regionMetrics.getStoreSequenceId()))
123      .setStoreUncompressedSizeMB(
124        (int) regionMetrics.getUncompressedStoreFileSize().get(Size.Unit.MEGABYTE))
125      .setRegionSizeMB((int) regionMetrics.getRegionSizeMB().get(Size.Unit.MEGABYTE))
126      .setCurrentRegionCachedRatio(regionMetrics.getCurrentRegionCachedRatio())
127      .setCurrentRegionColdDataRatio(regionMetrics.getCurrentRegionColdDataRatio()).build();
128  }
129
130  public static RegionMetricsBuilder newBuilder(byte[] name) {
131    return new RegionMetricsBuilder(name);
132  }
133
134  private final byte[] name;
135  private int storeCount;
136  private int storeFileCount;
137  private int storeRefCount;
138  private int maxCompactedStoreFileRefCount;
139  private long compactingCellCount;
140  private long compactedCellCount;
141  private Size storeFileSize = Size.ZERO;
142  private Size memStoreSize = Size.ZERO;
143  private Size indexSize = Size.ZERO;
144  private Size rootLevelIndexSize = Size.ZERO;
145  private Size uncompressedDataIndexSize = Size.ZERO;
146  private Size bloomFilterSize = Size.ZERO;
147  private Size uncompressedStoreFileSize = Size.ZERO;
148  private long writeRequestCount;
149  private long readRequestCount;
150  private long cpRequestCount;
151  private long filteredReadRequestCount;
152  private long completedSequenceId;
153  private Map<byte[], Long> storeSequenceIds = Collections.emptyMap();
154  private float dataLocality;
155  private long lastMajorCompactionTimestamp;
156  private float dataLocalityForSsd;
157  private long blocksLocalWeight;
158  private long blocksLocalWithSsdWeight;
159  private long blocksTotalWeight;
160  private CompactionState compactionState;
161  private Size regionSizeMB = Size.ZERO;
162  private float currentRegionCachedRatio;
163  private float currentRegionColdDataRatio;
164
165  private RegionMetricsBuilder(byte[] name) {
166    this.name = name;
167  }
168
169  public RegionMetricsBuilder setStoreCount(int value) {
170    this.storeCount = value;
171    return this;
172  }
173
174  public RegionMetricsBuilder setStoreFileCount(int value) {
175    this.storeFileCount = value;
176    return this;
177  }
178
179  public RegionMetricsBuilder setStoreRefCount(int value) {
180    this.storeRefCount = value;
181    return this;
182  }
183
184  public RegionMetricsBuilder setMaxCompactedStoreFileRefCount(int value) {
185    this.maxCompactedStoreFileRefCount = value;
186    return this;
187  }
188
189  public RegionMetricsBuilder setCompactingCellCount(long value) {
190    this.compactingCellCount = value;
191    return this;
192  }
193
194  public RegionMetricsBuilder setCompactedCellCount(long value) {
195    this.compactedCellCount = value;
196    return this;
197  }
198
199  public RegionMetricsBuilder setStoreFileSize(Size value) {
200    this.storeFileSize = value;
201    return this;
202  }
203
204  public RegionMetricsBuilder setMemStoreSize(Size value) {
205    this.memStoreSize = value;
206    return this;
207  }
208
209  public RegionMetricsBuilder setStoreFileIndexSize(Size value) {
210    this.indexSize = value;
211    return this;
212  }
213
214  public RegionMetricsBuilder setStoreFileRootLevelIndexSize(Size value) {
215    this.rootLevelIndexSize = value;
216    return this;
217  }
218
219  public RegionMetricsBuilder setStoreFileUncompressedDataIndexSize(Size value) {
220    this.uncompressedDataIndexSize = value;
221    return this;
222  }
223
224  public RegionMetricsBuilder setBloomFilterSize(Size value) {
225    this.bloomFilterSize = value;
226    return this;
227  }
228
229  public RegionMetricsBuilder setUncompressedStoreFileSize(Size value) {
230    this.uncompressedStoreFileSize = value;
231    return this;
232  }
233
234  public RegionMetricsBuilder setWriteRequestCount(long value) {
235    this.writeRequestCount = value;
236    return this;
237  }
238
239  public RegionMetricsBuilder setReadRequestCount(long value) {
240    this.readRequestCount = value;
241    return this;
242  }
243
244  public RegionMetricsBuilder setCpRequestCount(long value) {
245    this.cpRequestCount = value;
246    return this;
247  }
248
249  public RegionMetricsBuilder setFilteredReadRequestCount(long value) {
250    this.filteredReadRequestCount = value;
251    return this;
252  }
253
254  public RegionMetricsBuilder setCompletedSequenceId(long value) {
255    this.completedSequenceId = value;
256    return this;
257  }
258
259  public RegionMetricsBuilder setStoreSequenceIds(Map<byte[], Long> value) {
260    this.storeSequenceIds = value;
261    return this;
262  }
263
264  public RegionMetricsBuilder setDataLocality(float value) {
265    this.dataLocality = value;
266    return this;
267  }
268
269  public RegionMetricsBuilder setLastMajorCompactionTimestamp(long value) {
270    this.lastMajorCompactionTimestamp = value;
271    return this;
272  }
273
274  public RegionMetricsBuilder setDataLocalityForSsd(float value) {
275    this.dataLocalityForSsd = value;
276    return this;
277  }
278
279  public RegionMetricsBuilder setBlocksLocalWeight(long value) {
280    this.blocksLocalWeight = value;
281    return this;
282  }
283
284  public RegionMetricsBuilder setBlocksLocalWithSsdWeight(long value) {
285    this.blocksLocalWithSsdWeight = value;
286    return this;
287  }
288
289  public RegionMetricsBuilder setBlocksTotalWeight(long value) {
290    this.blocksTotalWeight = value;
291    return this;
292  }
293
294  public RegionMetricsBuilder setCompactionState(CompactionState compactionState) {
295    this.compactionState = compactionState;
296    return this;
297  }
298
299  public RegionMetricsBuilder setRegionSizeMB(Size value) {
300    this.regionSizeMB = value;
301    return this;
302  }
303
304  public RegionMetricsBuilder setCurrentRegionCachedRatio(float value) {
305    this.currentRegionCachedRatio = value;
306    return this;
307  }
308
309  public RegionMetricsBuilder setCurrentRegionColdDataRatio(float value) {
310    this.currentRegionColdDataRatio = value;
311    return this;
312  }
313
314  public RegionMetrics build() {
315    return new RegionMetricsImpl(name, storeCount, storeFileCount, storeRefCount,
316      maxCompactedStoreFileRefCount, compactingCellCount, compactedCellCount, storeFileSize,
317      memStoreSize, indexSize, rootLevelIndexSize, uncompressedDataIndexSize, bloomFilterSize,
318      uncompressedStoreFileSize, writeRequestCount, readRequestCount, cpRequestCount,
319      filteredReadRequestCount, completedSequenceId, storeSequenceIds, dataLocality,
320      lastMajorCompactionTimestamp, dataLocalityForSsd, blocksLocalWeight, blocksLocalWithSsdWeight,
321      blocksTotalWeight, compactionState, regionSizeMB, currentRegionCachedRatio,
322      currentRegionColdDataRatio);
323  }
324
325  private static class RegionMetricsImpl implements RegionMetrics {
326    private final byte[] name;
327    private final int storeCount;
328    private final int storeFileCount;
329    private final int storeRefCount;
330    private final int maxCompactedStoreFileRefCount;
331    private final long compactingCellCount;
332    private final long compactedCellCount;
333    private final Size storeFileSize;
334    private final Size memStoreSize;
335    private final Size indexSize;
336    private final Size rootLevelIndexSize;
337    private final Size uncompressedDataIndexSize;
338    private final Size bloomFilterSize;
339    private final Size uncompressedStoreFileSize;
340    private final long writeRequestCount;
341    private final long readRequestCount;
342    private final long cpRequestCount;
343    private final long filteredReadRequestCount;
344    private final long completedSequenceId;
345    private final Map<byte[], Long> storeSequenceIds;
346    private final float dataLocality;
347    private final long lastMajorCompactionTimestamp;
348    private final float dataLocalityForSsd;
349    private final long blocksLocalWeight;
350    private final long blocksLocalWithSsdWeight;
351    private final long blocksTotalWeight;
352    private final CompactionState compactionState;
353    private final Size regionSizeMB;
354    private final float currentRegionCachedRatio;
355    private final float currentRegionColdDataRatio;
356
357    RegionMetricsImpl(byte[] name, int storeCount, int storeFileCount, int storeRefCount,
358      int maxCompactedStoreFileRefCount, final long compactingCellCount, long compactedCellCount,
359      Size storeFileSize, Size memStoreSize, Size indexSize, Size rootLevelIndexSize,
360      Size uncompressedDataIndexSize, Size bloomFilterSize, Size uncompressedStoreFileSize,
361      long writeRequestCount, long readRequestCount, long cpRequestCount,
362      long filteredReadRequestCount, long completedSequenceId, Map<byte[], Long> storeSequenceIds,
363      float dataLocality, long lastMajorCompactionTimestamp, float dataLocalityForSsd,
364      long blocksLocalWeight, long blocksLocalWithSsdWeight, long blocksTotalWeight,
365      CompactionState compactionState, Size regionSizeMB, float currentRegionCachedRatio,
366      float currentRegionColdDataRatio) {
367      this.name = Preconditions.checkNotNull(name);
368      this.storeCount = storeCount;
369      this.storeFileCount = storeFileCount;
370      this.storeRefCount = storeRefCount;
371      this.maxCompactedStoreFileRefCount = maxCompactedStoreFileRefCount;
372      this.compactingCellCount = compactingCellCount;
373      this.compactedCellCount = compactedCellCount;
374      this.storeFileSize = Preconditions.checkNotNull(storeFileSize);
375      this.memStoreSize = Preconditions.checkNotNull(memStoreSize);
376      this.indexSize = Preconditions.checkNotNull(indexSize);
377      this.rootLevelIndexSize = Preconditions.checkNotNull(rootLevelIndexSize);
378      this.uncompressedDataIndexSize = Preconditions.checkNotNull(uncompressedDataIndexSize);
379      this.bloomFilterSize = Preconditions.checkNotNull(bloomFilterSize);
380      this.uncompressedStoreFileSize = Preconditions.checkNotNull(uncompressedStoreFileSize);
381      this.writeRequestCount = writeRequestCount;
382      this.readRequestCount = readRequestCount;
383      this.cpRequestCount = cpRequestCount;
384      this.filteredReadRequestCount = filteredReadRequestCount;
385      this.completedSequenceId = completedSequenceId;
386      this.storeSequenceIds = Preconditions.checkNotNull(storeSequenceIds);
387      this.dataLocality = dataLocality;
388      this.lastMajorCompactionTimestamp = lastMajorCompactionTimestamp;
389      this.dataLocalityForSsd = dataLocalityForSsd;
390      this.blocksLocalWeight = blocksLocalWeight;
391      this.blocksLocalWithSsdWeight = blocksLocalWithSsdWeight;
392      this.blocksTotalWeight = blocksTotalWeight;
393      this.compactionState = compactionState;
394      this.regionSizeMB = regionSizeMB;
395      this.currentRegionCachedRatio = currentRegionCachedRatio;
396      this.currentRegionColdDataRatio = currentRegionColdDataRatio;
397    }
398
399    @Override
400    public byte[] getRegionName() {
401      return name;
402    }
403
404    @Override
405    public int getStoreCount() {
406      return storeCount;
407    }
408
409    @Override
410    public int getStoreFileCount() {
411      return storeFileCount;
412    }
413
414    @Override
415    public int getStoreRefCount() {
416      return storeRefCount;
417    }
418
419    @Override
420    public int getMaxCompactedStoreFileRefCount() {
421      return maxCompactedStoreFileRefCount;
422    }
423
424    @Override
425    public Size getStoreFileSize() {
426      return storeFileSize;
427    }
428
429    @Override
430    public Size getMemStoreSize() {
431      return memStoreSize;
432    }
433
434    @Override
435    public long getReadRequestCount() {
436      return readRequestCount;
437    }
438
439    @Override
440    public long getCpRequestCount() {
441      return cpRequestCount;
442    }
443
444    @Override
445    public long getFilteredReadRequestCount() {
446      return filteredReadRequestCount;
447    }
448
449    @Override
450    public long getWriteRequestCount() {
451      return writeRequestCount;
452    }
453
454    @Override
455    public Size getStoreFileIndexSize() {
456      return indexSize;
457    }
458
459    @Override
460    public Size getStoreFileRootLevelIndexSize() {
461      return rootLevelIndexSize;
462    }
463
464    @Override
465    public Size getStoreFileUncompressedDataIndexSize() {
466      return uncompressedDataIndexSize;
467    }
468
469    @Override
470    public Size getBloomFilterSize() {
471      return bloomFilterSize;
472    }
473
474    @Override
475    public long getCompactingCellCount() {
476      return compactingCellCount;
477    }
478
479    @Override
480    public long getCompactedCellCount() {
481      return compactedCellCount;
482    }
483
484    @Override
485    public long getCompletedSequenceId() {
486      return completedSequenceId;
487    }
488
489    @Override
490    public Map<byte[], Long> getStoreSequenceId() {
491      return Collections.unmodifiableMap(storeSequenceIds);
492    }
493
494    @Override
495    public Size getUncompressedStoreFileSize() {
496      return uncompressedStoreFileSize;
497    }
498
499    @Override
500    public float getDataLocality() {
501      return dataLocality;
502    }
503
504    @Override
505    public long getLastMajorCompactionTimestamp() {
506      return lastMajorCompactionTimestamp;
507    }
508
509    @Override
510    public float getDataLocalityForSsd() {
511      return dataLocalityForSsd;
512    }
513
514    @Override
515    public long getBlocksLocalWeight() {
516      return blocksLocalWeight;
517    }
518
519    @Override
520    public long getBlocksLocalWithSsdWeight() {
521      return blocksLocalWithSsdWeight;
522    }
523
524    @Override
525    public long getBlocksTotalWeight() {
526      return blocksTotalWeight;
527    }
528
529    @Override
530    public CompactionState getCompactionState() {
531      return compactionState;
532    }
533
534    @Override
535    public Size getRegionSizeMB() {
536      return regionSizeMB;
537    }
538
539    @Override
540    public float getCurrentRegionCachedRatio() {
541      return currentRegionCachedRatio;
542    }
543
544    @Override
545    public float getCurrentRegionColdDataRatio() {
546      return currentRegionColdDataRatio;
547    }
548
549    @Override
550    public String toString() {
551      StringBuilder sb =
552        Strings.appendKeyValue(new StringBuilder(), "storeCount", this.getStoreCount());
553      Strings.appendKeyValue(sb, "storeFileCount", this.getStoreFileCount());
554      Strings.appendKeyValue(sb, "storeRefCount", this.getStoreRefCount());
555      Strings.appendKeyValue(sb, "maxCompactedStoreFileRefCount",
556        this.getMaxCompactedStoreFileRefCount());
557      Strings.appendKeyValue(sb, "uncompressedStoreFileSize", this.getUncompressedStoreFileSize());
558      Strings.appendKeyValue(sb, "lastMajorCompactionTimestamp",
559        this.getLastMajorCompactionTimestamp());
560      Strings.appendKeyValue(sb, "storeFileSize", this.getStoreFileSize());
561      if (this.getUncompressedStoreFileSize().get() != 0) {
562        Strings.appendKeyValue(sb, "compressionRatio",
563          String.format("%.4f", (float) this.getStoreFileSize().get(Size.Unit.MEGABYTE)
564            / (float) this.getUncompressedStoreFileSize().get(Size.Unit.MEGABYTE)));
565      }
566      Strings.appendKeyValue(sb, "memStoreSize", this.getMemStoreSize());
567      Strings.appendKeyValue(sb, "readRequestCount", this.getReadRequestCount());
568      Strings.appendKeyValue(sb, "cpRequestCount", this.getCpRequestCount());
569      Strings.appendKeyValue(sb, "writeRequestCount", this.getWriteRequestCount());
570      Strings.appendKeyValue(sb, "rootLevelIndexSize", this.getStoreFileRootLevelIndexSize());
571      Strings.appendKeyValue(sb, "uncompressedDataIndexSize",
572        this.getStoreFileUncompressedDataIndexSize());
573      Strings.appendKeyValue(sb, "bloomFilterSize", this.getBloomFilterSize());
574      Strings.appendKeyValue(sb, "compactingCellCount", this.getCompactingCellCount());
575      Strings.appendKeyValue(sb, "compactedCellCount", this.getCompactedCellCount());
576      float compactionProgressPct = Float.NaN;
577      if (this.getCompactingCellCount() > 0) {
578        compactionProgressPct =
579          ((float) this.getCompactedCellCount() / (float) this.getCompactingCellCount());
580      }
581      Strings.appendKeyValue(sb, "compactionProgressPct", compactionProgressPct);
582      Strings.appendKeyValue(sb, "completedSequenceId", this.getCompletedSequenceId());
583      Strings.appendKeyValue(sb, "dataLocality", this.getDataLocality());
584      Strings.appendKeyValue(sb, "dataLocalityForSsd", this.getDataLocalityForSsd());
585      Strings.appendKeyValue(sb, "blocksLocalWeight", blocksLocalWeight);
586      Strings.appendKeyValue(sb, "blocksLocalWithSsdWeight", blocksLocalWithSsdWeight);
587      Strings.appendKeyValue(sb, "blocksTotalWeight", blocksTotalWeight);
588      Strings.appendKeyValue(sb, "compactionState", compactionState);
589      Strings.appendKeyValue(sb, "regionSizeMB", regionSizeMB);
590      Strings.appendKeyValue(sb, "currentRegionCachedRatio", currentRegionCachedRatio);
591      Strings.appendKeyValue(sb, "currentRegionColdDataRatio", currentRegionColdDataRatio);
592      return sb.toString();
593    }
594  }
595
596}