keith-turner commented on code in PR #3645:
URL: https://github.com/apache/accumulo/pull/3645#discussion_r1271117823


##########
core/src/main/java/org/apache/accumulo/core/client/admin/TableOperations.java:
##########
@@ -1034,4 +1034,9 @@ default Stream<HostingGoalForTablet> 
getTabletHostingGoal(final String tableName
     throw new UnsupportedOperationException();
   }
 
+  default Stream<TabletInformation> getTabletInformation(final String 
tableName, final Range range)

Review Comment:
   ```suggestion
     /**
      * @return a stream of tablets information for tablets that fall in the 
specified range
      * @since 4.0.0
      */
     default Stream<TabletInformation> getTabletInformation(final String 
tableName, final Range range)
   ```



##########
core/src/main/java/org/apache/accumulo/core/client/admin/TabletInformation.java:
##########
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.core.client.admin;
+
+import java.util.Objects;
+
+import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.util.NumUtil;
+
+public class TabletInformation {
+
+  private final String tableName;
+  private final String endRow;
+  private final String prevEndRow;
+  private final int numFiles;
+  private final int numWalLogs;
+  private final long numEntries;
+  private final long size;
+  private final String status;
+  private final String location;
+  private final String dir;
+  private final TableId tableId;
+  private final TabletHostingGoal goal;
+
+  public TabletInformation(String tableName, TableId tableId, String endRow, 
String prevEndRow,
+      int numFiles, int numWalLogs, long numEntries, long size, String status, 
String location,
+      String dir, TabletHostingGoal goal) {
+    this.tableName = tableName;
+    this.tableId = tableId;
+    this.endRow = endRow;
+    this.prevEndRow = prevEndRow;
+    this.numFiles = numFiles;
+    this.numWalLogs = numWalLogs;
+    this.numEntries = numEntries;
+    this.size = size;
+    this.status = status;
+    this.location = location;
+    this.dir = dir;
+    this.goal = goal;
+  }
+
+  public String getEndRow() {
+    return Objects.requireNonNullElse(this.endRow, "+INF");
+  }
+
+  public String getStartRow() {
+    return Objects.requireNonNullElse(this.prevEndRow, "-INF");
+  }
+
+  public String getTableId() {
+    return tableId.canonical();
+  }
+
+  public String getTablet() {
+    return getStartRow() + " " + getEndRow();
+  }
+
+  public String getTableName() {
+    return this.tableName;
+  }
+
+  public int getNumFiles() {
+    return this.numFiles;
+  }
+
+  public int getNumWalLogs() {
+    return this.numWalLogs;
+  }
+
+  public long getNumEntries() {
+    return this.numEntries;
+  }
+
+  public String getNumEntries(final boolean humanReadable) {
+    if (humanReadable) {
+      return NumUtil.bigNumberForQuantity(numEntries);
+    }
+    return String.format("%,d", numEntries);
+  }
+
+  public long getSize() {
+    return this.size;
+  }
+
+  public String getSize(final boolean humanReadable) {
+    if (humanReadable) {
+      return NumUtil.bigNumberForSize(size);
+    }
+    return String.format("%,d", size);
+  }
+
+  public String getStatus() {
+    return this.status;
+  }
+
+  public String getLocation() {
+    return this.location;
+  }
+
+  public String getTabletDir() {
+    return this.dir;
+  }
+
+  public TabletHostingGoal getHostingGoal() {
+    return this.goal;
+  }
+
+  @Override
+  public String toString() {
+    return "TabletInformation{tableName='" + tableName + '\'' + ", numFiles=" 
+ numFiles
+        + ", numWalLogs=" + numWalLogs + ", numEntries=" + numEntries + ", 
size=" + size
+        + ", status='" + status + '\'' + ", location='" + location + '\'' + ", 
dir='" + dir + '\''
+        + ", tableId=" + tableId + ", tablet=" + getTablet() + ", goal=" + 
goal + '}';
+  }
+
+  public static final String header =

Review Comment:
   Could this be moved to the shell code?



##########
core/src/main/java/org/apache/accumulo/core/client/admin/TabletInformation.java:
##########
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.core.client.admin;
+
+import java.util.Objects;
+
+import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.util.NumUtil;
+
+public class TabletInformation {
+
+  private final String tableName;
+  private final String endRow;
+  private final String prevEndRow;
+  private final int numFiles;
+  private final int numWalLogs;
+  private final long numEntries;
+  private final long size;
+  private final String status;
+  private final String location;
+  private final String dir;
+  private final TableId tableId;
+  private final TabletHostingGoal goal;
+
+  public TabletInformation(String tableName, TableId tableId, String endRow, 
String prevEndRow,
+      int numFiles, int numWalLogs, long numEntries, long size, String status, 
String location,
+      String dir, TabletHostingGoal goal) {
+    this.tableName = tableName;
+    this.tableId = tableId;
+    this.endRow = endRow;
+    this.prevEndRow = prevEndRow;
+    this.numFiles = numFiles;
+    this.numWalLogs = numWalLogs;
+    this.numEntries = numEntries;
+    this.size = size;
+    this.status = status;
+    this.location = location;
+    this.dir = dir;
+    this.goal = goal;
+  }
+
+  public String getEndRow() {
+    return Objects.requireNonNullElse(this.endRow, "+INF");
+  }
+
+  public String getStartRow() {
+    return Objects.requireNonNullElse(this.prevEndRow, "-INF");
+  }
+
+  public String getTableId() {
+    return tableId.canonical();
+  }
+
+  public String getTablet() {
+    return getStartRow() + " " + getEndRow();
+  }

Review Comment:
   Its good to provide the exact rows as they exist in the metadata table, this 
can not be done with String as it may mangle certain binary data.  Could used 
the TabletId type which already exist in the public api for this purpose.
   
   ```suggestion
     public TabletId getTabletId(){
        return new TabletIdImp(tabletMetadata.getExtent());
     }
   ```



##########
core/src/main/java/org/apache/accumulo/core/client/admin/TabletInformation.java:
##########
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.core.client.admin;
+
+import java.util.Objects;
+
+import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.util.NumUtil;
+
+public class TabletInformation {
+
+  private final String tableName;
+  private final String endRow;
+  private final String prevEndRow;
+  private final int numFiles;
+  private final int numWalLogs;
+  private final long numEntries;
+  private final long size;
+  private final String status;
+  private final String location;
+  private final String dir;
+  private final TableId tableId;
+  private final TabletHostingGoal goal;
+
+  public TabletInformation(String tableName, TableId tableId, String endRow, 
String prevEndRow,
+      int numFiles, int numWalLogs, long numEntries, long size, String status, 
String location,
+      String dir, TabletHostingGoal goal) {
+    this.tableName = tableName;
+    this.tableId = tableId;
+    this.endRow = endRow;
+    this.prevEndRow = prevEndRow;
+    this.numFiles = numFiles;
+    this.numWalLogs = numWalLogs;
+    this.numEntries = numEntries;
+    this.size = size;
+    this.status = status;
+    this.location = location;
+    this.dir = dir;
+    this.goal = goal;
+  }
+
+  public String getEndRow() {
+    return Objects.requireNonNullElse(this.endRow, "+INF");
+  }
+
+  public String getStartRow() {
+    return Objects.requireNonNullElse(this.prevEndRow, "-INF");
+  }
+
+  public String getTableId() {
+    return tableId.canonical();
+  }
+
+  public String getTablet() {
+    return getStartRow() + " " + getEndRow();
+  }
+
+  public String getTableName() {
+    return this.tableName;
+  }
+
+  public int getNumFiles() {
+    return this.numFiles;
+  }
+
+  public int getNumWalLogs() {
+    return this.numWalLogs;
+  }
+
+  public long getNumEntries() {
+    return this.numEntries;
+  }
+
+  public String getNumEntries(final boolean humanReadable) {
+    if (humanReadable) {
+      return NumUtil.bigNumberForQuantity(numEntries);
+    }
+    return String.format("%,d", numEntries);
+  }

Review Comment:
   I would move this to the shell code.  Someone can call getNumEntries and 
format it however they like when using the API, and there is good chance they 
may not like the way this method formats the data.



##########
core/src/main/java/org/apache/accumulo/core/client/admin/TabletInformation.java:
##########
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.core.client.admin;
+
+import java.util.Objects;
+
+import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.util.NumUtil;
+
+public class TabletInformation {
+
+  private final String tableName;
+  private final String endRow;
+  private final String prevEndRow;
+  private final int numFiles;
+  private final int numWalLogs;
+  private final long numEntries;
+  private final long size;
+  private final String status;
+  private final String location;
+  private final String dir;
+  private final TableId tableId;
+  private final TabletHostingGoal goal;
+
+  public TabletInformation(String tableName, TableId tableId, String endRow, 
String prevEndRow,
+      int numFiles, int numWalLogs, long numEntries, long size, String status, 
String location,
+      String dir, TabletHostingGoal goal) {
+    this.tableName = tableName;
+    this.tableId = tableId;
+    this.endRow = endRow;
+    this.prevEndRow = prevEndRow;
+    this.numFiles = numFiles;
+    this.numWalLogs = numWalLogs;
+    this.numEntries = numEntries;
+    this.size = size;
+    this.status = status;
+    this.location = location;
+    this.dir = dir;
+    this.goal = goal;
+  }
+
+  public String getEndRow() {
+    return Objects.requireNonNullElse(this.endRow, "+INF");
+  }
+
+  public String getStartRow() {
+    return Objects.requireNonNullElse(this.prevEndRow, "-INF");
+  }
+
+  public String getTableId() {
+    return tableId.canonical();
+  }
+
+  public String getTablet() {
+    return getStartRow() + " " + getEndRow();
+  }
+
+  public String getTableName() {
+    return this.tableName;
+  }
+
+  public int getNumFiles() {
+    return this.numFiles;
+  }
+
+  public int getNumWalLogs() {
+    return this.numWalLogs;
+  }
+
+  public long getNumEntries() {
+    return this.numEntries;
+  }
+
+  public String getNumEntries(final boolean humanReadable) {
+    if (humanReadable) {
+      return NumUtil.bigNumberForQuantity(numEntries);
+    }
+    return String.format("%,d", numEntries);
+  }
+
+  public long getSize() {
+    return this.size;
+  }
+
+  public String getSize(final boolean humanReadable) {
+    if (humanReadable) {
+      return NumUtil.bigNumberForSize(size);
+    }
+    return String.format("%,d", size);
+  }
+
+  public String getStatus() {
+    return this.status;
+  }
+
+  public String getLocation() {

Review Comment:
   Since a tablet may not have a location, could have an optional return type 
to make this clear.
   
   ```suggestion
     public Optional<String> getLocation() {
   ```
   
   Also as follow on issue, this could possible use the new type introduced in 
#3626 



##########
core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java:
##########
@@ -2162,12 +2172,54 @@ public Stream<HostingGoalForTablet> 
getTabletHostingGoal(final String tableName,
     return tabletsMetadata.stream().peek(tm -> {
       if (scanRangeStart != null && tm.getEndRow() != null
           && tm.getEndRow().compareTo(scanRangeStart) < 0) {
-        log.debug(">>>> tablet {} is before scan start range: {}", 
tm.getExtent(), scanRangeStart);
+        log.debug("tablet {} is before scan start range: {}", tm.getExtent(), 
scanRangeStart);
         throw new RuntimeException("Bug in ample or this code.");
       }
     }).takeWhile(tm -> tm.getPrevEndRow() == null
         || !range.afterEndKey(new 
Key(tm.getPrevEndRow()).followingKey(PartialKey.ROW)))
         .map(tm -> new HostingGoalForTablet(new TabletIdImpl(tm.getExtent()), 
tm.getHostingGoal()))
         .onClose(tabletsMetadata::close);
   }
+
+  @Override
+  public Stream<TabletInformation> getTabletInformation(final String 
tableName, final Range range)
+      throws TableNotFoundException {
+    EXISTING_TABLE_NAME.validate(tableName);
+
+    final Text scanRangeStart = (range.getStartKey() == null) ? null : 
range.getStartKey().getRow();
+    TableId tableId = context.getTableId(tableName);
+
+    TabletsMetadata tabletsMetadata =
+        
context.getAmple().readTablets().forTable(tableId).overlapping(scanRangeStart, 
true, null)
+            .fetch(HOSTING_GOAL, LOCATION, DIR, PREV_ROW, FILES, LAST, LOGS, 
SUSPEND)
+            .checkConsistency().build();
+
+    Set<TServerInstance> liveTserverSet = 
TabletMetadata.getLiveTServers(context);
+    long[] numEntries = new long[1];
+    long[] size = new long[1];
+    return tabletsMetadata.stream().peek(tm -> {
+      if (scanRangeStart != null && tm.getEndRow() != null
+          && tm.getEndRow().compareTo(scanRangeStart) < 0) {
+        log.debug("tablet {} is before scan start range: {}", tm.getExtent(), 
scanRangeStart);
+        throw new RuntimeException("Bug in ample or this code.");
+      }
+      numEntries[0] = 0;
+      size[0] = 0;
+      for (DataFileValue dfv : tm.getFilesMap().values()) {
+        numEntries[0] = dfv.getNumEntries();
+        size[0] += dfv.getSize();
+      }

Review Comment:
   If the TabletInformation class took a tablet metadata in it constructor, 
then this computation could be done in the constructor. 



##########
core/src/main/java/org/apache/accumulo/core/client/admin/TabletInformation.java:
##########
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.core.client.admin;
+
+import java.util.Objects;
+
+import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.util.NumUtil;
+
+public class TabletInformation {
+
+  private final String tableName;
+  private final String endRow;
+  private final String prevEndRow;
+  private final int numFiles;
+  private final int numWalLogs;
+  private final long numEntries;
+  private final long size;
+  private final String status;
+  private final String location;
+  private final String dir;
+  private final TableId tableId;
+  private final TabletHostingGoal goal;
+
+  public TabletInformation(String tableName, TableId tableId, String endRow, 
String prevEndRow,
+      int numFiles, int numWalLogs, long numEntries, long size, String status, 
String location,
+      String dir, TabletHostingGoal goal) {
+    this.tableName = tableName;
+    this.tableId = tableId;
+    this.endRow = endRow;
+    this.prevEndRow = prevEndRow;
+    this.numFiles = numFiles;
+    this.numWalLogs = numWalLogs;
+    this.numEntries = numEntries;
+    this.size = size;
+    this.status = status;
+    this.location = location;
+    this.dir = dir;
+    this.goal = goal;
+  }
+
+  public String getEndRow() {
+    return Objects.requireNonNullElse(this.endRow, "+INF");
+  }
+
+  public String getStartRow() {
+    return Objects.requireNonNullElse(this.prevEndRow, "-INF");
+  }
+
+  public String getTableId() {
+    return tableId.canonical();
+  }
+
+  public String getTablet() {
+    return getStartRow() + " " + getEndRow();
+  }
+
+  public String getTableName() {
+    return this.tableName;
+  }
+
+  public int getNumFiles() {
+    return this.numFiles;
+  }
+
+  public int getNumWalLogs() {
+    return this.numWalLogs;
+  }
+
+  public long getNumEntries() {
+    return this.numEntries;
+  }
+
+  public String getNumEntries(final boolean humanReadable) {
+    if (humanReadable) {
+      return NumUtil.bigNumberForQuantity(numEntries);
+    }
+    return String.format("%,d", numEntries);
+  }
+
+  public long getSize() {

Review Comment:
   ```suggestion
     /**
      * @return an estimated size of the tablet data on disk, which is likely 
the compressed size of the data.
      */
     public long getEstimatedSize() {
   ```



##########
core/src/main/java/org/apache/accumulo/core/client/admin/TabletInformation.java:
##########
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.core.client.admin;
+
+import java.util.Objects;
+
+import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.util.NumUtil;
+
+public class TabletInformation {
+
+  private final String tableName;
+  private final String endRow;
+  private final String prevEndRow;
+  private final int numFiles;
+  private final int numWalLogs;
+  private final long numEntries;
+  private final long size;
+  private final String status;
+  private final String location;
+  private final String dir;
+  private final TableId tableId;
+  private final TabletHostingGoal goal;
+
+  public TabletInformation(String tableName, TableId tableId, String endRow, 
String prevEndRow,
+      int numFiles, int numWalLogs, long numEntries, long size, String status, 
String location,
+      String dir, TabletHostingGoal goal) {
+    this.tableName = tableName;
+    this.tableId = tableId;
+    this.endRow = endRow;
+    this.prevEndRow = prevEndRow;
+    this.numFiles = numFiles;
+    this.numWalLogs = numWalLogs;
+    this.numEntries = numEntries;
+    this.size = size;
+    this.status = status;
+    this.location = location;
+    this.dir = dir;
+    this.goal = goal;
+  }
+
+  public String getEndRow() {
+    return Objects.requireNonNullElse(this.endRow, "+INF");
+  }
+
+  public String getStartRow() {
+    return Objects.requireNonNullElse(this.prevEndRow, "-INF");
+  }
+
+  public String getTableId() {
+    return tableId.canonical();
+  }
+
+  public String getTablet() {
+    return getStartRow() + " " + getEndRow();
+  }
+
+  public String getTableName() {
+    return this.tableName;
+  }
+
+  public int getNumFiles() {
+    return this.numFiles;
+  }
+
+  public int getNumWalLogs() {
+    return this.numWalLogs;
+  }
+
+  public long getNumEntries() {

Review Comment:
   ```suggestion
     public long getEstimatedEntries() {
   ```



##########
core/src/main/java/org/apache/accumulo/core/client/admin/TabletInformation.java:
##########
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.core.client.admin;
+
+import java.util.Objects;
+
+import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.util.NumUtil;
+
+public class TabletInformation {
+
+  private final String tableName;
+  private final String endRow;
+  private final String prevEndRow;
+  private final int numFiles;
+  private final int numWalLogs;
+  private final long numEntries;
+  private final long size;
+  private final String status;
+  private final String location;
+  private final String dir;
+  private final TableId tableId;
+  private final TabletHostingGoal goal;
+
+  public TabletInformation(String tableName, TableId tableId, String endRow, 
String prevEndRow,
+      int numFiles, int numWalLogs, long numEntries, long size, String status, 
String location,
+      String dir, TabletHostingGoal goal) {
+    this.tableName = tableName;
+    this.tableId = tableId;
+    this.endRow = endRow;
+    this.prevEndRow = prevEndRow;
+    this.numFiles = numFiles;
+    this.numWalLogs = numWalLogs;
+    this.numEntries = numEntries;
+    this.size = size;
+    this.status = status;
+    this.location = location;
+    this.dir = dir;
+    this.goal = goal;
+  }

Review Comment:
   If its workable it would be nice to make this object a wrapper around 
TabletMetadata, then it does not need to duplicate alot of the fields.
   
   ```suggestion
     private final TabletMetadata tabletMetadata;
   
     public TabletInformation(TabletMetadata tabletMetadata) {
       this.tabletMetadata = tabletMetadata;
     }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to