http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3ec80d3/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java index f6052a7..e710c82 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java @@ -57,9 +57,9 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.apache.hadoop.hbase.HConstants; -import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter; import org.apache.hadoop.hbase.filter.PageFilter; @@ -161,7 +161,7 @@ public abstract class BaseResultIterators extends ExplainTable implements Result static final Function<HRegionLocation, KeyRange> TO_KEY_RANGE = new Function<HRegionLocation, KeyRange>() { @Override public KeyRange apply(HRegionLocation region) { - return KeyRange.getKeyRange(region.getRegionInfo().getStartKey(), region.getRegionInfo().getEndKey()); + return KeyRange.getKeyRange(region.getRegion().getStartKey(), region.getRegion().getEndKey()); } }; @@ -533,7 +533,7 @@ public abstract class BaseResultIterators extends ExplainTable implements Result int nBoundaries = regionLocations.size() - 1; List<byte[]> ranges = Lists.newArrayListWithExpectedSize(nBoundaries); for (int i = 0; i < nBoundaries; i++) { - HRegionInfo regionInfo = regionLocations.get(i).getRegionInfo(); + RegionInfo regionInfo = regionLocations.get(i).getRegion(); ranges.add(regionInfo.getEndKey()); } return ranges; @@ -650,7 +650,7 @@ public abstract class BaseResultIterators extends ExplainTable implements Result List<Scan> scans = Lists.newArrayListWithExpectedSize(2); while (regionIndex <= stopIndex) { HRegionLocation regionLocation = regionLocations.get(regionIndex); - HRegionInfo regionInfo = regionLocation.getRegionInfo(); + RegionInfo regionInfo = regionLocation.getRegion(); Scan newScan = ScanUtil.newScan(scan); byte[] endKey; if (regionIndex == stopIndex) { @@ -727,7 +727,7 @@ public abstract class BaseResultIterators extends ExplainTable implements Result if (stopKey.length > 0) { stopIndex = Math.min(stopIndex, regionIndex + getIndexContainingExclusive(regionBoundaries.subList(regionIndex, stopIndex), stopKey)); if (isLocalIndex) { - stopKey = regionLocations.get(stopIndex).getRegionInfo().getEndKey(); + stopKey = regionLocations.get(stopIndex).getRegion().getEndKey(); } } List<List<Scan>> parallelScans = Lists.newArrayListWithExpectedSize(stopIndex - regionIndex + 1); @@ -773,7 +773,7 @@ public abstract class BaseResultIterators extends ExplainTable implements Result // Merge bisect with guideposts for all but the last region while (regionIndex <= stopIndex) { HRegionLocation regionLocation = regionLocations.get(regionIndex); - HRegionInfo regionInfo = regionLocation.getRegionInfo(); + RegionInfo regionInfo = regionLocation.getRegion(); byte[] currentGuidePostBytes = currentGuidePost.copyBytes(); byte[] endKey, endRegionKey = EMPTY_BYTE_ARRAY; if (regionIndex == stopIndex) {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3ec80d3/phoenix-core/src/main/java/org/apache/phoenix/iterate/MapReduceParallelScanGrouper.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/MapReduceParallelScanGrouper.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/MapReduceParallelScanGrouper.java index 593608f..f25d89d 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/MapReduceParallelScanGrouper.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/MapReduceParallelScanGrouper.java @@ -22,15 +22,16 @@ import java.util.List; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; + import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HConstants; -import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.client.Scan; -import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos; -import org.apache.hadoop.hbase.protobuf.generated.SnapshotProtos; +import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; +import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription; +import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest; import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils; import org.apache.hadoop.hbase.snapshot.SnapshotManifest; import org.apache.phoenix.compile.QueryPlan; @@ -66,7 +67,7 @@ public class MapReduceParallelScanGrouper implements ParallelScanGrouper { Path rootDir = new Path(conf.get(HConstants.HBASE_DIR)); FileSystem fs = rootDir.getFileSystem(conf); Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir); - HBaseProtos.SnapshotDescription snapshotDescription = SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDir); + SnapshotDescription snapshotDescription = SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDir); SnapshotManifest manifest = SnapshotManifest.open(conf, fs, snapshotDir, snapshotDescription); return getRegionLocationsFromManifest(manifest); } @@ -80,14 +81,14 @@ public class MapReduceParallelScanGrouper implements ParallelScanGrouper { } private List<HRegionLocation> getRegionLocationsFromManifest(SnapshotManifest manifest) { - List<SnapshotProtos.SnapshotRegionManifest> regionManifests = manifest.getRegionManifests(); + List<SnapshotRegionManifest> regionManifests = manifest.getRegionManifests(); Preconditions.checkNotNull(regionManifests); List<HRegionLocation> regionLocations = Lists.newArrayListWithCapacity(regionManifests.size()); - for (SnapshotProtos.SnapshotRegionManifest regionManifest : regionManifests) { + for (SnapshotRegionManifest regionManifest : regionManifests) { regionLocations.add(new HRegionLocation( - HRegionInfo.convert(regionManifest.getRegionInfo()), null)); + ProtobufUtil.toRegionInfo(regionManifest.getRegionInfo()), null)); } return regionLocations; http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3ec80d3/phoenix-core/src/main/java/org/apache/phoenix/iterate/RegionScannerFactory.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/RegionScannerFactory.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/RegionScannerFactory.java index 3dcbef9..59f08ae 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/RegionScannerFactory.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/RegionScannerFactory.java @@ -21,6 +21,7 @@ package org.apache.phoenix.iterate; import com.google.common.collect.ImmutableList; import org.apache.hadoop.hbase.*; +import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment; @@ -105,7 +106,7 @@ public abstract class RegionScannerFactory { return new RegionScanner() { private boolean hasReferences = checkForReferenceFiles(); - private HRegionInfo regionInfo = env.getRegionInfo(); + private RegionInfo regionInfo = env.getRegionInfo(); private byte[] actualStartKey = getActualStartKey(); // If there are any reference files after local index region merge some cases we might @@ -150,7 +151,7 @@ public abstract class RegionScannerFactory { } @Override - public HRegionInfo getRegionInfo() { + public RegionInfo getRegionInfo() { return s.getRegionInfo(); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3ec80d3/phoenix-core/src/main/java/org/apache/phoenix/iterate/SnapshotScanner.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/SnapshotScanner.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/SnapshotScanner.java index c09b3c4..35f40ac 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/SnapshotScanner.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/SnapshotScanner.java @@ -19,25 +19,35 @@ package org.apache.phoenix.iterate; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentMap; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; -import org.apache.hadoop.hbase.*; -import org.apache.hadoop.hbase.client.*; - +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.client.AbstractClientScanner; +import org.apache.hadoop.hbase.client.Connection; +import org.apache.hadoop.hbase.client.IsolationLevel; +import org.apache.hadoop.hbase.client.RegionInfo; +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.client.Scan; +import org.apache.hadoop.hbase.client.TableDescriptor; +import org.apache.hadoop.hbase.coprocessor.RegionCoprocessor; import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment; -import org.apache.hadoop.hbase.regionserver.*; +import org.apache.hadoop.hbase.metrics.MetricRegistry; +import org.apache.hadoop.hbase.regionserver.HRegion; +import org.apache.hadoop.hbase.regionserver.OnlineRegions; +import org.apache.hadoop.hbase.regionserver.Region; +import org.apache.hadoop.hbase.regionserver.RegionScanner; import org.apache.phoenix.coprocessor.BaseScannerRegionObserver; import org.apache.phoenix.schema.PTable; -import org.apache.phoenix.util.*; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.ExecutorService; +import org.apache.phoenix.util.EncodedColumnsUtil; public class SnapshotScanner extends AbstractClientScanner { @@ -48,7 +58,7 @@ public class SnapshotScanner extends AbstractClientScanner { List<Cell> values; public SnapshotScanner(Configuration conf, FileSystem fs, Path rootDir, - HTableDescriptor htd, HRegionInfo hri, Scan scan) throws Throwable{ + TableDescriptor htd, RegionInfo hri, Scan scan) throws Throwable{ scan.setIsolationLevel(IsolationLevel.READ_UNCOMMITTED); values = new ArrayList<>(); @@ -119,16 +129,11 @@ public class SnapshotScanner extends AbstractClientScanner { } @Override - public HRegionInfo getRegionInfo() { + public RegionInfo getRegionInfo() { return region.getRegionInfo(); } @Override - public RegionServerServices getRegionServerServices() { - throw new UnsupportedOperationException(); - } - - @Override public ConcurrentMap<String, Object> getSharedData() { throw new UnsupportedOperationException(); } @@ -144,11 +149,6 @@ public class SnapshotScanner extends AbstractClientScanner { } @Override - public Coprocessor getInstance() { - throw new UnsupportedOperationException(); - } - - @Override public int getPriority() { throw new UnsupportedOperationException(); } @@ -164,20 +164,34 @@ public class SnapshotScanner extends AbstractClientScanner { } @Override - public Table getTable(TableName tableName) throws IOException { + public ClassLoader getClassLoader() { throw new UnsupportedOperationException(); } - @Override - public Table getTable(TableName tableName, ExecutorService executorService) - throws IOException { + @Override + public RegionCoprocessor getInstance() { throw new UnsupportedOperationException(); - } + } - @Override - public ClassLoader getClassLoader() { + @Override + public OnlineRegions getOnlineRegions() { throw new UnsupportedOperationException(); - } + } + + @Override + public ServerName getServerName() { + throw new UnsupportedOperationException(); + } + + @Override + public Connection getConnection() { + throw new UnsupportedOperationException(); + } + + @Override + public MetricRegistry getMetricRegistryForRegionServer() { + throw new UnsupportedOperationException(); + } }; } } http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3ec80d3/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableSnapshotResultIterator.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableSnapshotResultIterator.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableSnapshotResultIterator.java index df60339..984cb84 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableSnapshotResultIterator.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/TableSnapshotResultIterator.java @@ -18,13 +18,20 @@ package org.apache.phoenix.iterate; +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.CellUtil; -import org.apache.hadoop.hbase.HRegionInfo; -import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.Scan; +import org.apache.hadoop.hbase.client.TableDescriptor; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper; import org.apache.hadoop.hbase.util.FSUtils; @@ -33,13 +40,6 @@ import org.apache.phoenix.monitoring.ScanMetricsHolder; import org.apache.phoenix.schema.tuple.Tuple; import org.apache.phoenix.util.ServerUtil; -import java.io.IOException; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - public class TableSnapshotResultIterator implements ResultIterator { private final Scan scan; @@ -48,8 +48,8 @@ public class TableSnapshotResultIterator implements ResultIterator { private final ScanMetricsHolder scanMetricsHolder; private Tuple lastTuple = null; private static final ResultIterator UNINITIALIZED_SCANNER = ResultIterator.EMPTY_ITERATOR; - private ArrayList<HRegionInfo> regions; - private HTableDescriptor htd; + private ArrayList<RegionInfo> regions; + private TableDescriptor htd; private String snapshotName; private Path restoreDir; @@ -83,14 +83,14 @@ public class TableSnapshotResultIterator implements ResultIterator { Iterator i$ = restoredRegions.iterator(); while(i$.hasNext()) { - HRegionInfo hri = (HRegionInfo)i$.next(); + RegionInfo hri = (RegionInfo)i$.next(); if(CellUtil.overlappingKeys(this.scan.getStartRow(), this.scan.getStopRow(), hri.getStartKey(), hri.getEndKey())) { this.regions.add(hri); } } - Collections.sort(this.regions); + Collections.sort(this.regions,RegionInfo.COMPARATOR); } public boolean initSnapshotScanner() throws SQLException { @@ -103,7 +103,7 @@ public class TableSnapshotResultIterator implements ResultIterator { if (this.currentRegion >= this.regions.size()) return false; try { - HRegionInfo hri = regions.get(this.currentRegion); + RegionInfo hri = regions.get(this.currentRegion); this.scanIterator = new ScanningResultIterator(new SnapshotScanner(configuration, fs, restoreDir, htd, hri, scan), scan, scanMetricsHolder); http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3ec80d3/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java index 73b7a11..2d9629d 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateTableStatement.java @@ -17,16 +17,12 @@ */ package org.apache.phoenix.parse; -import java.util.Collection; import java.util.Collections; import java.util.List; -import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.util.Pair; import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; -import org.apache.phoenix.query.QueryConstants; import org.apache.phoenix.schema.PTableType; -import org.apache.phoenix.schema.TableProperty; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3ec80d3/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java index 1cac944..b49e221 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServices.java @@ -25,11 +25,11 @@ import java.util.Set; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HRegionLocation; -import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Mutation; import org.apache.hadoop.hbase.client.Table; +import org.apache.hadoop.hbase.client.TableDescriptor; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.util.Pair; import org.apache.phoenix.compile.MutationPlan; @@ -69,7 +69,7 @@ public interface ConnectionQueryServices extends QueryServices, MetaDataMutated */ public Table getTable(byte[] tableName) throws SQLException; - public HTableDescriptor getTableDescriptor(byte[] tableName) throws SQLException; + public TableDescriptor getTableDescriptor(byte[] tableName) throws SQLException; public HRegionLocation getTableRegionLocation(byte[] tableName, byte[] row) throws SQLException; public List<HRegionLocation> getAllTableRegions(byte[] tableName) throws SQLException; http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3ec80d3/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java index 66e4661..2077272 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java @@ -17,7 +17,7 @@ */ package org.apache.phoenix.query; import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static org.apache.hadoop.hbase.HColumnDescriptor.TTL; +import static org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder.TTL; import static org.apache.phoenix.coprocessor.MetaDataProtocol.MIN_SYSTEM_TABLE_TIMESTAMP; import static org.apache.phoenix.coprocessor.MetaDataProtocol.PHOENIX_MAJOR_VERSION; import static org.apache.phoenix.coprocessor.MetaDataProtocol.PHOENIX_MINOR_VERSION; @@ -94,26 +94,30 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Pattern; import javax.annotation.concurrent.GuardedBy; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HRegionLocation; -import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.KeepDeletedCells; import org.apache.hadoop.hbase.NamespaceDescriptor; import org.apache.hadoop.hbase.TableExistsException; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Append; import org.apache.hadoop.hbase.client.ClusterConnection; +import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor; +import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.Mutation; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Table; +import org.apache.hadoop.hbase.client.TableDescriptor; +import org.apache.hadoop.hbase.client.TableDescriptorBuilder; import org.apache.hadoop.hbase.client.coprocessor.Batch; import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; @@ -435,10 +439,10 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } @Override - public HTableDescriptor getTableDescriptor(byte[] tableName) throws SQLException { + public TableDescriptor getTableDescriptor(byte[] tableName) throws SQLException { Table htable = getTable(tableName); try { - return htable.getTableDescriptor(); + return htable.getDescriptor(); } catch (IOException e) { if(e instanceof org.apache.hadoop.hbase.TableNotFoundException || e.getCause() instanceof org.apache.hadoop.hbase.TableNotFoundException) { @@ -568,7 +572,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement HRegionLocation regionLocation = ((ClusterConnection)connection).getRegionLocation( TableName.valueOf(tableName), currentKey, reload); locations.add(regionLocation); - currentKey = regionLocation.getRegionInfo().getEndKey(); + currentKey = regionLocation.getRegion().getEndKey(); } while (!Bytes.equals(currentKey, HConstants.EMPTY_END_ROW)); return locations; } catch (org.apache.hadoop.hbase.TableNotFoundException e) { @@ -700,30 +704,31 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } - private HColumnDescriptor generateColumnFamilyDescriptor(Pair<byte[],Map<String,Object>> family, PTableType tableType) throws SQLException { - HColumnDescriptor columnDesc = new HColumnDescriptor(family.getFirst()); + private ColumnFamilyDescriptor generateColumnFamilyDescriptor(Pair<byte[],Map<String,Object>> family, PTableType tableType) throws SQLException { + ColumnFamilyDescriptorBuilder columnDescBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family.getFirst()); if (tableType != PTableType.VIEW) { if(props.get(QueryServices.DEFAULT_KEEP_DELETED_CELLS_ATTRIB) != null){ - columnDesc.setKeepDeletedCells(props.getBoolean( - QueryServices.DEFAULT_KEEP_DELETED_CELLS_ATTRIB, QueryServicesOptions.DEFAULT_KEEP_DELETED_CELLS)); + columnDescBuilder.setKeepDeletedCells(props.getBoolean(QueryServices.DEFAULT_KEEP_DELETED_CELLS_ATTRIB, + QueryServicesOptions.DEFAULT_KEEP_DELETED_CELLS) ? KeepDeletedCells.TRUE + : KeepDeletedCells.FALSE); } - columnDesc.setDataBlockEncoding(SchemaUtil.DEFAULT_DATA_BLOCK_ENCODING); - columnDesc.setBloomFilterType(BloomType.NONE); + columnDescBuilder.setDataBlockEncoding(SchemaUtil.DEFAULT_DATA_BLOCK_ENCODING); + columnDescBuilder.setBloomFilterType(BloomType.NONE); for (Entry<String,Object> entry : family.getSecond().entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); - setHColumnDescriptorValue(columnDesc, key, value); + setHColumnDescriptorValue(columnDescBuilder, key, value); } } - return columnDesc; + return columnDescBuilder.build(); } // Workaround HBASE-14737 - private static void setHColumnDescriptorValue(HColumnDescriptor columnDesc, String key, Object value) { + private static void setHColumnDescriptorValue(ColumnFamilyDescriptorBuilder columnDescBuilder, String key, Object value) { if (HConstants.VERSIONS.equals(key)) { - columnDesc.setMaxVersions(getMaxVersion(value)); + columnDescBuilder.setMaxVersions(getMaxVersion(value)); } else { - columnDesc.setValue(key, value == null ? null : value.toString()); + columnDescBuilder.setValue(key, value == null ? null : value.toString()); } } @@ -741,7 +746,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement return Integer.parseInt(stringValue); } - private void modifyColumnFamilyDescriptor(HColumnDescriptor hcd, Map<String,Object> props) throws SQLException { + private void modifyColumnFamilyDescriptor(ColumnFamilyDescriptorBuilder hcd, Map<String,Object> props) throws SQLException { for (Entry<String, Object> entry : props.entrySet()) { String propName = entry.getKey(); Object value = entry.getValue(); @@ -749,32 +754,32 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } } - private HTableDescriptor generateTableDescriptor(byte[] physicalTableName, HTableDescriptor existingDesc, + private TableDescriptorBuilder generateTableDescriptor(byte[] physicalTableName, TableDescriptor existingDesc, PTableType tableType, Map<String, Object> tableProps, List<Pair<byte[], Map<String, Object>>> families, byte[][] splits, boolean isNamespaceMapped) throws SQLException { String defaultFamilyName = (String)tableProps.remove(PhoenixDatabaseMetaData.DEFAULT_COLUMN_FAMILY_NAME); - HTableDescriptor tableDescriptor = (existingDesc != null) ? new HTableDescriptor(existingDesc) - : new HTableDescriptor(physicalTableName); + TableDescriptorBuilder tableDescriptorBuilder = (existingDesc != null) ?TableDescriptorBuilder.newBuilder(existingDesc) + : TableDescriptorBuilder.newBuilder(TableName.valueOf(physicalTableName)); // By default, do not automatically rebuild/catch up an index on a write failure for (Entry<String,Object> entry : tableProps.entrySet()) { String key = entry.getKey(); if (!TableProperty.isPhoenixTableProperty(key)) { Object value = entry.getValue(); - tableDescriptor.setValue(key, value == null ? null : value.toString()); + tableDescriptorBuilder.setValue(key, value == null ? null : value.toString()); } } if (families.isEmpty()) { if (tableType != PTableType.VIEW) { byte[] defaultFamilyByes = defaultFamilyName == null ? QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES : Bytes.toBytes(defaultFamilyName); // Add dummy column family so we have key values for tables that - HColumnDescriptor columnDescriptor = generateColumnFamilyDescriptor(new Pair<byte[],Map<String,Object>>(defaultFamilyByes,Collections.<String,Object>emptyMap()), tableType); - tableDescriptor.addFamily(columnDescriptor); + ColumnFamilyDescriptor columnDescriptor = generateColumnFamilyDescriptor(new Pair<byte[],Map<String,Object>>(defaultFamilyByes,Collections.<String,Object>emptyMap()), tableType); + tableDescriptorBuilder.addColumnFamily(columnDescriptor); } } else { for (Pair<byte[],Map<String,Object>> family : families) { // If family is only in phoenix description, add it. otherwise, modify its property accordingly. byte[] familyByte = family.getFirst(); - if (tableDescriptor.getFamily(familyByte) == null) { + if (tableDescriptorBuilder.build().getColumnFamily(familyByte) == null) { if (tableType == PTableType.VIEW) { String fullTableName = Bytes.toString(physicalTableName); throw new ReadOnlyTableException( @@ -783,32 +788,34 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement SchemaUtil.getTableNameFromFullName(fullTableName), Bytes.toString(familyByte)); } - HColumnDescriptor columnDescriptor = generateColumnFamilyDescriptor(family, tableType); - tableDescriptor.addFamily(columnDescriptor); + ColumnFamilyDescriptor columnDescriptor = generateColumnFamilyDescriptor(family, tableType); + tableDescriptorBuilder.addColumnFamily(columnDescriptor); } else { if (tableType != PTableType.VIEW) { - HColumnDescriptor columnDescriptor = tableDescriptor.getFamily(familyByte); + ColumnFamilyDescriptor columnDescriptor = tableDescriptorBuilder.build().getColumnFamily(familyByte); if (columnDescriptor == null) { throw new IllegalArgumentException("Unable to find column descriptor with family name " + Bytes.toString(family.getFirst())); } - modifyColumnFamilyDescriptor(columnDescriptor, family.getSecond()); + ColumnFamilyDescriptorBuilder columnDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(columnDescriptor); + modifyColumnFamilyDescriptor(columnDescriptorBuilder, family.getSecond()); + tableDescriptorBuilder.addColumnFamily(columnDescriptorBuilder.build()); } } } } - addCoprocessors(physicalTableName, tableDescriptor, tableType, tableProps); + addCoprocessors(physicalTableName, tableDescriptorBuilder, tableType, tableProps); // PHOENIX-3072: Set index priority if this is a system table or index table if (tableType == PTableType.SYSTEM) { - tableDescriptor.setValue(QueryConstants.PRIORITY, + tableDescriptorBuilder.setValue(QueryConstants.PRIORITY, String.valueOf(PhoenixRpcSchedulerFactory.getMetadataPriority(config))); } else if (tableType == PTableType.INDEX // Global, mutable index - && !isLocalIndexTable(tableDescriptor.getFamiliesKeys()) + && !isLocalIndexTable(tableDescriptorBuilder.build().getColumnFamilyNames()) && !Boolean.TRUE.equals(tableProps.get(PhoenixDatabaseMetaData.IMMUTABLE_ROWS))) { - tableDescriptor.setValue(QueryConstants.PRIORITY, + tableDescriptorBuilder.setValue(QueryConstants.PRIORITY, String.valueOf(PhoenixRpcSchedulerFactory.getIndexPriority(config))); } - return tableDescriptor; + return tableDescriptorBuilder; } private boolean isLocalIndexTable(Collection<byte[]> families) { @@ -822,22 +829,17 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } - private void addCoprocessors(byte[] tableName, HTableDescriptor descriptor, PTableType tableType, Map<String,Object> tableProps) throws SQLException { + private void addCoprocessors(byte[] tableName, TableDescriptorBuilder builder, PTableType tableType, Map<String,Object> tableProps) throws SQLException { // The phoenix jar must be available on HBase classpath int priority = props.getInt(QueryServices.COPROCESSOR_PRIORITY_ATTRIB, QueryServicesOptions.DEFAULT_COPROCESSOR_PRIORITY); try { - if (!descriptor.hasCoprocessor(ScanRegionObserver.class.getName())) { - descriptor.addCoprocessor(ScanRegionObserver.class.getName(), null, priority, null); - } - if (!descriptor.hasCoprocessor(UngroupedAggregateRegionObserver.class.getName())) { - descriptor.addCoprocessor(UngroupedAggregateRegionObserver.class.getName(), null, priority, null); - } - if (!descriptor.hasCoprocessor(GroupedAggregateRegionObserver.class.getName())) { - descriptor.addCoprocessor(GroupedAggregateRegionObserver.class.getName(), null, priority, null); - } - if (!descriptor.hasCoprocessor(ServerCachingEndpointImpl.class.getName())) { - descriptor.addCoprocessor(ServerCachingEndpointImpl.class.getName(), null, priority, null); - } + builder.addCoprocessor(ScanRegionObserver.class.getName(), null, priority, null); + + builder.addCoprocessor(UngroupedAggregateRegionObserver.class.getName(), null, priority, null); + + builder.addCoprocessor(GroupedAggregateRegionObserver.class.getName(), null, priority, null); + + builder.addCoprocessor(ServerCachingEndpointImpl.class.getName(), null, priority, null); boolean isTransactional = Boolean.TRUE.equals(tableProps.get(TableProperty.TRANSACTIONAL.name())) || Boolean.TRUE.equals(tableProps.get(PhoenixTransactionContext.READ_NON_TX_DATA)); // For ALTER TABLE @@ -849,67 +851,49 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement && !SchemaUtil.isMetaTable(tableName) && !SchemaUtil.isStatsTable(tableName)) { if (isTransactional) { - if (!descriptor.hasCoprocessor(PhoenixTransactionalIndexer.class.getName())) { - descriptor.addCoprocessor(PhoenixTransactionalIndexer.class.getName(), null, priority, null); - } + builder.addCoprocessor(PhoenixTransactionalIndexer.class.getName(), null, priority, null); // For alter table, remove non transactional index coprocessor - if (descriptor.hasCoprocessor(Indexer.class.getName())) { - descriptor.removeCoprocessor(Indexer.class.getName()); - } + builder.removeCoprocessor(Indexer.class.getName()); } else { - if (!descriptor.hasCoprocessor(Indexer.class.getName())) { + if (!builder.build().hasCoprocessor(Indexer.class.getName())) { // If exception on alter table to transition back to non transactional - if (descriptor.hasCoprocessor(PhoenixTransactionalIndexer.class.getName())) { - descriptor.removeCoprocessor(PhoenixTransactionalIndexer.class.getName()); - } + builder.removeCoprocessor(PhoenixTransactionalIndexer.class.getName()); Map<String, String> opts = Maps.newHashMapWithExpectedSize(1); opts.put(NonTxIndexBuilder.CODEC_CLASS_NAME_KEY, PhoenixIndexCodec.class.getName()); - Indexer.enableIndexing(descriptor, PhoenixIndexBuilder.class, opts, priority); + Indexer.enableIndexing(builder, PhoenixIndexBuilder.class, opts, priority); } } } - if (SchemaUtil.isStatsTable(tableName) && !descriptor.hasCoprocessor(MultiRowMutationEndpoint.class.getName())) { - descriptor.addCoprocessor(MultiRowMutationEndpoint.class.getName(), + if (SchemaUtil.isStatsTable(tableName)) { + builder.addCoprocessor(MultiRowMutationEndpoint.class.getName(), null, priority, null); } - Set<byte[]> familiesKeys = descriptor.getFamiliesKeys(); + Set<byte[]> familiesKeys = builder.build().getColumnFamilyNames(); for(byte[] family: familiesKeys) { if(Bytes.toString(family).startsWith(QueryConstants.LOCAL_INDEX_COLUMN_FAMILY_PREFIX)) { - if (!descriptor.hasCoprocessor(IndexHalfStoreFileReaderGenerator.class.getName())) { - descriptor.addCoprocessor(IndexHalfStoreFileReaderGenerator.class.getName(), + builder.addCoprocessor(IndexHalfStoreFileReaderGenerator.class.getName(), null, priority, null); break; - } } } // Setup split policy on Phoenix metadata table to ensure that the key values of a Phoenix table // stay on the same region. if (SchemaUtil.isMetaTable(tableName) || SchemaUtil.isFunctionTable(tableName)) { - if (!descriptor.hasCoprocessor(MetaDataEndpointImpl.class.getName())) { - descriptor.addCoprocessor(MetaDataEndpointImpl.class.getName(), null, priority, null); - } + builder.addCoprocessor(MetaDataEndpointImpl.class.getName(), null, priority, null); if(SchemaUtil.isMetaTable(tableName) ) { - if (!descriptor.hasCoprocessor(MetaDataRegionObserver.class.getName())) { - descriptor.addCoprocessor(MetaDataRegionObserver.class.getName(), null, priority + 1, null); - } + builder.addCoprocessor(MetaDataRegionObserver.class.getName(), null, priority + 1, null); } } else if (SchemaUtil.isSequenceTable(tableName)) { - if (!descriptor.hasCoprocessor(SequenceRegionObserver.class.getName())) { - descriptor.addCoprocessor(SequenceRegionObserver.class.getName(), null, priority, null); - } + builder.addCoprocessor(SequenceRegionObserver.class.getName(), null, priority, null); } if (isTransactional) { - if (!descriptor.hasCoprocessor(PhoenixTransactionalProcessor.class.getName())) { - descriptor.addCoprocessor(PhoenixTransactionalProcessor.class.getName(), null, priority - 10, null); - } + builder.addCoprocessor(PhoenixTransactionalProcessor.class.getName(), null, priority - 10, null); } else { // If exception on alter table to transition back to non transactional - if (descriptor.hasCoprocessor(PhoenixTransactionalProcessor.class.getName())) { - descriptor.removeCoprocessor(PhoenixTransactionalProcessor.class.getName()); - } + builder.removeCoprocessor(PhoenixTransactionalProcessor.class.getName()); } } catch (IOException e) { throw ServerUtil.parseServerException(e); @@ -921,7 +905,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement String getOperationName(); } - private void pollForUpdatedTableDescriptor(final Admin admin, final HTableDescriptor newTableDescriptor, + private void pollForUpdatedTableDescriptor(final Admin admin, final TableDescriptor newTableDescriptor, final byte[] tableName) throws InterruptedException, TimeoutException { checkAndRetry(new RetriableOperation() { @@ -932,7 +916,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement @Override public boolean checkForCompletion() throws TimeoutException, IOException { - HTableDescriptor tableDesc = admin.getTableDescriptor(TableName.valueOf(tableName)); + TableDescriptor tableDesc = admin.getDescriptor(TableName.valueOf(tableName)); return newTableDescriptor.equals(tableDesc); } }); @@ -1020,11 +1004,11 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement * @return true if table was created and false if it already exists * @throws SQLException */ - private HTableDescriptor ensureTableCreated(byte[] physicalTableName, PTableType tableType, Map<String, Object> props, + private TableDescriptor ensureTableCreated(byte[] physicalTableName, PTableType tableType, Map<String, Object> props, List<Pair<byte[], Map<String, Object>>> families, byte[][] splits, boolean modifyExistingMetaData, boolean isNamespaceMapped) throws SQLException { SQLException sqlE = null; - HTableDescriptor existingDesc = null; + TableDescriptor existingDesc = null; boolean isMetaTable = SchemaUtil.isMetaTable(physicalTableName); boolean tableExist = true; try (Admin admin = getAdmin()) { @@ -1032,7 +1016,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement final String znode = this.props.get(HConstants.ZOOKEEPER_ZNODE_PARENT); logger.debug("Found quorum: " + quorum + ":" + znode); try { - existingDesc = admin.getTableDescriptor(TableName.valueOf(physicalTableName)); + existingDesc = admin.getDescriptor(TableName.valueOf(physicalTableName)); } catch (org.apache.hadoop.hbase.TableNotFoundException e) { tableExist = false; if (tableType == PTableType.VIEW) { @@ -1044,23 +1028,23 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } } - HTableDescriptor newDesc = generateTableDescriptor(physicalTableName, existingDesc, tableType, props, families, + TableDescriptorBuilder newDesc = generateTableDescriptor(physicalTableName, existingDesc, tableType, props, families, splits, isNamespaceMapped); - + if (!tableExist) { - if (newDesc.getValue(MetaDataUtil.IS_LOCAL_INDEX_TABLE_PROP_BYTES) != null && Boolean.TRUE.equals( - PBoolean.INSTANCE.toObject(newDesc.getValue(MetaDataUtil.IS_LOCAL_INDEX_TABLE_PROP_BYTES)))) { - newDesc.setValue(HTableDescriptor.SPLIT_POLICY, IndexRegionSplitPolicy.class.getName()); + if (newDesc.build().getValue(MetaDataUtil.IS_LOCAL_INDEX_TABLE_PROP_BYTES) != null && Boolean.TRUE.equals( + PBoolean.INSTANCE.toObject(newDesc.build().getValue(MetaDataUtil.IS_LOCAL_INDEX_TABLE_PROP_BYTES)))) { + newDesc.setValue(Bytes.toBytes(TableDescriptorBuilder.SPLIT_POLICY), Bytes.toBytes(IndexRegionSplitPolicy.class.getName())); } // Remove the splitPolicy attribute to prevent HBASE-12570 if (isMetaTable) { - newDesc.remove(HTableDescriptor.SPLIT_POLICY); + newDesc.removeValue(Bytes.toBytes(TableDescriptorBuilder.SPLIT_POLICY)); } try { if (splits == null) { - admin.createTable(newDesc); + admin.createTable(newDesc.build()); } else { - admin.createTable(newDesc, splits); + admin.createTable(newDesc.build(), splits); } } catch (TableExistsException e) { // We can ignore this, as it just means that another client beat us @@ -1074,8 +1058,8 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement * server and compatible. This works around HBASE-12570 which causes the cluster to be * brought down. */ - newDesc.setValue(HTableDescriptor.SPLIT_POLICY, MetaDataSplitPolicy.class.getName()); - modifyTable(physicalTableName, newDesc, true); + newDesc.setValue(TableDescriptorBuilder.SPLIT_POLICY, MetaDataSplitPolicy.class.getName()); + modifyTable(physicalTableName, newDesc.build(), true); } return null; } else { @@ -1083,11 +1067,11 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement checkClientServerCompatibility(SchemaUtil.getPhysicalName(SYSTEM_CATALOG_NAME_BYTES, this.getProps()).getName()); } else { for(Pair<byte[],Map<String,Object>> family: families) { - if ((newDesc.getValue(HTableDescriptor.SPLIT_POLICY)==null || !newDesc.getValue(HTableDescriptor.SPLIT_POLICY).equals( + if ((newDesc.build().getValue(TableDescriptorBuilder.SPLIT_POLICY)==null || !newDesc.build().getValue(TableDescriptorBuilder.SPLIT_POLICY).equals( IndexRegionSplitPolicy.class.getName())) && Bytes.toString(family.getFirst()).startsWith( QueryConstants.LOCAL_INDEX_COLUMN_FAMILY_PREFIX)) { - newDesc.setValue(HTableDescriptor.SPLIT_POLICY, IndexRegionSplitPolicy.class.getName()); + newDesc.setValue(TableDescriptorBuilder.SPLIT_POLICY, IndexRegionSplitPolicy.class.getName()); break; } } @@ -1110,14 +1094,14 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement .setSchemaName(SchemaUtil.getSchemaNameFromFullName(physicalTableName)) .setTableName(SchemaUtil.getTableNameFromFullName(physicalTableName)).build().buildException(); } - newDesc.remove(PhoenixTransactionContext.READ_NON_TX_DATA); + newDesc.removeValue(Bytes.toBytes(PhoenixTransactionContext.READ_NON_TX_DATA)); } if (existingDesc.equals(newDesc)) { return null; // Indicate that no metadata was changed } - modifyTable(physicalTableName, newDesc, true); - return newDesc; + modifyTable(physicalTableName, newDesc.build(), true); + return newDesc.build(); } } catch (IOException e) { @@ -1136,16 +1120,16 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement return null; // will never make it here } - private void modifyTable(byte[] tableName, HTableDescriptor newDesc, boolean shouldPoll) throws IOException, + private void modifyTable(byte[] tableName, TableDescriptor newDesc, boolean shouldPoll) throws IOException, InterruptedException, TimeoutException, SQLException { TableName tn = TableName.valueOf(tableName); try (Admin admin = getAdmin()) { if (!allowOnlineTableSchemaUpdate()) { admin.disableTable(tn); - admin.modifyTable(tn, newDesc); // TODO: Update to TableDescriptor + admin.modifyTable(newDesc); // TODO: Update to TableDescriptor admin.enableTable(tn); } else { - admin.modifyTable(tn, newDesc); // TODO: Update to TableDescriptor + admin.modifyTable(newDesc); // TODO: Update to TableDescriptor if (shouldPoll) { pollForUpdatedTableDescriptor(admin, newDesc, tableName); } @@ -1181,8 +1165,8 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement List<byte[]> regionKeys = Lists.newArrayListWithExpectedSize(locations.size()); for (HRegionLocation entry : locations) { if (!serverMap.contains(entry)) { - regionKeys.add(entry.getRegionInfo().getStartKey()); - regionMap.put(entry.getRegionInfo().getRegionName(), entry); + regionKeys.add(entry.getRegion().getStartKey()); + regionMap.put(entry.getRegion().getRegionName(), entry); serverMap.add(entry); } } @@ -1308,7 +1292,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement byte[] physicalIndexName = MetaDataUtil.getViewIndexPhysicalName(physicalTableName); tableProps.put(MetaDataUtil.IS_VIEW_INDEX_TABLE_PROP_NAME, TRUE_BYTES_AS_STRING); - HTableDescriptor desc = ensureTableCreated(physicalIndexName, PTableType.TABLE, tableProps, families, splits, + TableDescriptor desc = ensureTableCreated(physicalIndexName, PTableType.TABLE, tableProps, families, splits, false, isNamespaceMapped); if (desc != null) { if (!Boolean.TRUE.equals(PBoolean.INSTANCE.toObject(desc.getValue(MetaDataUtil.IS_VIEW_INDEX_TABLE_PROP_BYTES)))) { @@ -1327,7 +1311,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement try (Admin admin = getAdmin()) { try { TableName physicalIndexTableName = TableName.valueOf(physicalIndexName); - HTableDescriptor desc = admin.getTableDescriptor(physicalIndexTableName); + TableDescriptor desc = admin.getDescriptor(physicalIndexTableName); if (Boolean.TRUE.equals(PBoolean.INSTANCE.toObject(desc.getValue(MetaDataUtil.IS_VIEW_INDEX_TABLE_PROP_BYTES)))) { final ReadOnlyProps props = this.getProps(); final boolean dropMetadata = props.getBoolean(DROP_METADATA_ATTRIB, DEFAULT_DROP_METADATA); @@ -1350,19 +1334,19 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } private boolean ensureLocalIndexTableDropped(byte[] physicalTableName, long timestamp) throws SQLException { - HTableDescriptor desc = null; + TableDescriptor desc = null; boolean wasDeleted = false; try (Admin admin = getAdmin()) { try { - desc = admin.getTableDescriptor(TableName.valueOf(physicalTableName)); - for (byte[] fam : desc.getFamiliesKeys()) { + desc = admin.getDescriptor(TableName.valueOf(physicalTableName)); + for (byte[] fam : desc.getColumnFamilyNames()) { this.tableStatsCache.invalidate(new GuidePostsKey(physicalTableName, fam)); } final ReadOnlyProps props = this.getProps(); final boolean dropMetadata = props.getBoolean(DROP_METADATA_ATTRIB, DEFAULT_DROP_METADATA); if (dropMetadata) { List<String> columnFamiles = new ArrayList<String>(); - for(HColumnDescriptor cf : desc.getColumnFamilies()) { + for(ColumnFamilyDescriptor cf : desc.getColumnFamilies()) { if(cf.getNameAsString().startsWith(QueryConstants.LOCAL_INDEX_COLUMN_FAMILY_PREFIX)) { columnFamiles.add(cf.getNameAsString()); } @@ -1627,7 +1611,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement for ( byte[] tableName : tableNamesToDelete ) { try { TableName tn = TableName.valueOf(tableName); - HTableDescriptor htableDesc = this.getTableDescriptor(tableName); + TableDescriptor htableDesc = this.getTableDescriptor(tableName); admin.disableTable(tn); admin.deleteTable(tn); tableStatsCache.invalidateAll(htableDesc); @@ -1646,12 +1630,13 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } } - private static Map<String,Object> createPropertiesMap(Map<ImmutableBytesWritable,ImmutableBytesWritable> htableProps) { + private static Map<String,Object> createPropertiesMap(Map<Bytes,Bytes> htableProps) { Map<String,Object> props = Maps.newHashMapWithExpectedSize(htableProps.size()); - for (Map.Entry<ImmutableBytesWritable,ImmutableBytesWritable> entry : htableProps.entrySet()) { - ImmutableBytesWritable key = entry.getKey(); - ImmutableBytesWritable value = entry.getValue(); - props.put(Bytes.toString(key.get(), key.getOffset(), key.getLength()), Bytes.toString(value.get(), value.getOffset(), value.getLength())); + for (Map.Entry<Bytes,Bytes> entry : htableProps.entrySet()) { + Bytes key = entry.getKey(); + Bytes value = entry.getValue(); + props.put(Bytes.toString(key.get(), key.getOffset(), key.getLength()), + Bytes.toString(value.get(), value.getOffset(), value.getLength())); } return props; } @@ -1690,17 +1675,17 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement private void ensureViewIndexTableCreated(PTable table, long timestamp, boolean isNamespaceMapped) throws SQLException { byte[] physicalTableName = table.getPhysicalName().getBytes(); - HTableDescriptor htableDesc = this.getTableDescriptor(physicalTableName); + TableDescriptor htableDesc = this.getTableDescriptor(physicalTableName); Map<String,Object> tableProps = createPropertiesMap(htableDesc.getValues()); List<Pair<byte[],Map<String,Object>>> families = Lists.newArrayListWithExpectedSize(Math.max(1, table.getColumnFamilies().size()+1)); if (families.isEmpty()) { byte[] familyName = SchemaUtil.getEmptyColumnFamily(table); - Map<String,Object> familyProps = createPropertiesMap(htableDesc.getFamily(familyName).getValues()); + Map<String,Object> familyProps = createPropertiesMap(htableDesc.getColumnFamily(familyName).getValues()); families.add(new Pair<byte[],Map<String,Object>>(familyName, familyProps)); } else { for (PColumnFamily family : table.getColumnFamilies()) { byte[] familyName = family.getName().getBytes(); - Map<String,Object> familyProps = createPropertiesMap(htableDesc.getFamily(familyName).getValues()); + Map<String,Object> familyProps = createPropertiesMap(htableDesc.getColumnFamily(familyName).getValues()); families.add(new Pair<byte[],Map<String,Object>>(familyName, familyProps)); } // Always create default column family, because we don't know in advance if we'll @@ -1723,12 +1708,12 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement public MetaDataMutationResult addColumn(final List<Mutation> tableMetaData, PTable table, Map<String, List<Pair<String,Object>>> stmtProperties, Set<String> colFamiliesForPColumnsToBeAdded, List<PColumn> columns) throws SQLException { List<Pair<byte[], Map<String, Object>>> families = new ArrayList<>(stmtProperties.size()); Map<String, Object> tableProps = new HashMap<String, Object>(); - Set<HTableDescriptor> tableDescriptors = Collections.emptySet(); - Set<HTableDescriptor> origTableDescriptors = Collections.emptySet(); + Set<TableDescriptor> tableDescriptors = Collections.emptySet(); + Set<TableDescriptor> origTableDescriptors = Collections.emptySet(); boolean nonTxToTx = false; - Pair<HTableDescriptor,HTableDescriptor> tableDescriptorPair = separateAndValidateProperties(table, stmtProperties, colFamiliesForPColumnsToBeAdded, tableProps); - HTableDescriptor tableDescriptor = tableDescriptorPair.getSecond(); - HTableDescriptor origTableDescriptor = tableDescriptorPair.getFirst(); + Pair<TableDescriptor,TableDescriptor> tableDescriptorPair = separateAndValidateProperties(table, stmtProperties, colFamiliesForPColumnsToBeAdded, families, tableProps); + TableDescriptor tableDescriptor = tableDescriptorPair.getSecond(); + TableDescriptor origTableDescriptor = tableDescriptorPair.getFirst(); if (tableDescriptor != null) { tableDescriptors = Sets.newHashSetWithExpectedSize(3 + table.getIndexes().size()); origTableDescriptors = Sets.newHashSetWithExpectedSize(3 + table.getIndexes().size()); @@ -1739,9 +1724,12 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement * If the table was transitioned from non transactional to transactional, we need * to also transition the index tables. */ + + TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableDescriptor); if (nonTxToTx) { - updateDescriptorForTx(table, tableProps, tableDescriptor, Boolean.TRUE.toString(), tableDescriptors, origTableDescriptors); + updateDescriptorForTx(table, tableProps, tableDescriptorBuilder, Boolean.TRUE.toString(), tableDescriptors, origTableDescriptors); } + tableDescriptor=tableDescriptorBuilder.build(); } boolean success = false; @@ -1834,11 +1822,11 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } return result; } - private void updateDescriptorForTx(PTable table, Map<String, Object> tableProps, HTableDescriptor tableDescriptor, - String txValue, Set<HTableDescriptor> descriptorsToUpdate, Set<HTableDescriptor> origDescriptors) throws SQLException { + private void updateDescriptorForTx(PTable table, Map<String, Object> tableProps, TableDescriptorBuilder tableDescriptorBuilder, + String txValue, Set<TableDescriptor> descriptorsToUpdate, Set<TableDescriptor> origDescriptors) throws SQLException { byte[] physicalTableName = table.getPhysicalName().getBytes(); try (Admin admin = getAdmin()) { - setTransactional(tableDescriptor, table.getType(), txValue, tableProps); + setTransactional(physicalTableName, tableDescriptorBuilder, table.getType(), txValue, tableProps); Map<String, Object> indexTableProps; if (txValue == null) { indexTableProps = Collections.<String,Object>emptyMap(); @@ -1847,46 +1835,50 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement indexTableProps.put(PhoenixTransactionContext.READ_NON_TX_DATA, Boolean.valueOf(txValue)); } for (PTable index : table.getIndexes()) { - HTableDescriptor indexDescriptor = admin.getTableDescriptor(TableName.valueOf(index.getPhysicalName().getBytes())); - origDescriptors.add(indexDescriptor); - indexDescriptor = new HTableDescriptor(indexDescriptor); - descriptorsToUpdate.add(indexDescriptor); + TableDescriptor indexDesc = admin.getDescriptor(TableName.valueOf(index.getPhysicalName().getBytes())); + origDescriptors.add(indexDesc); + TableDescriptorBuilder indexDescriptorBuilder = TableDescriptorBuilder.newBuilder(indexDesc); + descriptorsToUpdate.add(indexDescriptorBuilder.build()); if (index.getColumnFamilies().isEmpty()) { byte[] dataFamilyName = SchemaUtil.getEmptyColumnFamily(table); byte[] indexFamilyName = SchemaUtil.getEmptyColumnFamily(index); - HColumnDescriptor indexColDescriptor = indexDescriptor.getFamily(indexFamilyName); - HColumnDescriptor tableColDescriptor = tableDescriptor.getFamily(dataFamilyName); + ColumnFamilyDescriptorBuilder indexColDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(indexDescriptorBuilder.build().getColumnFamily(indexFamilyName)); + ColumnFamilyDescriptor tableColDescriptor = tableDescriptorBuilder.build().getColumnFamily(dataFamilyName); indexColDescriptor.setMaxVersions(tableColDescriptor.getMaxVersions()); - indexColDescriptor.setValue(PhoenixTransactionContext.PROPERTY_TTL, tableColDescriptor.getValue(PhoenixTransactionContext.PROPERTY_TTL)); + indexColDescriptor.setValue(Bytes.toBytes(PhoenixTransactionContext.PROPERTY_TTL), + tableColDescriptor.getValue(Bytes.toBytes(PhoenixTransactionContext.PROPERTY_TTL))); + indexDescriptorBuilder.addColumnFamily(indexColDescriptor.build()); } else { for (PColumnFamily family : index.getColumnFamilies()) { byte[] familyName = family.getName().getBytes(); - indexDescriptor.getFamily(familyName).setMaxVersions(tableDescriptor.getFamily(familyName).getMaxVersions()); - HColumnDescriptor indexColDescriptor = indexDescriptor.getFamily(familyName); - HColumnDescriptor tableColDescriptor = tableDescriptor.getFamily(familyName); + ColumnFamilyDescriptorBuilder indexColDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(indexDescriptorBuilder.build().getColumnFamily(familyName)); + ColumnFamilyDescriptor tableColDescriptor = tableDescriptorBuilder.build().getColumnFamily(familyName); indexColDescriptor.setMaxVersions(tableColDescriptor.getMaxVersions()); - indexColDescriptor.setValue(PhoenixTransactionContext.PROPERTY_TTL, tableColDescriptor.getValue(PhoenixTransactionContext.PROPERTY_TTL)); + indexColDescriptor.setValue(Bytes.toBytes(PhoenixTransactionContext.PROPERTY_TTL), + tableColDescriptor.getValue(Bytes.toBytes(PhoenixTransactionContext.PROPERTY_TTL))); + indexDescriptorBuilder.addColumnFamily(indexColDescriptor.build()); } } - setTransactional(indexDescriptor, index.getType(), txValue, indexTableProps); + setTransactional(index.getPhysicalName().getBytes(), indexDescriptorBuilder, index.getType(), txValue, indexTableProps); } try { - HTableDescriptor indexDescriptor = admin.getTableDescriptor(TableName.valueOf(MetaDataUtil.getViewIndexPhysicalName(physicalTableName))); + TableDescriptor indexDescriptor = admin.getDescriptor(TableName.valueOf(MetaDataUtil.getViewIndexPhysicalName(physicalTableName))); origDescriptors.add(indexDescriptor); - indexDescriptor = new HTableDescriptor(indexDescriptor); - descriptorsToUpdate.add(indexDescriptor); - setSharedIndexMaxVersion(table, tableDescriptor, indexDescriptor); - setTransactional(indexDescriptor, PTableType.INDEX, txValue, indexTableProps); + TableDescriptorBuilder indexDescriptorBuilder = TableDescriptorBuilder.newBuilder(indexDescriptor); + setSharedIndexMaxVersion(table, tableDescriptorBuilder.build(), indexDescriptorBuilder); + setTransactional(MetaDataUtil.getViewIndexPhysicalName(physicalTableName), indexDescriptorBuilder, PTableType.INDEX, txValue, indexTableProps); + descriptorsToUpdate.add(indexDescriptorBuilder.build()); } catch (org.apache.hadoop.hbase.TableNotFoundException ignore) { // Ignore, as we may never have created a view index table } try { - HTableDescriptor indexDescriptor = admin.getTableDescriptor(TableName.valueOf(MetaDataUtil.getLocalIndexPhysicalName(physicalTableName))); + TableDescriptor indexDescriptor = admin.getDescriptor(TableName.valueOf(MetaDataUtil.getLocalIndexPhysicalName(physicalTableName))); origDescriptors.add(indexDescriptor); - indexDescriptor = new HTableDescriptor(indexDescriptor); - descriptorsToUpdate.add(indexDescriptor); - setSharedIndexMaxVersion(table, tableDescriptor, indexDescriptor); - setTransactional(indexDescriptor, PTableType.INDEX, txValue, indexTableProps); + TableDescriptorBuilder indexDescriptorBuilder = TableDescriptorBuilder.newBuilder(indexDescriptor); + + setSharedIndexMaxVersion(table, tableDescriptorBuilder.build(), indexDescriptorBuilder); + setTransactional(MetaDataUtil.getViewIndexPhysicalName(physicalTableName), indexDescriptorBuilder, PTableType.INDEX, txValue, indexTableProps); + descriptorsToUpdate.add(indexDescriptorBuilder.build()); } catch (org.apache.hadoop.hbase.TableNotFoundException ignore) { // Ignore, as we may never have created a view index table } @@ -1894,32 +1886,36 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement throw ServerUtil.parseServerException(e); } } - private void setSharedIndexMaxVersion(PTable table, HTableDescriptor tableDescriptor, - HTableDescriptor indexDescriptor) { + private void setSharedIndexMaxVersion(PTable table, TableDescriptor tableDescriptor, + TableDescriptorBuilder indexDescriptorBuilder) { if (table.getColumnFamilies().isEmpty()) { byte[] familyName = SchemaUtil.getEmptyColumnFamily(table); - HColumnDescriptor indexColDescriptor = indexDescriptor.getFamily(familyName); - HColumnDescriptor tableColDescriptor = tableDescriptor.getFamily(familyName); - indexColDescriptor.setMaxVersions(tableColDescriptor.getMaxVersions()); - indexColDescriptor.setValue(PhoenixTransactionContext.PROPERTY_TTL, tableColDescriptor.getValue(PhoenixTransactionContext.PROPERTY_TTL)); + ColumnFamilyDescriptorBuilder indexColDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(indexDescriptorBuilder.build().getColumnFamily(familyName)); + ColumnFamilyDescriptor tableColDescriptor = tableDescriptor.getColumnFamily(familyName); + indexColDescriptorBuilder.setMaxVersions(tableColDescriptor.getMaxVersions()); + indexColDescriptorBuilder.setValue( Bytes.toBytes(PhoenixTransactionContext.PROPERTY_TTL),tableColDescriptor.getValue(Bytes.toBytes(PhoenixTransactionContext.PROPERTY_TTL))); + indexDescriptorBuilder.addColumnFamily(indexColDescriptorBuilder.build()); } else { for (PColumnFamily family : table.getColumnFamilies()) { byte[] familyName = family.getName().getBytes(); - HColumnDescriptor indexColDescriptor = indexDescriptor.getFamily(familyName); + ColumnFamilyDescriptor indexColDescriptor = indexDescriptorBuilder.build().getColumnFamily(familyName); if (indexColDescriptor != null) { - HColumnDescriptor tableColDescriptor = tableDescriptor.getFamily(familyName); - indexColDescriptor.setMaxVersions(tableColDescriptor.getMaxVersions()); - indexColDescriptor.setValue(PhoenixTransactionContext.PROPERTY_TTL, tableColDescriptor.getValue(PhoenixTransactionContext.PROPERTY_TTL)); + ColumnFamilyDescriptor tableColDescriptor = tableDescriptor.getColumnFamily(familyName); + ColumnFamilyDescriptorBuilder indexColDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(indexColDescriptor); + indexColDescriptorBuilder.setMaxVersions(tableColDescriptor.getMaxVersions()); + indexColDescriptorBuilder.setValue( Bytes.toBytes(PhoenixTransactionContext.PROPERTY_TTL),tableColDescriptor.getValue(Bytes.toBytes(PhoenixTransactionContext.PROPERTY_TTL))); + indexDescriptorBuilder.addColumnFamily(indexColDescriptorBuilder.build()); + } } } } - private void sendHBaseMetaData(Set<HTableDescriptor> tableDescriptors, boolean pollingNeeded) throws SQLException { + private void sendHBaseMetaData(Set<TableDescriptor> tableDescriptors, boolean pollingNeeded) throws SQLException { SQLException sqlE = null; - for (HTableDescriptor descriptor : tableDescriptors) { + for (TableDescriptor descriptor : tableDescriptors) { try { - modifyTable(descriptor.getName(), descriptor, pollingNeeded); + modifyTable(descriptor.getTableName().getName(), descriptor, pollingNeeded); } catch (IOException e) { sqlE = ServerUtil.parseServerException(e); } catch (InterruptedException e) { @@ -1935,17 +1931,18 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } } } - private void setTransactional(HTableDescriptor tableDescriptor, PTableType tableType, String txValue, Map<String, Object> tableProps) throws SQLException { + private void setTransactional(byte[] physicalTableName, TableDescriptorBuilder tableDescriptorBuilder, PTableType tableType, String txValue, Map<String, Object> tableProps) throws SQLException { if (txValue == null) { - tableDescriptor.remove(PhoenixTransactionContext.READ_NON_TX_DATA); + tableDescriptorBuilder.removeValue(Bytes.toBytes(PhoenixTransactionContext.READ_NON_TX_DATA)); } else { - tableDescriptor.setValue(PhoenixTransactionContext.READ_NON_TX_DATA, txValue); + tableDescriptorBuilder.setValue(PhoenixTransactionContext.READ_NON_TX_DATA, txValue); } - this.addCoprocessors(tableDescriptor.getName(), tableDescriptor, tableType, tableProps); + this.addCoprocessors(physicalTableName, tableDescriptorBuilder, tableType, tableProps); } - private Pair<HTableDescriptor,HTableDescriptor> separateAndValidateProperties(PTable table, Map<String, List<Pair<String, Object>>> properties, - Set<String> colFamiliesForPColumnsToBeAdded, Map<String, Object> tableProps) throws SQLException { + private Pair<TableDescriptor, TableDescriptor> separateAndValidateProperties(PTable table, + Map<String, List<Pair<String, Object>>> properties, Set<String> colFamiliesForPColumnsToBeAdded, + List<Pair<byte[], Map<String, Object>>> families, Map<String, Object> tableProps) throws SQLException { Map<String, Map<String, Object>> stmtFamiliesPropsMap = new HashMap<>(properties.size()); Map<String,Object> commonFamilyProps = new HashMap<>(); boolean addingColumns = colFamiliesForPColumnsToBeAdded != null && !colFamiliesForPColumnsToBeAdded.isEmpty(); @@ -2090,21 +2087,21 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement .buildException(); } - HTableDescriptor newTableDescriptor = null; - HTableDescriptor origTableDescriptor = null; + TableDescriptorBuilder newTableDescriptorBuilder = null; + TableDescriptor origTableDescriptor = null; if (!allFamiliesProps.isEmpty() || !tableProps.isEmpty()) { byte[] tableNameBytes = Bytes.toBytes(table.getPhysicalName().getString()); - HTableDescriptor existingTableDescriptor = origTableDescriptor = getTableDescriptor(tableNameBytes); - newTableDescriptor = new HTableDescriptor(existingTableDescriptor); + TableDescriptor existingTableDescriptor = origTableDescriptor = this.getTableDescriptor(tableNameBytes); + newTableDescriptorBuilder = TableDescriptorBuilder.newBuilder(existingTableDescriptor); if (!tableProps.isEmpty()) { // add all the table properties to the existing table descriptor for (Entry<String, Object> entry : tableProps.entrySet()) { - newTableDescriptor.setValue(entry.getKey(), entry.getValue() != null ? entry.getValue().toString() : null); + newTableDescriptorBuilder.setValue(entry.getKey(), entry.getValue() != null ? entry.getValue().toString() : null); } } if (addingColumns) { // Make sure that all the CFs of the table have the same TTL as the empty CF. - setTTLForNewCFs(allFamiliesProps, table, newTableDescriptor, newTTL); + setTTLForNewCFs(allFamiliesProps, table, newTableDescriptorBuilder, newTTL); } // Set TTL on all table column families, even if they're not referenced here if (newTTL != null) { @@ -2125,7 +2122,8 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } if (defaultTxMaxVersions == null) { if (isTransactional) { - defaultTxMaxVersions = newTableDescriptor.getFamily(SchemaUtil.getEmptyColumnFamily(table)).getMaxVersions(); + defaultTxMaxVersions = newTableDescriptorBuilder.build() + .getColumnFamily(SchemaUtil.getEmptyColumnFamily(table)).getMaxVersions(); } else { defaultTxMaxVersions = this.getProps().getInt( @@ -2148,8 +2146,8 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement // transitioning to become transactional or setting TTL on // an already transactional table. if (isOrWillBeTransactional) { - int ttl = getTTL(table, newTableDescriptor, newTTL); - if (ttl != HColumnDescriptor.DEFAULT_TTL) { + int ttl = getTTL(table, newTableDescriptorBuilder.build(), newTTL); + if (ttl != ColumnFamilyDescriptorBuilder.DEFAULT_TTL) { for (Map.Entry<String, Map<String, Object>> entry : allFamiliesProps.entrySet()) { Map<String, Object> props = entry.getValue(); if (props == null) { @@ -2158,7 +2156,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement props.put(PhoenixTransactionContext.PROPERTY_TTL, ttl); // Remove HBase TTL if we're not transitioning an existing table to become transactional // or if the existing transactional table wasn't originally non transactional. - if (!willBeTransactional && !Boolean.valueOf(newTableDescriptor.getValue(PhoenixTransactionContext.READ_NON_TX_DATA))) { + if (!willBeTransactional && !Boolean.valueOf(newTableDescriptorBuilder.build().getValue(PhoenixTransactionContext.READ_NON_TX_DATA))) { props.remove(TTL); } } @@ -2172,23 +2170,25 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } } byte[] cf = Bytes.toBytes(entry.getKey()); - HColumnDescriptor colDescriptor = newTableDescriptor.getFamily(cf); + ColumnFamilyDescriptor colDescriptor = newTableDescriptorBuilder.build().getColumnFamily(cf); if (colDescriptor == null) { // new column family colDescriptor = generateColumnFamilyDescriptor(new Pair<>(cf, familyProps), table.getType()); - newTableDescriptor.addFamily(colDescriptor); + newTableDescriptorBuilder.addColumnFamily(colDescriptor); } else { - modifyColumnFamilyDescriptor(colDescriptor, familyProps); + ColumnFamilyDescriptorBuilder colDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(colDescriptor); + modifyColumnFamilyDescriptor(colDescriptorBuilder, familyProps); + colDescriptor = colDescriptorBuilder.build(); } if (isOrWillBeTransactional) { checkTransactionalVersionsValue(colDescriptor); } } } - return new Pair<>(origTableDescriptor, newTableDescriptor); + return new Pair<>(origTableDescriptor, newTableDescriptorBuilder.build()); } - private void checkTransactionalVersionsValue(HColumnDescriptor colDescriptor) throws SQLException { + private void checkTransactionalVersionsValue(ColumnFamilyDescriptor colDescriptor) throws SQLException { int maxVersions = colDescriptor.getMaxVersions(); if (maxVersions <= 1) { throw new SQLExceptionInfo.Builder(SQLExceptionCode.TX_MAX_VERSIONS_MUST_BE_GREATER_THAN_ONE) @@ -2212,17 +2212,17 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement return cfNames; } - private static int getTTL(PTable table, HTableDescriptor tableDesc, Integer newTTL) throws SQLException { + private static int getTTL(PTable table, TableDescriptor tableDesc, Integer newTTL) throws SQLException { // If we're setting TTL now, then use that value. Otherwise, use empty column family value int ttl = newTTL != null ? newTTL - : tableDesc.getFamily(SchemaUtil.getEmptyColumnFamily(table)).getTimeToLive(); + : tableDesc.getColumnFamily(SchemaUtil.getEmptyColumnFamily(table)).getTimeToLive(); return ttl; } private static void setTTLForNewCFs(Map<String, Map<String, Object>> familyProps, PTable table, - HTableDescriptor tableDesc, Integer newTTL) throws SQLException { + TableDescriptorBuilder tableDescBuilder, Integer newTTL) throws SQLException { if (!familyProps.isEmpty()) { - int ttl = getTTL(table, tableDesc, newTTL); + int ttl = getTTL(table, tableDescBuilder.build(), newTTL); for (Map.Entry<String, Map<String, Object>> entry : familyProps.entrySet()) { Map<String, Object> props = entry.getValue(); if (props == null) { @@ -2538,11 +2538,11 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement logger.debug("System mutex table already appears to exist, not creating it"); return; } - HTableDescriptor tableDesc = new HTableDescriptor(mutexTableName); - HColumnDescriptor columnDesc = new HColumnDescriptor( - PhoenixDatabaseMetaData.SYSTEM_MUTEX_FAMILY_NAME_BYTES); - columnDesc.setTimeToLive(TTL_FOR_MUTEX); // Let mutex expire after some time - tableDesc.addFamily(columnDesc); + TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(mutexTableName) + .addColumnFamily(ColumnFamilyDescriptorBuilder + .newBuilder(PhoenixDatabaseMetaData.SYSTEM_MUTEX_FAMILY_NAME_BYTES) + .setTimeToLive(TTL_FOR_MUTEX).build()) + .build(); admin.createTable(tableDesc); try (Table sysMutexTable = getTable(mutexTableName.getName())) { byte[] mutexRowKey = SchemaUtil.getTableKey(null, PhoenixDatabaseMetaData.SYSTEM_CATALOG_SCHEMA, @@ -2557,7 +2557,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } List<TableName> getSystemTableNames(Admin admin) throws IOException { - return Lists.newArrayList(admin.listTableNames(QueryConstants.SYSTEM_SCHEMA_NAME + "\\..*")); // TODO: replace to pattern + return Lists.newArrayList(admin.listTableNames(Pattern.compile(QueryConstants.SYSTEM_SCHEMA_NAME + "\\..*"))); // TODO: replace to pattern } private void createOtherSystemTables(PhoenixConnection metaConnection, Admin hbaseAdmin) throws SQLException, IOException { @@ -2632,19 +2632,21 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement columnsToAdd = addColumn(columnsToAdd, PhoenixDatabaseMetaData.STORE_NULLS + " " + PBoolean.INSTANCE.getSqlTypeName()); try (Admin admin = getAdmin()) { - HTableDescriptor[] localIndexTables = admin - .listTables(MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + ".*"); - for (HTableDescriptor table : localIndexTables) { + List<TableDescriptor> localIndexTables = + admin.listTableDescriptors(Pattern + .compile(MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + ".*")); + for (TableDescriptor table : localIndexTables) { if (table.getValue(MetaDataUtil.PARENT_TABLE_KEY) == null && table.getValue(MetaDataUtil.IS_LOCAL_INDEX_TABLE_PROP_NAME) != null) { - table.setValue(MetaDataUtil.PARENT_TABLE_KEY, - MetaDataUtil.getLocalIndexUserTableName(table.getNameAsString())); + + table=TableDescriptorBuilder.newBuilder(table).setValue(Bytes.toBytes(MetaDataUtil.PARENT_TABLE_KEY), + Bytes.toBytes(MetaDataUtil.getLocalIndexUserTableName(table.getTableName().getNameAsString()))).build(); // Explicitly disable, modify and enable the table to ensure // co-location of data and index regions. If we just modify the // table descriptor when online schema change enabled may reopen // the region in same region server instead of following data region. admin.disableTable(table.getTableName()); - admin.modifyTable(table.getTableName(), table); + admin.modifyTable(table); admin.enableTable(table.getTableName()); } } @@ -3680,7 +3682,6 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement incrementSequenceValues(sequenceAllocations, timestamp, values, exceptions, Sequence.ValueOp.INCREMENT_SEQUENCE); } - @SuppressWarnings("deprecation") private void incrementSequenceValues(List<SequenceAllocation> sequenceAllocations, long timestamp, long[] values, SQLException[] exceptions, Sequence.ValueOp op) throws SQLException { List<Sequence> sequences = Lists.newArrayListWithExpectedSize(sequenceAllocations.size()); for (SequenceAllocation sequenceAllocation : sequenceAllocations) { @@ -3808,7 +3809,6 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement } } - @SuppressWarnings("deprecation") @Override public void returnSequences(List<SequenceKey> keys, long timestamp, SQLException[] exceptions) throws SQLException { List<Sequence> sequences = Lists.newArrayListWithExpectedSize(keys.size()); @@ -3885,7 +3885,6 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement // Take no locks, as this only gets run when there are no open connections // so there's no danger of contention. - @SuppressWarnings("deprecation") private void returnAllSequences(ConcurrentMap<SequenceKey,Sequence> sequenceMap) throws SQLException { List<Append> mutations = Lists.newArrayListWithExpectedSize(sequenceMap.size()); for (Sequence sequence : sequenceMap.values()) {