Skip to content

Commit 238471a

Browse files
committed
Cherry-pick 161a7ce (contains conflicts)
This commit contains unresolved conflicts that need manual resolution.
1 parent b03ecc6 commit 238471a

File tree

3 files changed

+66
-17
lines changed

3 files changed

+66
-17
lines changed

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

Lines changed: 48 additions & 15 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.*;
@@ -193,7 +194,23 @@ public class OHTable implements Table {
193194
*/
194195
private final Configuration configuration;
195196

197+
<<<<<<< HEAD
196198
private int scannerTimeout;
199+
=======
200+
private int scannerTimeout;
201+
202+
/**
203+
* the bufferedMutator to execute Puts
204+
*/
205+
private OHBufferedMutatorImpl mutator;
206+
207+
private RegionLocator regionLocator;
208+
209+
/**
210+
* flag for whether closed
211+
*/
212+
private boolean isClosed = false;
213+
>>>>>>> 161a7ce (fix delete family version result error)
197214

198215
/**
199216
* Creates an object to access a HBase table.
@@ -2112,7 +2129,7 @@ private QueryAndMutate buildDeleteQueryAndMutate(KeyValue kv,
21122129
if (!isTableGroup) {
21132130
filter = buildObHTableFilter(null, null, Integer.MAX_VALUE);
21142131
} else {
2115-
filter = buildObHTableFilter(null, null, Integer.MAX_VALUE);
2132+
filter = buildObHTableFilter(null, null, Integer.MAX_VALUE, kv.getQualifier());
21162133
}
21172134
} else {
21182135
range.setStartKey(ObRowKey.getInstance(CellUtil.cloneRow(kv), ObObj.getMin(),
@@ -2134,18 +2151,34 @@ private QueryAndMutate buildDeleteQueryAndMutate(KeyValue kv,
21342151
ObObj.getMin()));
21352152
range.setEndKey(ObRowKey.getInstance(CellUtil.cloneRow(kv), ObObj.getMax(),
21362153
ObObj.getMax()));
2137-
filter = buildObHTableFilter(null, null, Integer.MAX_VALUE);
2154+
// [MAX_VALUE, MAX_VALUE), delete nothing
2155+
filter = buildObHTableFilter(null, new TimeRange(Long.MAX_VALUE), Integer.MAX_VALUE);
21382156
} else {
2157+
<<<<<<< HEAD
21392158
range.setStartKey(ObRowKey.getInstance(CellUtil.cloneRow(kv), ObObj.getMin(),
2159+
=======
2160+
TimeRange timeRange = new TimeRange(kv.getTimestamp(), kv.getTimestamp() + 1);
2161+
range.setStartKey(ObRowKey.getInstance(kv.getRow(), ObObj.getMin(),
2162+
>>>>>>> 161a7ce (fix delete family version result error)
21402163
ObObj.getMin()));
21412164
range.setEndKey(ObRowKey.getInstance(CellUtil.cloneRow(kv), ObObj.getMax(),
21422165
ObObj.getMax()));
21432166
if (!isTableGroup) {
2167+
<<<<<<< HEAD
21442168
filter = buildObHTableFilter(null, new TimeRange(0, kv.getTimestamp() + 1),
21452169
Integer.MAX_VALUE);
21462170
} else {
21472171
filter = buildObHTableFilter(null, new TimeRange(0, kv.getTimestamp() + 1),
21482172
Integer.MAX_VALUE, CellUtil.cloneQualifier(kv));
2173+
=======
2174+
filter = buildObHTableFilter(null,
2175+
timeRange,
2176+
Integer.MAX_VALUE);
2177+
} else {
2178+
filter = buildObHTableFilter(null,
2179+
timeRange,
2180+
Integer.MAX_VALUE, kv.getQualifier());
2181+
>>>>>>> 161a7ce (fix delete family version result error)
21492182
}
21502183
}
21512184
break;
@@ -2461,27 +2494,27 @@ public void refreshTableEntry(String familyString, boolean hasTestLoad) throws E
24612494
}
24622495

24632496
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);
2497+
if (regionLocator == null) {
2498+
OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient);
2499+
regionLocator = executor.getRegionLocator(tableNameString);
24692500
}
2470-
return startKeys;
2501+
return regionLocator.getStartKeys();
24712502
}
24722503

24732504
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);
2505+
if (regionLocator == null) {
2506+
OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient);
2507+
regionLocator = executor.getRegionLocator(tableNameString);
24792508
}
2480-
return endKeys;
2509+
return regionLocator.getEndKeys();
24812510
}
24822511

24832512
public Pair<byte[][], byte[][]> getStartEndKeys() throws IOException {
2484-
return new Pair<>(getStartKeys(), getEndKeys());
2513+
if (regionLocator == null) {
2514+
OHRegionLocatorExecutor executor = new OHRegionLocatorExecutor(tableNameString, obTableClient);
2515+
regionLocator = executor.getRegionLocator(tableNameString);
2516+
}
2517+
return regionLocator.getStartEndKeys();
24852518
}
24862519

24872520
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)