Skip to content

Commit 7737ae1

Browse files
HBASE-29160: Cache region name string in RegionInfo (#6742)
Signed-off-by: Wellington Chevreuil <[email protected]>
1 parent 4c83128 commit 7737ae1

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

hbase-client/src/main/java/org/apache/hadoop/hbase/client/MutableRegionInfo.java

+14-2
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class MutableRegionInfo implements RegionInfo {
6464
private final int hashCode;
6565
private final String encodedName;
6666
private final byte[] encodedNameAsBytes;
67+
private String nameAsString = null;
6768
private final TableName tableName;
6869

6970
private static int generateHashCode(final TableName tableName, final byte[] startKey,
@@ -149,10 +150,21 @@ public byte[] getRegionName() {
149150
return regionName;
150151
}
151152

152-
/** Returns Region name as a String for use in logging, etc. */
153+
/**
154+
* Returns region name as a String for use in logging, tracing, etc. Expensive enough to compute
155+
* that we do it on first request and save it. Used often because it's included in trace of every
156+
* RPC.
157+
*/
153158
@Override
154159
public String getRegionNameAsString() {
155-
return RegionInfo.getRegionNameAsString(this, this.regionName);
160+
if (nameAsString == null) {
161+
String name = RegionInfo.getRegionNameAsString(this, this.regionName);
162+
// may race with other threads setting this, but that's ok
163+
nameAsString = name;
164+
return name;
165+
} else {
166+
return nameAsString;
167+
}
156168
}
157169

158170
/** Returns the encoded region name */

0 commit comments

Comments
 (0)