petersomogyi commented on code in PR #4882:
URL: https://github.com/apache/hbase/pull/4882#discussion_r1022680713
##########
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java:
##########
@@ -1111,6 +1116,68 @@ public void testRefreshStoreFilesNotChanged() throws
IOException {
verify(spiedStoreEngine, times(1)).replaceStoreFiles(any(), any(), any(),
any());
}
+
+ @Test
+ public void testScanWithCompactionAfterFlush() throws Exception {
+ TEST_UTIL.getConfiguration().set(DEFAULT_COMPACTION_POLICY_CLASS_KEY,
+ EverythingPolicy.class.getName());
+ init(name.getMethodName());
+
+ assertEquals(0, this.store.getStorefilesCount());
+
+ KeyValue kv = new KeyValue(row, family, qf1, 1, (byte[]) null);
+ // add some data, flush
+ this.store.add(kv, null);
+ flush(1);
+ kv = new KeyValue(row, family, qf2, 1, (byte[]) null);
+ // add some data, flush
+ this.store.add(kv, null);
+ flush(2);
+ kv = new KeyValue(row, family, qf3, 1, (byte[]) null);
+ // add some data, flush
+ this.store.add(kv, null);
+ flush(3);
+
+ ExecutorService service = Executors.newFixedThreadPool(2);
+
+ Scan scan = new Scan(new Get(row));
+ Future<KeyValueScanner> scanFuture = service.submit( () -> {
+ try {
+ LOG.info(">>>> creating scanner");
+ return this.store.createScanner(scan, new
ScanInfo(HBaseConfiguration.create(),
+
ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(4).build(),
+ Long.MAX_VALUE, 0, CellComparator.getInstance()),
+
scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()), 0);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ });
+ Future compactFuture = service.submit(() -> {
+ try {
+ LOG.info(">>>>>> starting compaction");
+ Optional<CompactionContext> opCompaction =
this.store.requestCompaction();
+ assertTrue(opCompaction.isPresent());
+ store.compact(opCompaction.get(), new NoLimitThroughputController(),
User.getCurrent());
+ LOG.info(">>>>>> Compaction is finished");
+ this.store.closeAndArchiveCompactedFiles();
+ LOG.info(">>>>>> Compacted files deleted");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ });
+
+ KeyValueScanner kvs = scanFuture.get();
+ ((StoreScanner)kvs).currentScanners.forEach(s -> {
+ if(s instanceof StoreFileScanner) {
+ assertEquals(1, ((StoreFileScanner)s).getReader().getRefCount());
+ }
+ });
+ compactFuture.get();
+ kvs.seek(kv);
Review Comment:
What is the purpose here? Do you want to add a validation?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]