DRILL-7468: Metastore unit tests may fail when used sources from the release archive
closes #1917
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestMetastoreCommands.java b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestMetastoreCommands.java
index c039d34..6cf9cc7 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestMetastoreCommands.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestMetastoreCommands.java
@@ -291,7 +291,7 @@
.build())
.path(new Path(tablePath, "1994"))
.schema(SCHEMA)
- .lastModifiedTime(new File(table, "1994").lastModified())
+ .lastModifiedTime(getMaxLastModified(new File(table, "1994")))
.column(SchemaPath.getSimplePath("dir0"))
.columnsStatistics(DIR0_1994_SEGMENT_COLUMN_STATISTICS)
.metadataStatistics(Collections.singletonList(new StatisticsHolder<>(40L, TableStatisticsKind.ROW_COUNT)))
@@ -433,7 +433,7 @@
.build())
.path(new Path(new Path(tablePath, "1994"), "Q1"))
.schema(SCHEMA)
- .lastModifiedTime(new File(new File(table, "1994"), "Q1").lastModified())
+ .lastModifiedTime(getMaxLastModified(new File(new File(table, "1994"), "Q1")))
.column(SchemaPath.getSimplePath("dir1"))
.columnsStatistics(DIR0_1994_Q1_SEGMENT_COLUMN_STATISTICS)
.metadataStatistics(Collections.singletonList(new StatisticsHolder<>(10L, TableStatisticsKind.ROW_COUNT)))
@@ -506,7 +506,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(analyzeLevel, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(tablePath.lastModified())
+ .lastModifiedTime(getMaxLastModified(tablePath))
.build();
try {
@@ -609,7 +609,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ROW_GROUP, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.interestingColumns(Collections.singletonList(orderStatusPath))
.build();
@@ -659,7 +659,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ROW_GROUP, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.interestingColumns(Collections.emptyList())
.build();
@@ -713,7 +713,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ROW_GROUP, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.interestingColumns(Arrays.asList(orderStatusPath, orderDatePath))
.build();
@@ -783,7 +783,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ROW_GROUP, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.interestingColumns(Collections.singletonList(orderStatusPath))
.build();
@@ -861,7 +861,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ROW_GROUP, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.interestingColumns(Arrays.asList(orderStatusPath, orderDatePath))
.build();
@@ -911,7 +911,7 @@
TableInfo tableInfo = getTableInfo(tableName, "tmp");
- long lastModifiedTime = table.lastModified();
+ long lastModifiedTime = getMaxLastModified(table);
try {
testBuilder()
@@ -994,7 +994,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(160L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ALL, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.build();
try {
@@ -1086,7 +1086,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(130L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ALL, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.build();
try {
@@ -1167,7 +1167,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(130L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ALL, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.build();
try {
@@ -1608,7 +1608,8 @@
Paths.get("multilevel", "parquet", "1994", "Q1", "orders_94_q1.parquet"),
Paths.get(tableName, "1994", "Q4", "orders_94_q4.parquet"));
- assertTrue(fileToUpdate.setLastModified(lastModified + 1000));
+ long newLastModified = lastModified + 1000;
+ assertTrue(fileToUpdate.setLastModified(newLastModified));
testBuilder()
.sqlQuery("ANALYZE TABLE dfs.tmp.`%s` REFRESH METADATA", tableName)
@@ -1644,7 +1645,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ALL, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(lastModified + 1000)
+ .lastModifiedTime(newLastModified)
.build();
assertEquals(expectedTableMetadata, actualTableMetadata);
@@ -1699,7 +1700,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.FILE, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.build();
try {
@@ -1752,7 +1753,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ROW_GROUP, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.build();
assertEquals(expectedTableMetadata, actualTableMetadata);
@@ -1774,9 +1775,10 @@
@SuppressWarnings("unchecked")
public void testDefaultSegment() throws Exception {
String tableName = "multilevel/parquet/1994/Q1";
- Path tablePath = new Path(dirTestWatcher.getRootDir().toURI().getPath(), tableName);
+ File table = dirTestWatcher.copyResourceToTestTmp(Paths.get(tableName), Paths.get(tableName));
+ Path tablePath = new Path(table.toURI().getPath());
- TableInfo tableInfo = getTableInfo(tableName, "default");
+ TableInfo tableInfo = getTableInfo(tableName, "tmp");
Map<SchemaPath, ColumnStatistics> tableColumnStatistics = new HashMap<>(TABLE_COLUMN_STATISTICS);
tableColumnStatistics.remove(SchemaPath.getSimplePath("dir0"));
@@ -1823,33 +1825,33 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(10L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ALL, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(new File(dirTestWatcher.getRootDir().toURI().getPath(), tableName).lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.build();
SegmentMetadata defaultSegment = SegmentMetadata.builder()
.tableInfo(TableInfo.builder()
.name(tableName)
.storagePlugin("dfs")
- .workspace("default")
+ .workspace("tmp")
.build())
.metadataInfo(MetadataInfo.builder()
.type(MetadataType.SEGMENT)
.key(MetadataInfo.DEFAULT_SEGMENT_KEY)
.build())
- .lastModifiedTime(new File(new File(dirTestWatcher.getRootDir().toURI().getPath(), tableName), "orders_94_q1.parquet").lastModified())
+ .lastModifiedTime(new File(table, "orders_94_q1.parquet").lastModified())
.columnsStatistics(Collections.emptyMap())
.metadataStatistics(Collections.emptyList())
- .path(new Path(dirTestWatcher.getRootDir().toURI().getPath(), tableName))
+ .path(tablePath)
.locations(ImmutableSet.of(
new Path(tablePath, "orders_94_q1.parquet")))
.build();
try {
testBuilder()
- .sqlQuery("ANALYZE TABLE dfs.`%s` REFRESH METADATA", tableName)
+ .sqlQuery("ANALYZE TABLE dfs.tmp.`%s` REFRESH METADATA", tableName)
.unOrdered()
.baselineColumns("ok", "summary")
- .baselineValues(true, String.format("Collected / refreshed metadata for table [dfs.default.%s]", tableName))
+ .baselineValues(true, String.format("Collected / refreshed metadata for table [dfs.tmp.%s]", tableName))
.go();
BaseTableMetadata actualTableMetadata = cluster.drillbit().getContext()
@@ -1934,7 +1936,7 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(5L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ALL, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.build();
try {
@@ -3009,7 +3011,27 @@
.metadataStatistics(Arrays.asList(new StatisticsHolder<>(120L, TableStatisticsKind.ROW_COUNT),
new StatisticsHolder<>(MetadataType.ALL, TableStatisticsKind.ANALYZE_METADATA_LEVEL)))
.partitionKeys(Collections.emptyMap())
- .lastModifiedTime(table.lastModified())
+ .lastModifiedTime(getMaxLastModified(table))
.build();
}
+
+ /**
+ * Returns last modification time for specified file or max last modification time of child files
+ * if specified one is a directory.
+ *
+ * @param file file whose last modification time should be returned
+ * @return last modification time
+ */
+ private long getMaxLastModified(File file) {
+ if (file.isDirectory()) {
+ File[] files = file.listFiles();
+ assert files != null : "Cannot obtain directory files";
+ return Arrays.stream(files)
+ .mapToLong(this::getMaxLastModified)
+ .max()
+ .orElse(file.lastModified());
+ } else {
+ return file.lastModified();
+ }
+ }
}