Skip to content

Commit 0744188

Browse files
authored
Merge pull request #272 from oceanbase/cherry-pick-161a7cef-to-hbase_2.0.0-alpha4-20250710_101723
Cherry-pick: fix delete family version result error
2 parents b03ecc6 + 0bc9594 commit 0744188

File tree

3 files changed

+39
-19
lines changed

3 files changed

+39
-19
lines changed

src/main/java/com/alipay/oceanbase/hbase/OHTable.java

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import org.apache.hadoop.hbase.util.VersionInfo;
6666
import org.slf4j.Logger;
6767

68+
import javax.swing.plaf.synth.Region;
6869
import java.io.ByteArrayOutputStream;
6970
import java.io.IOException;
7071
import java.util.*;
@@ -195,6 +196,7 @@ public class OHTable implements Table {
195196

196197
private int scannerTimeout;
197198

199+
private RegionLocator regionLocator;
198200
/**
199201
* Creates an object to access a HBase table.
200202
* Shares oceanbase table obTableClient and other resources with other OHTable instances
@@ -2112,7 +2114,7 @@ private QueryAndMutate buildDeleteQueryAndMutate(KeyValue kv,
21122114
if (!isTableGroup) {
21132115
filter = buildObHTableFilter(null, null, Integer.MAX_VALUE);
21142116
} else {
2115-
filter = buildObHTableFilter(null, null, Integer.MAX_VALUE);
2117+
filter = buildObHTableFilter(null, null, Integer.MAX_VALUE, kv.getQualifier());
21162118
}
21172119
} else {
21182120
range.setStartKey(ObRowKey.getInstance(CellUtil.cloneRow(kv), ObObj.getMin(),
@@ -2134,17 +2136,19 @@ private QueryAndMutate buildDeleteQueryAndMutate(KeyValue kv,
21342136
ObObj.getMin()));
21352137
range.setEndKey(ObRowKey.getInstance(CellUtil.cloneRow(kv), ObObj.getMax(),
21362138
ObObj.getMax()));
2137-
filter = buildObHTableFilter(null, null, Integer.MAX_VALUE);
2139+
// [MAX_VALUE, MAX_VALUE), delete nothing
2140+
filter = buildObHTableFilter(null, new TimeRange(Long.MAX_VALUE), Integer.MAX_VALUE);
21382141
} else {
2142+
TimeRange timeRange = new TimeRange(kv.getTimestamp(), kv.getTimestamp() + 1);
21392143
range.setStartKey(ObRowKey.getInstance(CellUtil.cloneRow(kv), ObObj.getMin(),
21402144
ObObj.getMin()));
21412145
range.setEndKey(ObRowKey.getInstance(CellUtil.cloneRow(kv), ObObj.getMax(),
21422146
ObObj.getMax()));
21432147
if (!isTableGroup) {
2144-
filter = buildObHTableFilter(null, new TimeRange(0, kv.getTimestamp() + 1),
2148+
filter = buildObHTableFilter(null, timeRange,
21452149
Integer.MAX_VALUE);
21462150
} else {
2147-
filter = buildObHTableFilter(null, new TimeRange(0, kv.getTimestamp() + 1),
2151+
filter = buildObHTableFilter(null, timeRange,
21482152
Integer.MAX_VALUE, CellUtil.cloneQualifier(kv));
21492153
}
21502154
}
@@ -2461,27 +2465,27 @@ public void refreshTableEntry(String familyString, boolean hasTestLoad) throws E
24612465
}
24622466

24632467
public byte[][] getStartKeys() throws IOException {
2464-
byte[][] startKeys = new byte[0][];
2465-
try {
2466-
startKeys = obTableClient.getHBaseTableStartKeys(tableNameString);
2467-
} catch (Exception e) {
2468-
throw new IOException("Fail to get start keys of HBase Table: " + tableNameString, e);
2468+
if (regionLocator == null) {
2469+
OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient);
2470+
regionLocator = executor.getRegionLocator(tableNameString);
24692471
}
2470-
return startKeys;
2472+
return regionLocator.getStartKeys();
24712473
}
24722474

24732475
public byte[][] getEndKeys() throws IOException {
2474-
byte[][] endKeys = new byte[0][];
2475-
try {
2476-
endKeys = obTableClient.getHBaseTableEndKeys(tableNameString);
2477-
} catch (Exception e) {
2478-
throw new IOException("Fail to get start keys of HBase Table: " + tableNameString, e);
2476+
if (regionLocator == null) {
2477+
OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient);
2478+
regionLocator = executor.getRegionLocator(tableNameString);
24792479
}
2480-
return endKeys;
2480+
return regionLocator.getEndKeys();
24812481
}
24822482

24832483
public Pair<byte[][], byte[][]> getStartEndKeys() throws IOException {
2484-
return new Pair<>(getStartKeys(), getEndKeys());
2484+
if (regionLocator == null) {
2485+
OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient);
2486+
regionLocator = executor.getRegionLocator(tableNameString);
2487+
}
2488+
return regionLocator.getStartEndKeys();
24852489
}
24862490

24872491
public static CompareFilter.CompareOp getCompareOp(CompareOperator cmpOp) {

src/main/java/com/alipay/oceanbase/hbase/util/OHRegionLocatorExecutor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class OHRegionLocatorExecutor extends AbstractObTableMetaExecutor<OHRegio
3939
private final String tableName;
4040
private final ObTableClient client;
4141

42-
OHRegionLocatorExecutor(String tableName, ObTableClient client) {
42+
public OHRegionLocatorExecutor(String tableName, ObTableClient client) {
4343
this.tableName = tableName;
4444
this.client = client;
4545
}

src/test/java/com/alipay/oceanbase/hbase/secondary/OHTableSecondaryPartDeleteTest.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,23 @@ public static void testMultiCFDeleteFamilyVersionImpl(Map.Entry<String, List<Str
482482
get.addColumn(toBytes(family), toBytes(column + family));
483483
}
484484
Result result = hTable.get(get);
485-
Assert(entry.getValue(), ()->Assert.assertEquals(6, result.size()));
485+
// (ts1, ts3, ts4) * 3
486+
Result finalResult = result;
487+
Assert(entry.getValue(), ()->Assert.assertEquals(3 * entry.getValue().size(), finalResult.size()));
488+
489+
put = new Put(toBytes(key));
490+
delete = new Delete(toBytes(key));
491+
for (String tableName : entry.getValue()) {
492+
String family = getColumnFamilyName(tableName);
493+
Long ts = Long.MAX_VALUE;
494+
put.addColumn(toBytes(family), toBytes(column + family), ts, toBytes(value + ts));
495+
delete.addFamilyVersion(family.getBytes(), Long.MAX_VALUE); // do nothing
496+
}
497+
hTable.put(put);
498+
hTable.delete(delete);
499+
result = hTable.get(get);
500+
Result finalResult1 = result;
501+
Assert(entry.getValue(), ()->Assert.assertEquals(4 * entry.getValue().size(), finalResult1.size()));
486502
hTable.close();
487503
}
488504

0 commit comments

Comments
 (0)