Skip to content

Commit c817c97

Browse files
authored
Created LoadFilesTest (apache#5355)
1 parent 3826ebd commit c817c97

File tree

5 files changed

+347
-28
lines changed

5 files changed

+347
-28
lines changed

core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ private void setLocationOnce(String val, String qual, LocationType lt) {
520520
}
521521

522522
@VisibleForTesting
523-
static TabletMetadata create(String id, String prevEndRow, String endRow) {
523+
public static TabletMetadata create(String id, String prevEndRow, String endRow) {
524524
TabletMetadata te = new TabletMetadata();
525525
te.tableId = TableId.of(id);
526526
te.sawPrevEndRow = true;

core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,8 @@ private TabletsMetadata(TabletMetadata tm) {
578578
this.tablets = Collections.singleton(tm);
579579
}
580580

581-
private TabletsMetadata(AutoCloseable closeable, Iterable<TabletMetadata> tmi) {
581+
// visible for testing
582+
public TabletsMetadata(AutoCloseable closeable, Iterable<TabletMetadata> tmi) {
582583
this.closeable = closeable;
583584
this.tablets = tmi;
584585
}

server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java

+38-24
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
import org.apache.accumulo.core.clientImpl.bulk.LoadMappingIterator;
4242
import org.apache.accumulo.core.conf.Property;
4343
import org.apache.accumulo.core.data.Mutation;
44-
import org.apache.accumulo.core.data.TableId;
4544
import org.apache.accumulo.core.dataImpl.KeyExtent;
4645
import org.apache.accumulo.core.dataImpl.thrift.MapFileInfo;
4746
import org.apache.accumulo.core.dataImpl.thrift.TKeyExtent;
@@ -82,6 +81,13 @@
8281
*/
8382
class LoadFiles extends ManagerRepo {
8483

84+
// visible for testing
85+
interface TabletsMetadataFactory {
86+
87+
TabletsMetadata newTabletsMetadata(Text startRow);
88+
89+
}
90+
8591
private static final long serialVersionUID = 1L;
8692

8793
private static final Logger log = LoggerFactory.getLogger(LoadFiles.class);
@@ -105,7 +111,19 @@ public long isReady(long tid, Manager manager) throws Exception {
105111
manager.updateBulkImportStatus(bulkInfo.sourceDir, BulkImportState.LOADING);
106112
try (LoadMappingIterator lmi =
107113
BulkSerialize.getUpdatedLoadMapping(bulkDir.toString(), bulkInfo.tableId, fs::open)) {
108-
return loadFiles(bulkInfo.tableId, bulkDir, lmi, manager, tid);
114+
115+
Loader loader;
116+
if (bulkInfo.tableState == TableState.ONLINE) {
117+
loader = new OnlineLoader();
118+
} else {
119+
loader = new OfflineLoader();
120+
}
121+
122+
TabletsMetadataFactory tmf = (startRow) -> TabletsMetadata.builder(manager.getContext())
123+
.forTable(bulkInfo.tableId).overlapping(startRow, null).checkConsistency()
124+
.fetch(PREV_ROW, LOCATION, LOADED).build();
125+
126+
return loadFiles(loader, bulkInfo, bulkDir, lmi, tmf, manager, tid);
109127
}
110128
}
111129

@@ -118,7 +136,8 @@ public Repo<Manager> call(final long tid, final Manager manager) {
118136
}
119137
}
120138

121-
private abstract static class Loader {
139+
// visible for testing
140+
public abstract static class Loader {
122141
protected Path bulkDir;
123142
protected Manager manager;
124143
protected long tid;
@@ -318,7 +337,7 @@ long finish() throws Exception {
318337
/**
319338
* Stats for the loadFiles method. Helps track wasted time and iterations.
320339
*/
321-
private static class ImportTimingStats {
340+
static class ImportTimingStats {
322341
Duration totalWastedTime = Duration.ZERO;
323342
long wastedIterations = 0;
324343
long tabletCount = 0;
@@ -331,8 +350,10 @@ private static class ImportTimingStats {
331350
* scan the metadata table getting Tablet range and location information. It will return 0 when
332351
* all files have been loaded.
333352
*/
334-
private long loadFiles(TableId tableId, Path bulkDir, LoadMappingIterator loadMapIter,
335-
Manager manager, long tid) throws Exception {
353+
// visible for testing
354+
static long loadFiles(Loader loader, BulkInfo bulkInfo, Path bulkDir,
355+
LoadMappingIterator loadMapIter, TabletsMetadataFactory factory, Manager manager, long tid)
356+
throws Exception {
336357
PeekingIterator<Map.Entry<KeyExtent,Bulk.Files>> lmi = new PeekingIterator<>(loadMapIter);
337358
Map.Entry<KeyExtent,Bulk.Files> loadMapEntry = lmi.peek();
338359

@@ -341,27 +362,19 @@ private long loadFiles(TableId tableId, Path bulkDir, LoadMappingIterator loadMa
341362
String fmtTid = FateTxId.formatTid(tid);
342363
log.trace("{}: Starting bulk load at row: {}", fmtTid, startRow);
343364

344-
Iterator<TabletMetadata> tabletIter =
345-
TabletsMetadata.builder(manager.getContext()).forTable(tableId).overlapping(startRow, null)
346-
.checkConsistency().fetch(PREV_ROW, LOCATION, LOADED).build().iterator();
347-
348-
Loader loader;
349-
if (bulkInfo.tableState == TableState.ONLINE) {
350-
loader = new OnlineLoader();
351-
} else {
352-
loader = new OfflineLoader();
353-
}
354-
355365
loader.start(bulkDir, manager, tid, bulkInfo.setTime);
356366

357367
ImportTimingStats importTimingStats = new ImportTimingStats();
358-
359368
Timer timer = Timer.startNew();
360-
while (lmi.hasNext()) {
361-
loadMapEntry = lmi.next();
362-
List<TabletMetadata> tablets =
363-
findOverlappingTablets(fmtTid, loadMapEntry.getKey(), tabletIter, importTimingStats);
364-
loader.load(tablets, loadMapEntry.getValue());
369+
try (TabletsMetadata tabletsMetadata = factory.newTabletsMetadata(startRow)) {
370+
371+
Iterator<TabletMetadata> tabletIter = tabletsMetadata.iterator();
372+
while (lmi.hasNext()) {
373+
loadMapEntry = lmi.next();
374+
List<TabletMetadata> tablets =
375+
findOverlappingTablets(fmtTid, loadMapEntry.getKey(), tabletIter, importTimingStats);
376+
loader.load(tablets, loadMapEntry.getValue());
377+
}
365378
}
366379
Duration totalProcessingTime = timer.elapsed();
367380

@@ -394,7 +407,8 @@ private long loadFiles(TableId tableId, Path bulkDir, LoadMappingIterator loadMa
394407
/**
395408
* Find all the tablets within the provided bulk load mapping range.
396409
*/
397-
private List<TabletMetadata> findOverlappingTablets(String fmtTid, KeyExtent loadRange,
410+
// visible for testing
411+
static List<TabletMetadata> findOverlappingTablets(String fmtTid, KeyExtent loadRange,
398412
Iterator<TabletMetadata> tabletIter, ImportTimingStats importTimingStats) {
399413

400414
TabletMetadata currTablet = null;

0 commit comments

Comments
 (0)