diff --git a/src/main/java/com/alipay/oceanbase/hbase/OHTable.java b/src/main/java/com/alipay/oceanbase/hbase/OHTable.java index b6e4bdea..a72f21fb 100644 --- a/src/main/java/com/alipay/oceanbase/hbase/OHTable.java +++ b/src/main/java/com/alipay/oceanbase/hbase/OHTable.java @@ -65,7 +65,6 @@ import org.apache.hadoop.hbase.util.VersionInfo; import org.slf4j.Logger; -import javax.swing.plaf.synth.Region; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.*; @@ -2436,27 +2435,65 @@ public void refreshTableEntry(String familyString, boolean hasTestLoad) throws E } public byte[][] getStartKeys() throws IOException { - if (regionLocator == null) { - OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient); - regionLocator = executor.getRegionLocator(tableNameString); + byte[][] startKeys = new byte[0][]; + if (ObGlobal.isHBaseAdminSupport()) { + // 4.3.5.3 and above, OCP and ODP mode use regionLocator to getStartKeys + if (regionLocator == null) { + OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient); + regionLocator = executor.getRegionLocator(tableNameString); + } + startKeys = regionLocator.getStartKeys(); + } else if (!obTableClient.isOdpMode()) { + // before 4.3.5.3 only support in OCP mode + try { + startKeys = obTableClient.getHBaseTableStartKeys(tableNameString); + } catch (Exception e) { + throw new IOException("Fail to get start keys of HBase Table: " + tableNameString, e); + } + } else { + throw new IOException("not supported yet in odp mode, only support in ObServer 4.3.5.3 and above"); } - return regionLocator.getStartKeys(); + + return startKeys; } public byte[][] getEndKeys() throws IOException { - if (regionLocator == null) { - OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient); - regionLocator = executor.getRegionLocator(tableNameString); + byte[][] endKeys = new byte[0][]; + if (ObGlobal.isHBaseAdminSupport()) { + // 4.3.5.3 and above, OCP and ODP mode use regionLocator to getEndKeys + if (regionLocator == null) { + OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient); + regionLocator = executor.getRegionLocator(tableNameString); + } + endKeys = regionLocator.getEndKeys(); + } else if (!obTableClient.isOdpMode()) { + // before 4.3.5.3 only support in OCP mode + try { + endKeys = obTableClient.getHBaseTableEndKeys(tableNameString); + } catch (Exception e) { + throw new IOException("Fail to get start keys of HBase Table: " + tableNameString, e); + } + } else { + throw new IOException("not supported yet in odp mode, only support in ObServer 4.3.5.3 and above"); } - return regionLocator.getEndKeys(); + + return endKeys; } public Pair getStartEndKeys() throws IOException { - if (regionLocator == null) { - OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient); - regionLocator = executor.getRegionLocator(tableNameString); + if (ObGlobal.isHBaseAdminSupport()) { + // 4.3.5.3 and above, OCP and ODP mode use regionLocator to getStartEndKeys + if (regionLocator == null) { + OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient); + regionLocator = executor.getRegionLocator(tableNameString); + } + return regionLocator.getStartEndKeys(); + } else if (!obTableClient.isOdpMode()) { + // before 4.3.5.3 only support in OCP mode + return new Pair<>(getStartKeys(), getEndKeys()); + } else { + throw new IOException("not supported yet in odp mode, only support in ObServer 4.3.5.3 and above"); } - return regionLocator.getStartEndKeys(); } private CompareFilter.CompareOp getCompareOp(CompareOperator cmpOp) {