blob: cbf9e4a3c219bd0186a862b65cda72c4a809c8ab [file] [log] [blame]
/*
* 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
*
* http://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.hadoop.hbase.client;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.TableName;
import org.apache.yetus.audience.InterfaceAudience;
@InterfaceAudience.Private
public class RegionInfoBuilder {
/** A non-capture group so that this can be embedded. */
public static final String ENCODED_REGION_NAME_REGEX = "(?:[a-f0-9]+)";
//TODO: Move NO_HASH to HStoreFile which is really the only place it is used.
public static final String NO_HASH = null;
public static final RegionInfo UNDEFINED =
RegionInfoBuilder.newBuilder(TableName.valueOf("__UNDEFINED__")).build();
/**
* RegionInfo for first meta region
* You cannot use this builder to make an instance of the {@link #FIRST_META_REGIONINFO}.
* Just refer to this instance. Also, while the instance is actually a MutableRI, its type is
* just RI so the mutable methods are not available (unless you go casting); it appears
* as immutable (I tried adding Immutable type but it just makes a mess).
*/
// TODO: How come Meta regions still do not have encoded region names? Fix.
// hbase:meta,,1.1588230740 should be the hbase:meta first region name.
public static final RegionInfo FIRST_META_REGIONINFO =
new MutableRegionInfo(1L, TableName.META_TABLE_NAME, RegionInfo.DEFAULT_REPLICA_ID);
private final TableName tableName;
private byte[] startKey = HConstants.EMPTY_START_ROW;
private byte[] endKey = HConstants.EMPTY_END_ROW;
private long regionId = System.currentTimeMillis();
private int replicaId = RegionInfo.DEFAULT_REPLICA_ID;
private boolean offLine = false;
private boolean split = false;
public static RegionInfoBuilder newBuilder(TableName tableName) {
return new RegionInfoBuilder(tableName);
}
public static RegionInfoBuilder newBuilder(RegionInfo regionInfo) {
return new RegionInfoBuilder(regionInfo);
}
private RegionInfoBuilder(TableName tableName) {
this.tableName = tableName;
}
private RegionInfoBuilder(RegionInfo regionInfo) {
this.tableName = regionInfo.getTable();
this.startKey = regionInfo.getStartKey();
this.endKey = regionInfo.getEndKey();
this.offLine = regionInfo.isOffline();
this.split = regionInfo.isSplit();
this.regionId = regionInfo.getRegionId();
this.replicaId = regionInfo.getReplicaId();
}
public RegionInfoBuilder setStartKey(byte[] startKey) {
this.startKey = startKey;
return this;
}
public RegionInfoBuilder setEndKey(byte[] endKey) {
this.endKey = endKey;
return this;
}
public RegionInfoBuilder setRegionId(long regionId) {
this.regionId = regionId;
return this;
}
public RegionInfoBuilder setReplicaId(int replicaId) {
this.replicaId = replicaId;
return this;
}
public RegionInfoBuilder setSplit(boolean split) {
this.split = split;
return this;
}
@Deprecated
public RegionInfoBuilder setOffline(boolean offLine) {
this.offLine = offLine;
return this;
}
public RegionInfo build() {
return new MutableRegionInfo(tableName, startKey, endKey, split,
regionId, replicaId, offLine);
}
}