diff options
author | Aman Sinha <asinha@maprtech.com> | 2016-08-03 09:00:51 -0700 |
---|---|---|
committer | Aman Sinha <asinha@maprtech.com> | 2016-08-17 12:04:00 -0700 |
commit | 57dc9f43b6c578c1f90fb7f9e2495b184ab17b21 (patch) | |
tree | a29a503a8082332018a953b01eaa31261c00aa94 /exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java | |
parent | 0a4c21cc15329c063f256f6fbf2c4c69a90d9fa1 (diff) |
DRILL-4846: Fix a few performance issues for metadata access:
- Create a MetadataContext that can be shared among multiple invocations of the Metadata APIs.
- Check directory modification time only if not previously checked.
- Remove a redundant call for metadata read.
- Added more logging.
- Consolidate couple of metadata methods.
close apache/drill#569
Diffstat (limited to 'exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java')
-rw-r--r-- | exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java index 7796212b8..a04f34d70 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java @@ -49,6 +49,7 @@ import org.apache.drill.exec.planner.logical.DynamicDrillTable; import org.apache.drill.exec.planner.physical.PlannerSettings; import org.apache.drill.exec.store.dfs.FileSelection; import org.apache.drill.exec.store.dfs.FormatSelection; +import org.apache.drill.exec.store.dfs.MetadataContext; import org.apache.drill.exec.vector.NullableVarCharVector; import org.apache.drill.exec.vector.ValueVector; @@ -211,7 +212,7 @@ public class FileSystemPartitionDescriptor extends AbstractPartitionDescriptor { @Override public TableScan createTableScan(List<PartitionLocation> newPartitionLocation, String cacheFileRoot, - boolean wasAllPartitionsPruned) throws Exception { + boolean wasAllPartitionsPruned, MetadataContext metaContext) throws Exception { List<String> newFiles = Lists.newArrayList(); for (final PartitionLocation location : newPartitionLocation) { if (!location.isCompositePartition()) { @@ -228,6 +229,7 @@ public class FileSystemPartitionDescriptor extends AbstractPartitionDescriptor { final FormatSelection formatSelection = (FormatSelection)table.getSelection(); final FileSelection newFileSelection = new FileSelection(null, newFiles, getBaseTableLocation(), cacheFileRoot, wasAllPartitionsPruned, formatSelection.getSelection().getDirStatus()); + newFileSelection.setMetaContext(metaContext); final FileGroupScan newGroupScan = ((FileGroupScan)((DrillScanRel)scanRel).getGroupScan()).clone(newFileSelection); return new DrillScanRel(scanRel.getCluster(), @@ -239,18 +241,19 @@ public class FileSystemPartitionDescriptor extends AbstractPartitionDescriptor { true /*filter pushdown*/); } else if (scanRel instanceof EnumerableTableScan) { return createNewTableScanFromSelection((EnumerableTableScan)scanRel, newFiles, cacheFileRoot, - wasAllPartitionsPruned); + wasAllPartitionsPruned, metaContext); } else { throw new UnsupportedOperationException("Only DrillScanRel and EnumerableTableScan is allowed!"); } } private TableScan createNewTableScanFromSelection(EnumerableTableScan oldScan, List<String> newFiles, String cacheFileRoot, - boolean wasAllPartitionsPruned) { + boolean wasAllPartitionsPruned, MetadataContext metaContext) { final RelOptTableImpl t = (RelOptTableImpl) oldScan.getTable(); final FormatSelection formatSelection = (FormatSelection) table.getSelection(); final FileSelection newFileSelection = new FileSelection(null, newFiles, getBaseTableLocation(), cacheFileRoot, wasAllPartitionsPruned, formatSelection.getSelection().getDirStatus()); + newFileSelection.setMetaContext(metaContext); final FormatSelection newFormatSelection = new FormatSelection(formatSelection.getFormat(), newFileSelection); final DrillTranslatableTable newTable = new DrillTranslatableTable( new DynamicDrillTable(table.getPlugin(), table.getStorageEngineName(), @@ -265,7 +268,7 @@ public class FileSystemPartitionDescriptor extends AbstractPartitionDescriptor { @Override public TableScan createTableScan(List<PartitionLocation> newPartitionLocation, boolean wasAllPartitionsPruned) throws Exception { - return createTableScan(newPartitionLocation, null, wasAllPartitionsPruned); + return createTableScan(newPartitionLocation, null, wasAllPartitionsPruned, null); } @Override |