1
0

[HUDI-554] Cleanup package structure in hudi-client (#1346)

- Just package, class moves and renames with the following intent
 - `client` now has all the various client classes, that do the transaction management
 - `func` renamed to `execution` and some helpers moved to `client/utils`
 - All compaction code under `io` now under `table/compact`
 - Rollback code under `table/rollback` and in general all code for individual operations under `table`
 - `exception` `config`, `metrics` left untouched
 - Moved the tests also accordingly
 - Fixed some flaky tests
This commit is contained in:
vinoth chandar
2020-02-27 08:05:58 -08:00
committed by GitHub
parent cacd9a3322
commit 71170fafe7
90 changed files with 290 additions and 301 deletions

View File

@@ -215,7 +215,7 @@ License: http://www.apache.org/licenses/LICENSE-2.0
This product includes code from Apache SystemML. This product includes code from Apache SystemML.
* org.apache.hudi.func.LazyIterableIterator adapted from org/apache/sysml/runtime/instructions/spark/data/LazyIterableIterator * org.apache.hudi.client.utils.LazyIterableIterator adapted from org/apache/sysml/runtime/instructions/spark/data/LazyIterableIterator
Copyright: 2015-2018 The Apache Software Foundation Copyright: 2015-2018 The Apache Software Foundation
Home page: https://systemml.apache.org/ Home page: https://systemml.apache.org/

View File

@@ -18,8 +18,8 @@
package org.apache.hudi.cli.commands; package org.apache.hudi.cli.commands;
import org.apache.hudi.CompactionAdminClient.RenameOpResult; import org.apache.hudi.client.CompactionAdminClient.RenameOpResult;
import org.apache.hudi.CompactionAdminClient.ValidationOpResult; import org.apache.hudi.client.CompactionAdminClient.ValidationOpResult;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
import org.apache.hudi.cli.HoodieCLI; import org.apache.hudi.cli.HoodieCLI;
@@ -42,7 +42,7 @@ import org.apache.hudi.common.util.StringUtils;
import org.apache.hudi.common.util.collection.Pair; import org.apache.hudi.common.util.collection.Pair;
import org.apache.hudi.exception.HoodieException; import org.apache.hudi.exception.HoodieException;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;
import org.apache.hudi.func.OperationResult; import org.apache.hudi.table.compact.OperationResult;
import org.apache.hudi.utilities.UtilHelpers; import org.apache.hudi.utilities.UtilHelpers;
import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataInputStream;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.cli.commands; package org.apache.hudi.cli.commands;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.cli.HoodieCLI; import org.apache.hudi.cli.HoodieCLI;
import org.apache.hudi.cli.HoodiePrintHelper; import org.apache.hudi.cli.HoodiePrintHelper;
import org.apache.hudi.cli.utils.InputStreamConsumer; import org.apache.hudi.cli.utils.InputStreamConsumer;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.cli.commands; package org.apache.hudi.cli.commands;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.cli.DedupeSparkJob; import org.apache.hudi.cli.DedupeSparkJob;
import org.apache.hudi.cli.utils.SparkUtil; import org.apache.hudi.cli.utils.SparkUtil;
import org.apache.hudi.common.util.FSUtils; import org.apache.hudi.common.util.FSUtils;
@@ -26,7 +26,7 @@ import org.apache.hudi.common.util.StringUtils;
import org.apache.hudi.config.HoodieIndexConfig; import org.apache.hudi.config.HoodieIndexConfig;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.index.HoodieIndex; import org.apache.hudi.index.HoodieIndex;
import org.apache.hudi.io.compact.strategy.UnBoundedCompactionStrategy; import org.apache.hudi.table.compact.strategy.UnBoundedCompactionStrategy;
import org.apache.hudi.utilities.HDFSParquetImporter; import org.apache.hudi.utilities.HDFSParquetImporter;
import org.apache.hudi.utilities.HDFSParquetImporter.Config; import org.apache.hudi.utilities.HDFSParquetImporter.Config;
import org.apache.hudi.utilities.HoodieCleaner; import org.apache.hudi.utilities.HoodieCleaner;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.cli.utils; package org.apache.hudi.cli.utils;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.cli.commands.SparkEnvCommand; import org.apache.hudi.cli.commands.SparkEnvCommand;
import org.apache.hudi.cli.commands.SparkMain; import org.apache.hudi.cli.commands.SparkMain;
import org.apache.hudi.common.util.FSUtils; import org.apache.hudi.common.util.FSUtils;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.client.embedded.EmbeddedTimelineService; import org.apache.hudi.client.embedded.EmbeddedTimelineService;
import org.apache.hudi.client.utils.ClientUtils; import org.apache.hudi.client.utils.ClientUtils;

View File

@@ -16,9 +16,10 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import java.util.Collections; import java.util.Collections;
import org.apache.hudi.avro.model.HoodieRollbackMetadata; import org.apache.hudi.avro.model.HoodieRollbackMetadata;
import org.apache.hudi.client.embedded.EmbeddedTimelineService; import org.apache.hudi.client.embedded.EmbeddedTimelineService;
import org.apache.hudi.common.HoodieRollbackStat; import org.apache.hudi.common.HoodieRollbackStat;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
@@ -40,7 +40,7 @@ import org.apache.hudi.common.util.collection.Pair;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.exception.HoodieException; import org.apache.hudi.exception.HoodieException;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;
import org.apache.hudi.func.OperationResult; import org.apache.hudi.table.compact.OperationResult;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileStatus;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.avro.model.HoodieCleanMetadata; import org.apache.hudi.avro.model.HoodieCleanMetadata;
import org.apache.hudi.avro.model.HoodieCleanerPlan; import org.apache.hudi.avro.model.HoodieCleanerPlan;
@@ -78,7 +78,7 @@ public class HoodieCleanClient<T extends HoodieRecordPayload> extends AbstractHo
* @param startCleanTime Cleaner Instant Timestamp * @param startCleanTime Cleaner Instant Timestamp
* @throws HoodieIOException in case of any IOException * @throws HoodieIOException in case of any IOException
*/ */
protected HoodieCleanMetadata clean(String startCleanTime) throws HoodieIOException { public HoodieCleanMetadata clean(String startCleanTime) throws HoodieIOException {
// Create a Hoodie table which encapsulated the commits and files visible // Create a Hoodie table which encapsulated the commits and files visible
final HoodieTable<T> table = HoodieTable.getHoodieTable(createMetaClient(true), config, jsc); final HoodieTable<T> table = HoodieTable.getHoodieTable(createMetaClient(true), config, jsc);
@@ -136,7 +136,7 @@ public class HoodieCleanClient<T extends HoodieRecordPayload> extends AbstractHo
* @param table Hoodie Table * @param table Hoodie Table
* @param cleanInstant Cleaner Instant * @param cleanInstant Cleaner Instant
*/ */
protected HoodieCleanMetadata runClean(HoodieTable<T> table, HoodieInstant cleanInstant) { public HoodieCleanMetadata runClean(HoodieTable<T> table, HoodieInstant cleanInstant) {
try { try {
HoodieCleanerPlan cleanerPlan = CleanerUtils.getCleanerPlan(table.getMetaClient(), cleanInstant); HoodieCleanerPlan cleanerPlan = CleanerUtils.getCleanerPlan(table.getMetaClient(), cleanInstant);
return runClean(table, cleanInstant, cleanerPlan); return runClean(table, cleanInstant, cleanerPlan);

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
import org.apache.hudi.client.embedded.EmbeddedTimelineService; import org.apache.hudi.client.embedded.EmbeddedTimelineService;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.avro.model.HoodieCleanMetadata; import org.apache.hudi.avro.model.HoodieCleanMetadata;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
@@ -51,9 +51,9 @@ import org.apache.hudi.exception.HoodieInsertException;
import org.apache.hudi.exception.HoodieRollbackException; import org.apache.hudi.exception.HoodieRollbackException;
import org.apache.hudi.exception.HoodieSavepointException; import org.apache.hudi.exception.HoodieSavepointException;
import org.apache.hudi.exception.HoodieUpsertException; import org.apache.hudi.exception.HoodieUpsertException;
import org.apache.hudi.func.BulkInsertMapFunction; import org.apache.hudi.execution.BulkInsertMapFunction;
import org.apache.hudi.index.HoodieIndex; import org.apache.hudi.index.HoodieIndex;
import org.apache.hudi.io.HoodieCommitArchiveLog; import org.apache.hudi.table.HoodieCommitArchiveLog;
import org.apache.hudi.metrics.HoodieMetrics; import org.apache.hudi.metrics.HoodieMetrics;
import org.apache.hudi.table.HoodieTable; import org.apache.hudi.table.HoodieTable;
import org.apache.hudi.table.UserDefinedBulkInsertPartitioner; import org.apache.hudi.table.UserDefinedBulkInsertPartitioner;
@@ -1111,7 +1111,7 @@ public class HoodieWriteClient<T extends HoodieRecordPayload> extends AbstractHo
* @param inflightInstant Inflight Compaction Instant * @param inflightInstant Inflight Compaction Instant
* @param table Hoodie Table * @param table Hoodie Table
*/ */
void rollbackInflightCompaction(HoodieInstant inflightInstant, HoodieTable table) throws IOException { public void rollbackInflightCompaction(HoodieInstant inflightInstant, HoodieTable table) throws IOException {
table.rollback(jsc, inflightInstant, false); table.rollback(jsc, inflightInstant, false);
// Revert instant state file // Revert instant state file
table.getActiveTimeline().revertCompactionInflightToRequested(inflightInstant); table.getActiveTimeline().revertCompactionInflightToRequested(inflightInstant);

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.client.utils;
import java.util.Iterator; import java.util.Iterator;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.client.utils;
import org.apache.hudi.common.util.queue.BoundedInMemoryQueue; import org.apache.hudi.common.util.queue.BoundedInMemoryQueue;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;

View File

@@ -20,8 +20,8 @@ package org.apache.hudi.config;
import org.apache.hudi.common.model.HoodieCleaningPolicy; import org.apache.hudi.common.model.HoodieCleaningPolicy;
import org.apache.hudi.common.model.OverwriteWithLatestAvroPayload; import org.apache.hudi.common.model.OverwriteWithLatestAvroPayload;
import org.apache.hudi.io.compact.strategy.CompactionStrategy; import org.apache.hudi.table.compact.strategy.CompactionStrategy;
import org.apache.hudi.io.compact.strategy.LogFileSizeBasedCompactionStrategy; import org.apache.hudi.table.compact.strategy.LogFileSizeBasedCompactionStrategy;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;

View File

@@ -18,15 +18,15 @@
package org.apache.hudi.config; package org.apache.hudi.config;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieCleaningPolicy; import org.apache.hudi.common.model.HoodieCleaningPolicy;
import org.apache.hudi.common.model.TimelineLayoutVersion; import org.apache.hudi.common.model.TimelineLayoutVersion;
import org.apache.hudi.common.table.view.FileSystemViewStorageConfig; import org.apache.hudi.common.table.view.FileSystemViewStorageConfig;
import org.apache.hudi.common.util.ConsistencyGuardConfig; import org.apache.hudi.common.util.ConsistencyGuardConfig;
import org.apache.hudi.common.util.ReflectionUtils; import org.apache.hudi.common.util.ReflectionUtils;
import org.apache.hudi.index.HoodieIndex; import org.apache.hudi.index.HoodieIndex;
import org.apache.hudi.io.compact.strategy.CompactionStrategy; import org.apache.hudi.table.compact.strategy.CompactionStrategy;
import org.apache.hudi.metrics.MetricsReporterType; import org.apache.hudi.metrics.MetricsReporterType;
import org.apache.parquet.hadoop.metadata.CompressionCodecName; import org.apache.parquet.hadoop.metadata.CompressionCodecName;

View File

@@ -16,9 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.execution;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordPayload; import org.apache.hudi.common.model.HoodieRecordPayload;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;

View File

@@ -16,9 +16,10 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.execution;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.client.utils.LazyIterableIterator;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordPayload; import org.apache.hudi.common.model.HoodieRecordPayload;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;

View File

@@ -16,9 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.execution;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordPayload; import org.apache.hudi.common.model.HoodieRecordPayload;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.execution;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
import org.apache.hudi.common.util.queue.BoundedInMemoryExecutor; import org.apache.hudi.common.util.queue.BoundedInMemoryExecutor;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.index; package org.apache.hudi.index;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.FileSlice; import org.apache.hudi.common.model.FileSlice;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.index; package org.apache.hudi.index;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordLocation; import org.apache.hudi.common.model.HoodieRecordLocation;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.index.bloom; package org.apache.hudi.index.bloom;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordLocation; import org.apache.hudi.common.model.HoodieRecordLocation;

View File

@@ -23,7 +23,7 @@ import org.apache.hudi.common.util.collection.Pair;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.exception.HoodieException; import org.apache.hudi.exception.HoodieException;
import org.apache.hudi.exception.HoodieIndexException; import org.apache.hudi.exception.HoodieIndexException;
import org.apache.hudi.func.LazyIterableIterator; import org.apache.hudi.client.utils.LazyIterableIterator;
import org.apache.hudi.io.HoodieKeyLookupHandle; import org.apache.hudi.io.HoodieKeyLookupHandle;
import org.apache.hudi.io.HoodieKeyLookupHandle.KeyLookupResult; import org.apache.hudi.io.HoodieKeyLookupHandle.KeyLookupResult;
import org.apache.hudi.table.HoodieTable; import org.apache.hudi.table.HoodieTable;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.index.hbase; package org.apache.hudi.index.hbase;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordLocation; import org.apache.hudi.common.model.HoodieRecordLocation;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.io; package org.apache.hudi.io;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.FileSlice; import org.apache.hudi.common.model.FileSlice;
import org.apache.hudi.common.model.HoodieDeltaWriteStat; import org.apache.hudi.common.model.HoodieDeltaWriteStat;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.io; package org.apache.hudi.io;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodiePartitionMetadata; import org.apache.hudi.common.model.HoodiePartitionMetadata;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordLocation; import org.apache.hudi.common.model.HoodieRecordLocation;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.io; package org.apache.hudi.io;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieBaseFile; import org.apache.hudi.common.model.HoodieBaseFile;
import org.apache.hudi.common.model.HoodiePartitionMetadata; import org.apache.hudi.common.model.HoodiePartitionMetadata;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.io; package org.apache.hudi.io;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordPayload; import org.apache.hudi.common.model.HoodieRecordPayload;
import org.apache.hudi.common.util.FSUtils; import org.apache.hudi.common.util.FSUtils;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io; package org.apache.hudi.table;
import org.apache.hudi.avro.model.HoodieCleanMetadata; import org.apache.hudi.avro.model.HoodieCleanMetadata;
import org.apache.hudi.common.model.CompactionOperation; import org.apache.hudi.common.model.CompactionOperation;
@@ -38,7 +38,6 @@ import org.apache.hudi.common.util.Option;
import org.apache.hudi.common.util.collection.Pair; import org.apache.hudi.common.util.collection.Pair;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;
import org.apache.hudi.table.HoodieTable;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@@ -60,9 +59,9 @@ import java.util.stream.Collectors;
* <p> * <p>
* TODO: Should all cleaning be done based on {@link HoodieCommitMetadata} * TODO: Should all cleaning be done based on {@link HoodieCommitMetadata}
*/ */
public class HoodieCleanHelper<T extends HoodieRecordPayload<T>> implements Serializable { public class CleanHelper<T extends HoodieRecordPayload<T>> implements Serializable {
private static final Logger LOG = LogManager.getLogger(HoodieCleanHelper.class); private static final Logger LOG = LogManager.getLogger(CleanHelper.class);
private final SyncableFileSystemView fileSystemView; private final SyncableFileSystemView fileSystemView;
private final HoodieTimeline commitTimeline; private final HoodieTimeline commitTimeline;
@@ -70,7 +69,7 @@ public class HoodieCleanHelper<T extends HoodieRecordPayload<T>> implements Seri
private HoodieTable<T> hoodieTable; private HoodieTable<T> hoodieTable;
private HoodieWriteConfig config; private HoodieWriteConfig config;
public HoodieCleanHelper(HoodieTable<T> hoodieTable, HoodieWriteConfig config) { public CleanHelper(HoodieTable<T> hoodieTable, HoodieWriteConfig config) {
this.hoodieTable = hoodieTable; this.hoodieTable = hoodieTable;
this.fileSystemView = hoodieTable.getHoodieView(); this.fileSystemView = hoodieTable.getHoodieView();
this.commitTimeline = hoodieTable.getCompletedCommitTimeline(); this.commitTimeline = hoodieTable.getCompletedCommitTimeline();

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io; package org.apache.hudi.table;
import org.apache.hudi.avro.model.HoodieArchivedMetaEntry; import org.apache.hudi.avro.model.HoodieArchivedMetaEntry;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
@@ -45,7 +45,6 @@ import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.exception.HoodieCommitException; import org.apache.hudi.exception.HoodieCommitException;
import org.apache.hudi.exception.HoodieException; import org.apache.hudi.exception.HoodieException;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;
import org.apache.hudi.table.HoodieTable;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.table; package org.apache.hudi.table;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.model.HoodieActionInstant; import org.apache.hudi.avro.model.HoodieActionInstant;
import org.apache.hudi.avro.model.HoodieCleanerPlan; import org.apache.hudi.avro.model.HoodieCleanerPlan;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
@@ -46,10 +46,9 @@ import org.apache.hudi.exception.HoodieException;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;
import org.apache.hudi.exception.HoodieNotSupportedException; import org.apache.hudi.exception.HoodieNotSupportedException;
import org.apache.hudi.exception.HoodieUpsertException; import org.apache.hudi.exception.HoodieUpsertException;
import org.apache.hudi.func.CopyOnWriteLazyInsertIterable; import org.apache.hudi.execution.CopyOnWriteLazyInsertIterable;
import org.apache.hudi.func.ParquetReaderIterator; import org.apache.hudi.client.utils.ParquetReaderIterator;
import org.apache.hudi.func.SparkBoundedInMemoryExecutor; import org.apache.hudi.execution.SparkBoundedInMemoryExecutor;
import org.apache.hudi.io.HoodieCleanHelper;
import org.apache.hudi.io.HoodieCreateHandle; import org.apache.hudi.io.HoodieCreateHandle;
import org.apache.hudi.io.HoodieMergeHandle; import org.apache.hudi.io.HoodieMergeHandle;
@@ -58,6 +57,8 @@ import org.apache.avro.generic.GenericRecord;
import org.apache.avro.generic.IndexedRecord; import org.apache.avro.generic.IndexedRecord;
import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hudi.table.rollback.RollbackHelper;
import org.apache.hudi.table.rollback.RollbackRequest;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.parquet.avro.AvroParquetReader; import org.apache.parquet.avro.AvroParquetReader;
@@ -284,7 +285,7 @@ public class HoodieCopyOnWriteTable<T extends HoodieRecordPayload> extends Hoodi
@Override @Override
public HoodieCleanerPlan scheduleClean(JavaSparkContext jsc) { public HoodieCleanerPlan scheduleClean(JavaSparkContext jsc) {
try { try {
HoodieCleanHelper cleaner = new HoodieCleanHelper(this, config); CleanHelper cleaner = new CleanHelper(this, config);
Option<HoodieInstant> earliestInstant = cleaner.getEarliestCommitToRetain(); Option<HoodieInstant> earliestInstant = cleaner.getEarliestCommitToRetain();
List<String> partitionsToClean = cleaner.getPartitionPathsToClean(earliestInstant); List<String> partitionsToClean = cleaner.getPartitionPathsToClean(earliestInstant);
@@ -370,7 +371,7 @@ public class HoodieCopyOnWriteTable<T extends HoodieRecordPayload> extends Hoodi
List<RollbackRequest> rollbackRequests = generateRollbackRequests(instant); List<RollbackRequest> rollbackRequests = generateRollbackRequests(instant);
//TODO: We need to persist this as rollback workload and use it in case of partial failures //TODO: We need to persist this as rollback workload and use it in case of partial failures
stats = new RollbackExecutor(metaClient, config).performRollback(jsc, instant, rollbackRequests); stats = new RollbackHelper(metaClient, config).performRollback(jsc, instant, rollbackRequests);
} }
// Delete Inflight instant if enabled // Delete Inflight instant if enabled
deleteInflightAndRequestedInstant(deleteInstants, activeTimeline, instant); deleteInflightAndRequestedInstant(deleteInstants, activeTimeline, instant);

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.table; package org.apache.hudi.table;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
import org.apache.hudi.common.HoodieRollbackStat; import org.apache.hudi.common.HoodieRollbackStat;
import org.apache.hudi.common.model.FileSlice; import org.apache.hudi.common.model.FileSlice;
@@ -38,11 +38,13 @@ import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.exception.HoodieCompactionException; import org.apache.hudi.exception.HoodieCompactionException;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;
import org.apache.hudi.exception.HoodieUpsertException; import org.apache.hudi.exception.HoodieUpsertException;
import org.apache.hudi.func.MergeOnReadLazyInsertIterable; import org.apache.hudi.execution.MergeOnReadLazyInsertIterable;
import org.apache.hudi.io.HoodieAppendHandle; import org.apache.hudi.io.HoodieAppendHandle;
import org.apache.hudi.io.compact.HoodieMergeOnReadTableCompactor; import org.apache.hudi.table.compact.HoodieMergeOnReadTableCompactor;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import org.apache.hudi.table.rollback.RollbackHelper;
import org.apache.hudi.table.rollback.RollbackRequest;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.spark.Partitioner; import org.apache.spark.Partitioner;
@@ -194,7 +196,7 @@ public class HoodieMergeOnReadTable<T extends HoodieRecordPayload> extends Hoodi
LOG.info("Unpublished " + commit); LOG.info("Unpublished " + commit);
List<RollbackRequest> rollbackRequests = generateRollbackRequests(jsc, instant); List<RollbackRequest> rollbackRequests = generateRollbackRequests(jsc, instant);
// TODO: We need to persist this as rollback workload and use it in case of partial failures // TODO: We need to persist this as rollback workload and use it in case of partial failures
allRollbackStats = new RollbackExecutor(metaClient, config).performRollback(jsc, instant, rollbackRequests); allRollbackStats = new RollbackHelper(metaClient, config).performRollback(jsc, instant, rollbackRequests);
} }
// Delete Inflight instants if enabled // Delete Inflight instants if enabled

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.table; package org.apache.hudi.table;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.model.HoodieCleanerPlan; import org.apache.hudi.avro.model.HoodieCleanerPlan;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
import org.apache.hudi.avro.model.HoodieSavepointMetadata; import org.apache.hudi.avro.model.HoodieSavepointMetadata;

View File

@@ -16,9 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact; package org.apache.hudi.table.compact;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
import org.apache.hudi.common.model.HoodieFileGroupId; import org.apache.hudi.common.model.HoodieFileGroupId;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;

View File

@@ -16,9 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact; package org.apache.hudi.table.compact;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
import org.apache.hudi.common.model.CompactionOperation; import org.apache.hudi.common.model.CompactionOperation;
@@ -37,7 +37,7 @@ import org.apache.hudi.common.util.HoodieAvroUtils;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
import org.apache.hudi.common.util.collection.Pair; import org.apache.hudi.common.util.collection.Pair;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.io.compact.strategy.CompactionStrategy; import org.apache.hudi.table.compact.strategy.CompactionStrategy;
import org.apache.hudi.table.HoodieCopyOnWriteTable; import org.apache.hudi.table.HoodieCopyOnWriteTable;
import org.apache.hudi.table.HoodieTable; import org.apache.hudi.table.HoodieTable;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.table.compact;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact.strategy; package org.apache.hudi.table.compact.strategy;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact.strategy; package org.apache.hudi.table.compact.strategy;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact.strategy; package org.apache.hudi.table.compact.strategy;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
@@ -26,7 +26,7 @@ import org.apache.hudi.common.util.CompactionUtils;
import org.apache.hudi.common.util.FSUtils; import org.apache.hudi.common.util.FSUtils;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.io.compact.HoodieMergeOnReadTableCompactor; import org.apache.hudi.table.compact.HoodieMergeOnReadTableCompactor;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap; import java.util.HashMap;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact.strategy; package org.apache.hudi.table.compact.strategy;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact.strategy; package org.apache.hudi.table.compact.strategy;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact.strategy; package org.apache.hudi.table.compact.strategy;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.compact.strategy; package org.apache.hudi.table.compact.strategy;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.table; package org.apache.hudi.table.rollback;
import org.apache.hudi.common.HoodieRollbackStat; import org.apache.hudi.common.HoodieRollbackStat;
import org.apache.hudi.common.model.HoodieLogFile; import org.apache.hudi.common.model.HoodieLogFile;
@@ -53,14 +53,14 @@ import scala.Tuple2;
/** /**
* Performs Rollback of Hoodie Tables. * Performs Rollback of Hoodie Tables.
*/ */
public class RollbackExecutor implements Serializable { public class RollbackHelper implements Serializable {
private static final Logger LOG = LogManager.getLogger(RollbackExecutor.class); private static final Logger LOG = LogManager.getLogger(RollbackHelper.class);
private final HoodieTableMetaClient metaClient; private final HoodieTableMetaClient metaClient;
private final HoodieWriteConfig config; private final HoodieWriteConfig config;
public RollbackExecutor(HoodieTableMetaClient metaClient, HoodieWriteConfig config) { public RollbackHelper(HoodieTableMetaClient metaClient, HoodieWriteConfig config) {
this.metaClient = metaClient; this.metaClient = metaClient;
this.config = config; this.config = config;
} }
@@ -68,8 +68,7 @@ public class RollbackExecutor implements Serializable {
/** /**
* Performs all rollback actions that we have collected in parallel. * Performs all rollback actions that we have collected in parallel.
*/ */
public List<HoodieRollbackStat> performRollback(JavaSparkContext jsc, HoodieInstant instantToRollback, public List<HoodieRollbackStat> performRollback(JavaSparkContext jsc, HoodieInstant instantToRollback, List<RollbackRequest> rollbackRequests) {
List<RollbackRequest> rollbackRequests) {
SerializablePathFilter filter = (path) -> { SerializablePathFilter filter = (path) -> {
if (path.toString().contains(".parquet")) { if (path.toString().contains(".parquet")) {

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.table; package org.apache.hudi.table.rollback;
import org.apache.hudi.common.table.timeline.HoodieInstant; import org.apache.hudi.common.table.timeline.HoodieInstant;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
@@ -30,7 +30,9 @@ public class RollbackRequest {
* Rollback Action Types. * Rollback Action Types.
*/ */
public enum RollbackAction { public enum RollbackAction {
DELETE_DATA_FILES_ONLY, DELETE_DATA_AND_LOG_FILES, APPEND_ROLLBACK_BLOCK DELETE_DATA_FILES_ONLY,
DELETE_DATA_AND_LOG_FILES,
APPEND_ROLLBACK_BLOCK
} }
/** /**

View File

@@ -16,8 +16,8 @@
* limitations under the License. * limitations under the License.
*/ */
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.HoodieAvroPayload; import org.apache.hudi.common.model.HoodieAvroPayload;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.HoodieCleaningPolicy; import org.apache.hudi.common.model.HoodieCleaningPolicy;

View File

@@ -16,9 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.CompactionAdminClient.ValidationOpResult; import org.apache.hudi.client.CompactionAdminClient.ValidationOpResult;
import org.apache.hudi.common.model.CompactionOperation; import org.apache.hudi.common.model.CompactionOperation;
import org.apache.hudi.common.model.FileSlice; import org.apache.hudi.common.model.FileSlice;
import org.apache.hudi.common.model.HoodieFileGroup; import org.apache.hudi.common.model.HoodieFileGroup;
@@ -32,7 +32,7 @@ import org.apache.hudi.common.util.Option;
import org.apache.hudi.common.util.collection.Pair; import org.apache.hudi.common.util.collection.Pair;
import org.apache.hudi.exception.HoodieException; import org.apache.hudi.exception.HoodieException;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;
import org.apache.hudi.func.OperationResult; import org.apache.hudi.table.compact.OperationResult;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.junit.After; import org.junit.After;
@@ -48,8 +48,8 @@ import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import static org.apache.hudi.CompactionAdminClient.getRenamingActionsToAlignWithCompactionOperation; import static org.apache.hudi.client.CompactionAdminClient.getRenamingActionsToAlignWithCompactionOperation;
import static org.apache.hudi.CompactionAdminClient.renameLogFile; import static org.apache.hudi.client.CompactionAdminClient.renameLogFile;
import static org.apache.hudi.common.model.HoodieTableType.MERGE_ON_READ; import static org.apache.hudi.common.model.HoodieTableType.MERGE_ON_READ;
public class TestCompactionAdminClient extends TestHoodieClientBase { public class TestCompactionAdminClient extends TestHoodieClientBase {

View File

@@ -16,8 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieCleanStat; import org.apache.hudi.common.HoodieCleanStat;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
@@ -61,6 +62,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
@@ -122,7 +124,7 @@ public class TestHoodieClientBase extends HoodieClientTestHarness {
* *
* @return Config Builder * @return Config Builder
*/ */
HoodieWriteConfig.Builder getConfigBuilder() { protected HoodieWriteConfig.Builder getConfigBuilder() {
return getConfigBuilder(HoodieTestDataGenerator.TRIP_EXAMPLE_SCHEMA); return getConfigBuilder(HoodieTestDataGenerator.TRIP_EXAMPLE_SCHEMA);
} }
@@ -169,13 +171,27 @@ public class TestHoodieClientBase extends HoodieClientTestHarness {
* *
* @param statuses List of Write Status * @param statuses List of Write Status
*/ */
static void assertNoWriteErrors(List<WriteStatus> statuses) { public static void assertNoWriteErrors(List<WriteStatus> statuses) {
// Verify there are no errors // Verify there are no errors
for (WriteStatus status : statuses) { for (WriteStatus status : statuses) {
assertFalse("Errors found in write of " + status.getFileId(), status.hasErrors()); assertFalse("Errors found in write of " + status.getFileId(), status.hasErrors());
} }
} }
void assertPartitionMetadataForRecords(List<HoodieRecord> inputRecords, FileSystem fs) throws IOException {
Set<String> partitionPathSet = inputRecords.stream()
.map(HoodieRecord::getPartitionPath)
.collect(Collectors.toSet());
assertPartitionMetadata(partitionPathSet.stream().toArray(String[]::new), fs);
}
void assertPartitionMetadataForKeys(List<HoodieKey> inputKeys, FileSystem fs) throws IOException {
Set<String> partitionPathSet = inputKeys.stream()
.map(HoodieKey::getPartitionPath)
.collect(Collectors.toSet());
assertPartitionMetadata(partitionPathSet.stream().toArray(String[]::new), fs);
}
/** /**
* Ensure presence of partition meta-data at known depth. * Ensure presence of partition meta-data at known depth.
* *
@@ -198,7 +214,7 @@ public class TestHoodieClientBase extends HoodieClientTestHarness {
* @param taggedRecords Tagged Records * @param taggedRecords Tagged Records
* @param commitTime Commit Timestamp * @param commitTime Commit Timestamp
*/ */
void checkTaggedRecords(List<HoodieRecord> taggedRecords, String commitTime) { protected void checkTaggedRecords(List<HoodieRecord> taggedRecords, String commitTime) {
for (HoodieRecord rec : taggedRecords) { for (HoodieRecord rec : taggedRecords) {
assertTrue("Record " + rec + " found with no location.", rec.isCurrentLocationKnown()); assertTrue("Record " + rec + " found with no location.", rec.isCurrentLocationKnown());
assertEquals("All records should have commit time " + commitTime + ", since updates were made", assertEquals("All records should have commit time " + commitTime + ", since updates were made",
@@ -276,8 +292,9 @@ public class TestHoodieClientBase extends HoodieClientTestHarness {
* @param wrapped Actual Records Generation function * @param wrapped Actual Records Generation function
* @return Wrapped Function * @return Wrapped Function
*/ */
Function2<List<HoodieRecord>, String, Integer> generateWrapRecordsFn(boolean isPreppedAPI, protected Function2<List<HoodieRecord>, String, Integer> generateWrapRecordsFn(boolean isPreppedAPI,
HoodieWriteConfig writeConfig, Function2<List<HoodieRecord>, String, Integer> wrapped) { HoodieWriteConfig writeConfig,
Function2<List<HoodieRecord>, String, Integer> wrapped) {
if (isPreppedAPI) { if (isPreppedAPI) {
return wrapRecordsGenFunctionForPreppedCalls(writeConfig, wrapped); return wrapRecordsGenFunctionForPreppedCalls(writeConfig, wrapped);
} else { } else {
@@ -424,7 +441,7 @@ public class TestHoodieClientBase extends HoodieClientTestHarness {
assertNoWriteErrors(statuses); assertNoWriteErrors(statuses);
// check the partition metadata is written out // check the partition metadata is written out
assertPartitionMetadata(HoodieTestDataGenerator.DEFAULT_PARTITION_PATHS, fs); assertPartitionMetadataForRecords(records, fs);
// verify that there is a commit // verify that there is a commit
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), basePath); HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), basePath);
@@ -492,7 +509,7 @@ public class TestHoodieClientBase extends HoodieClientTestHarness {
assertNoWriteErrors(statuses); assertNoWriteErrors(statuses);
// check the partition metadata is written out // check the partition metadata is written out
assertPartitionMetadata(HoodieTestDataGenerator.DEFAULT_PARTITION_PATHS, fs); assertPartitionMetadataForKeys(keysToDelete, fs);
// verify that there is a commit // verify that there is a commit
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), basePath); HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), basePath);
@@ -530,20 +547,20 @@ public class TestHoodieClientBase extends HoodieClientTestHarness {
* @param partitionPath Partition path for filtering * @param partitionPath Partition path for filtering
* @return Cleaner state corresponding to partition path * @return Cleaner state corresponding to partition path
*/ */
HoodieCleanStat getCleanStat(List<HoodieCleanStat> hoodieCleanStatsTwo, String partitionPath) { protected HoodieCleanStat getCleanStat(List<HoodieCleanStat> hoodieCleanStatsTwo, String partitionPath) {
return hoodieCleanStatsTwo.stream().filter(e -> e.getPartitionPath().equals(partitionPath)).findFirst().orElse(null); return hoodieCleanStatsTwo.stream().filter(e -> e.getPartitionPath().equals(partitionPath)).findFirst().orElse(null);
} }
// Functional Interfaces for passing lambda and Hoodie Write API contexts // Functional Interfaces for passing lambda and Hoodie Write API contexts
@FunctionalInterface @FunctionalInterface
interface Function2<R, T1, T2> { public interface Function2<R, T1, T2> {
R apply(T1 v1, T2 v2) throws IOException; R apply(T1 v1, T2 v2) throws IOException;
} }
@FunctionalInterface @FunctionalInterface
interface Function3<R, T1, T2, T3> { public interface Function3<R, T1, T2, T3> {
R apply(T1 v1, T2 v2, T3 v3) throws IOException; R apply(T1 v1, T2 v2, T3 v3) throws IOException;
} }

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
@@ -408,7 +408,7 @@ public class TestHoodieClientOnCopyOnWriteStorage extends TestHoodieClientBase {
assertNoWriteErrors(statuses); assertNoWriteErrors(statuses);
// check the partition metadata is written out // check the partition metadata is written out
assertPartitionMetadata(HoodieTestDataGenerator.DEFAULT_PARTITION_PATHS, fs); assertPartitionMetadataForRecords(inserts1, fs);
String[] fullPartitionPaths = new String[dataGen.getPartitionPaths().length]; String[] fullPartitionPaths = new String[dataGen.getPartitionPaths().length];
for (int i = 0; i < fullPartitionPaths.length; i++) { for (int i = 0; i < fullPartitionPaths.length; i++) {
fullPartitionPaths[i] = String.format("%s/%s/*", basePath, dataGen.getPartitionPaths()[i]); fullPartitionPaths[i] = String.format("%s/%s/*", basePath, dataGen.getPartitionPaths()[i]);
@@ -430,7 +430,7 @@ public class TestHoodieClientOnCopyOnWriteStorage extends TestHoodieClientBase {
assertNoWriteErrors(statuses1); assertNoWriteErrors(statuses1);
// check the partition metadata is written out // check the partition metadata is written out
assertPartitionMetadata(HoodieTestDataGenerator.DEFAULT_PARTITION_PATHS, fs); assertPartitionMetadataForRecords(updates1, fs);
// Check the entire dataset has all records still // Check the entire dataset has all records still
fullPartitionPaths = new String[dataGen.getPartitionPaths().length]; fullPartitionPaths = new String[dataGen.getPartitionPaths().length];
for (int i = 0; i < fullPartitionPaths.length; i++) { for (int i = 0; i < fullPartitionPaths.length; i++) {

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -16,8 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.HoodieAvroPayload; import org.apache.hudi.common.model.HoodieAvroPayload;

View File

@@ -16,11 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.client;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.WriteStatus;
import org.apache.hudi.common.SerializableConfiguration;
import org.apache.hudi.common.TestRawTripPayload; import org.apache.hudi.common.TestRawTripPayload;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
@@ -42,7 +40,7 @@ import org.apache.parquet.avro.AvroReadSupport;
import org.junit.After; import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; //import org.junit.Test;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -50,13 +48,13 @@ import java.util.List;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
public class TestUpdateMapFunction extends HoodieClientTestHarness { public class TestUpdateSchemaEvolution extends HoodieClientTestHarness {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
initPath(); initPath();
HoodieTestUtils.init(HoodieTestUtils.getDefaultHadoopConf(), basePath); HoodieTestUtils.init(HoodieTestUtils.getDefaultHadoopConf(), basePath);
initSparkContexts("TestUpdateMapFunction"); initSparkContexts("TestUpdateSchemaEvolution");
} }
@After @After
@@ -64,7 +62,7 @@ public class TestUpdateMapFunction extends HoodieClientTestHarness {
cleanupSparkContexts(); cleanupSparkContexts();
} }
@Test //@Test
public void testSchemaEvolutionOnUpdate() throws Exception { public void testSchemaEvolutionOnUpdate() throws Exception {
// Create a bunch of records with a old version of schema // Create a bunch of records with a old version of schema
final HoodieWriteConfig config = makeHoodieClientConfig("/exampleSchema.txt"); final HoodieWriteConfig config = makeHoodieClientConfig("/exampleSchema.txt");
@@ -91,8 +89,7 @@ public class TestUpdateMapFunction extends HoodieClientTestHarness {
HoodieCreateHandle createHandle = HoodieCreateHandle createHandle =
new HoodieCreateHandle(config, "100", table, rowChange1.getPartitionPath(), "f1-0", insertRecords.iterator()); new HoodieCreateHandle(config, "100", table, rowChange1.getPartitionPath(), "f1-0", insertRecords.iterator());
createHandle.write(); createHandle.write();
WriteStatus insertResult = createHandle.close(); return createHandle.close();
return insertResult;
}).collect(); }).collect();
final Path commitFile = new Path(config.getBasePath() + "/.hoodie/" + HoodieTimeline.makeCommitFileName("100")); final Path commitFile = new Path(config.getBasePath() + "/.hoodie/" + HoodieTimeline.makeCommitFileName("100"));
@@ -120,9 +117,9 @@ public class TestUpdateMapFunction extends HoodieClientTestHarness {
try { try {
HoodieMergeHandle mergeHandle = new HoodieMergeHandle(config2, "101", table2, updateRecords.iterator(), fileId); HoodieMergeHandle mergeHandle = new HoodieMergeHandle(config2, "101", table2, updateRecords.iterator(), fileId);
SerializableConfiguration conf = new SerializableConfiguration(new Configuration()); Configuration conf = new Configuration();
AvroReadSupport.setAvroReadSchema(conf.get(), mergeHandle.getWriterSchema()); AvroReadSupport.setAvroReadSchema(conf, mergeHandle.getWriterSchema());
List<GenericRecord> oldRecords = ParquetUtils.readAvroRecords(conf.get(), List<GenericRecord> oldRecords = ParquetUtils.readAvroRecords(conf,
new Path(config2.getBasePath() + "/" + insertResult.getStat().getPath())); new Path(config2.getBasePath() + "/" + insertResult.getStat().getPath()));
for (GenericRecord rec : oldRecords) { for (GenericRecord rec : oldRecords) {
mergeHandle.write(rec); mergeHandle.write(rec);
@@ -137,7 +134,6 @@ public class TestUpdateMapFunction extends HoodieClientTestHarness {
} }
private HoodieWriteConfig makeHoodieClientConfig(String schema) throws Exception { private HoodieWriteConfig makeHoodieClientConfig(String schema) throws Exception {
// Prepare the AvroParquetIO
String schemaStr = FileIOUtils.readAsUTFString(getClass().getResourceAsStream(schema)); String schemaStr = FileIOUtils.readAsUTFString(getClass().getResourceAsStream(schema));
return HoodieWriteConfig.newBuilder().withPath(basePath).withSchema(schemaStr).build(); return HoodieWriteConfig.newBuilder().withPath(basePath).withSchema(schemaStr).build();
} }

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.client;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.client.utils;
import org.apache.hudi.exception.HoodieIOException; import org.apache.hudi.exception.HoodieIOException;

View File

@@ -15,11 +15,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.common;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.client.TestHoodieClientBase;
import org.apache.hudi.common.HoodieCommonTestHarness;
import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.minicluster.HdfsTestService; import org.apache.hudi.common.minicluster.HdfsTestService;
import org.apache.hudi.common.model.HoodieTestUtils; import org.apache.hudi.common.model.HoodieTestUtils;
import org.apache.hudi.common.table.HoodieTableMetaClient; import org.apache.hudi.common.table.HoodieTableMetaClient;

View File

@@ -18,8 +18,8 @@
package org.apache.hudi.common; package org.apache.hudi.common;
import org.apache.hudi.HoodieReadClient; import org.apache.hudi.client.HoodieReadClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.HoodieAvroWriteSupport; import org.apache.hudi.avro.HoodieAvroWriteSupport;
import org.apache.hudi.common.bloom.filter.BloomFilter; import org.apache.hudi.common.bloom.filter.BloomFilter;
import org.apache.hudi.common.bloom.filter.BloomFilterFactory; import org.apache.hudi.common.bloom.filter.BloomFilterFactory;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.common; package org.apache.hudi.common;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.MercifulJsonConverter; import org.apache.hudi.avro.MercifulJsonConverter;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordPayload; import org.apache.hudi.common.model.HoodieRecordPayload;

View File

@@ -16,16 +16,16 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.execution;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.table.timeline.HoodieActiveTimeline; import org.apache.hudi.common.table.timeline.HoodieActiveTimeline;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
import org.apache.hudi.common.util.queue.BoundedInMemoryQueueConsumer; import org.apache.hudi.common.util.queue.BoundedInMemoryQueueConsumer;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.func.CopyOnWriteLazyInsertIterable.HoodieInsertValueGenResult; import org.apache.hudi.execution.CopyOnWriteLazyInsertIterable.HoodieInsertValueGenResult;
import org.apache.avro.generic.IndexedRecord; import org.apache.avro.generic.IndexedRecord;
import org.junit.After; import org.junit.After;
@@ -37,7 +37,7 @@ import java.util.List;
import scala.Tuple2; import scala.Tuple2;
import static org.apache.hudi.func.CopyOnWriteLazyInsertIterable.getTransformFunction; import static org.apache.hudi.execution.CopyOnWriteLazyInsertIterable.getTransformFunction;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;

View File

@@ -16,9 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.func; package org.apache.hudi.execution;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.table.timeline.HoodieActiveTimeline; import org.apache.hudi.common.table.timeline.HoodieActiveTimeline;
@@ -31,7 +31,7 @@ import org.apache.hudi.common.util.queue.BoundedInMemoryQueueProducer;
import org.apache.hudi.common.util.queue.FunctionBasedQueueProducer; import org.apache.hudi.common.util.queue.FunctionBasedQueueProducer;
import org.apache.hudi.common.util.queue.IteratorBasedQueueProducer; import org.apache.hudi.common.util.queue.IteratorBasedQueueProducer;
import org.apache.hudi.exception.HoodieException; import org.apache.hudi.exception.HoodieException;
import org.apache.hudi.func.CopyOnWriteLazyInsertIterable.HoodieInsertValueGenResult; import org.apache.hudi.execution.CopyOnWriteLazyInsertIterable.HoodieInsertValueGenResult;
import org.apache.avro.generic.IndexedRecord; import org.apache.avro.generic.IndexedRecord;
import org.junit.After; import org.junit.After;
@@ -53,7 +53,7 @@ import java.util.stream.IntStream;
import scala.Tuple2; import scala.Tuple2;
import static org.apache.hudi.func.CopyOnWriteLazyInsertIterable.getTransformFunction; import static org.apache.hudi.execution.CopyOnWriteLazyInsertIterable.getTransformFunction;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.index; package org.apache.hudi.index;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
import org.apache.hudi.config.HoodieCompactionConfig; import org.apache.hudi.config.HoodieCompactionConfig;

View File

@@ -18,9 +18,9 @@
package org.apache.hudi.index; package org.apache.hudi.index;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieWriteStat; import org.apache.hudi.common.model.HoodieWriteStat;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.index; package org.apache.hudi.index;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.config.HoodieHBaseIndexConfig; import org.apache.hudi.config.HoodieHBaseIndexConfig;
import org.apache.hudi.config.HoodieIndexConfig; import org.apache.hudi.config.HoodieIndexConfig;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.index.bloom; package org.apache.hudi.index.bloom;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.TestRawTripPayload; import org.apache.hudi.common.TestRawTripPayload;
import org.apache.hudi.common.bloom.filter.BloomFilter; import org.apache.hudi.common.bloom.filter.BloomFilter;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.index.bloom; package org.apache.hudi.index.bloom;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.TestRawTripPayload; import org.apache.hudi.common.TestRawTripPayload;
import org.apache.hudi.common.model.EmptyHoodieRecordPayload; import org.apache.hudi.common.model.EmptyHoodieRecordPayload;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.io; package org.apache.hudi.io;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.HoodieTestUtils; import org.apache.hudi.common.model.HoodieTestUtils;
import org.apache.hudi.common.table.HoodieTableMetaClient; import org.apache.hudi.common.table.HoodieTableMetaClient;
@@ -32,6 +32,7 @@ import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hudi.table.HoodieCommitArchiveLog;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;

View File

@@ -18,9 +18,9 @@
package org.apache.hudi.io; package org.apache.hudi.io;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.io.storage; package org.apache.hudi.io.storage;
import org.apache.hudi.TestHoodieClientBase; import org.apache.hudi.client.TestHoodieClientBase;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.table.HoodieTable; import org.apache.hudi.table.HoodieTable;

View File

@@ -1,57 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hudi.io.strategy;
import org.apache.hudi.common.model.HoodieBaseFile;
import java.util.UUID;
public class TestHoodieBaseFile extends HoodieBaseFile {
private final long size;
public TestHoodieBaseFile(long size) {
super("/tmp/XYXYXYXYXYYX_11_20180918020003.parquet");
this.size = size;
}
public static HoodieBaseFile newDataFile(long size) {
return new TestHoodieBaseFile(size);
}
@Override
public String getPath() {
return "/tmp/test";
}
@Override
public String getFileId() {
return UUID.randomUUID().toString();
}
@Override
public String getCommitTime() {
return "100";
}
@Override
public long getFileSize() {
return size;
}
}

View File

@@ -1,47 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hudi.io.strategy;
import org.apache.hudi.common.model.HoodieLogFile;
import org.apache.hadoop.fs.Path;
public class TestHoodieLogFile extends HoodieLogFile {
private final long size;
public TestHoodieLogFile(long size) {
super("/tmp/.ce481ee7-9e53-4a2e-9992-f9e295fa79c0_20180919184844.log.1");
this.size = size;
}
public static HoodieLogFile newLogFile(long size) {
return new TestHoodieLogFile(size);
}
@Override
public Path getPath() {
return new Path("/tmp/test-log");
}
@Override
public long getFileSize() {
return size;
}
}

View File

@@ -16,11 +16,15 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.table;
import org.apache.hudi.client.TestHoodieClientBase;
import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.model.HoodieCleanMetadata; import org.apache.hudi.avro.model.HoodieCleanMetadata;
import org.apache.hudi.avro.model.HoodieCleanPartitionMetadata; import org.apache.hudi.avro.model.HoodieCleanPartitionMetadata;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
import org.apache.hudi.client.HoodieCleanClient;
import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.common.HoodieCleanStat; import org.apache.hudi.common.HoodieCleanStat;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.FileSlice; import org.apache.hudi.common.model.FileSlice;
@@ -50,7 +54,6 @@ import org.apache.hudi.common.versioning.clean.CleanMetadataMigrator;
import org.apache.hudi.config.HoodieCompactionConfig; import org.apache.hudi.config.HoodieCompactionConfig;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.index.HoodieIndex; import org.apache.hudi.index.HoodieIndex;
import org.apache.hudi.table.HoodieTable;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
@@ -125,7 +128,7 @@ public class TestCleaner extends TestHoodieClientBase {
HoodieTimeline timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline(); HoodieTimeline timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
assertEquals("Expecting a single commit.", 1, timeline.findInstantsAfter("000", Integer.MAX_VALUE).countInstants()); assertEquals("Expecting a single commit.", 1, timeline.findInstantsAfter("000", Integer.MAX_VALUE).countInstants());
// Should have 100 records in table (check using Index), all in locations marked at commit // Should have 100 records in table (check using Index), all in locations marked at commit
HoodieTable table = HoodieTable.getHoodieTable(metaClient, client.config, jsc); HoodieTable table = HoodieTable.getHoodieTable(metaClient, client.getConfig(), jsc);
assertFalse(table.getCompletedCommitsTimeline().empty()); assertFalse(table.getCompletedCommitsTimeline().empty());
String commitTime = table.getCompletedCommitsTimeline().getInstants().findFirst().get().getTimestamp(); String commitTime = table.getCompletedCommitsTimeline().getInstants().findFirst().get().getTimestamp();

View File

@@ -16,8 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.table;
import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.util.ConsistencyGuard; import org.apache.hudi.common.util.ConsistencyGuard;
import org.apache.hudi.common.util.ConsistencyGuardConfig; import org.apache.hudi.common.util.ConsistencyGuardConfig;

View File

@@ -18,8 +18,8 @@
package org.apache.hudi.table; package org.apache.hudi.table;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.TestRawTripPayload; import org.apache.hudi.common.TestRawTripPayload;

View File

@@ -18,10 +18,10 @@
package org.apache.hudi.table; package org.apache.hudi.table;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.HoodieReadClient; import org.apache.hudi.client.HoodieReadClient;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;
import org.apache.hudi.common.HoodieMergeOnReadTestUtils; import org.apache.hudi.common.HoodieMergeOnReadTestUtils;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;

View File

@@ -16,8 +16,12 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi; package org.apache.hudi.table.compact;
import org.apache.hudi.client.HoodieReadClient;
import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.client.TestHoodieClientBase;
import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.avro.model.HoodieCompactionPlan; import org.apache.hudi.avro.model.HoodieCompactionPlan;
import org.apache.hudi.common.HoodieClientTestUtils; import org.apache.hudi.common.HoodieClientTestUtils;

View File

@@ -16,11 +16,11 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io; package org.apache.hudi.table.compact;
import org.apache.hudi.HoodieClientTestHarness; import org.apache.hudi.common.HoodieClientTestHarness;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.model.FileSlice; import org.apache.hudi.common.model.FileSlice;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -16,8 +16,9 @@
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hudi.io.strategy; package org.apache.hudi.table.compact.strategy;
import org.apache.hadoop.fs.Path;
import org.apache.hudi.avro.model.HoodieCompactionOperation; import org.apache.hudi.avro.model.HoodieCompactionOperation;
import org.apache.hudi.common.model.HoodieBaseFile; import org.apache.hudi.common.model.HoodieBaseFile;
import org.apache.hudi.common.model.HoodieLogFile; import org.apache.hudi.common.model.HoodieLogFile;
@@ -25,12 +26,6 @@ import org.apache.hudi.common.util.Option;
import org.apache.hudi.common.util.collection.Pair; import org.apache.hudi.common.util.collection.Pair;
import org.apache.hudi.config.HoodieCompactionConfig; import org.apache.hudi.config.HoodieCompactionConfig;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;
import org.apache.hudi.io.compact.strategy.BoundedIOCompactionStrategy;
import org.apache.hudi.io.compact.strategy.BoundedPartitionAwareCompactionStrategy;
import org.apache.hudi.io.compact.strategy.DayBasedCompactionStrategy;
import org.apache.hudi.io.compact.strategy.LogFileSizeBasedCompactionStrategy;
import org.apache.hudi.io.compact.strategy.UnBoundedCompactionStrategy;
import org.apache.hudi.io.compact.strategy.UnBoundedPartitionAwareCompactionStrategy;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import org.junit.Assert; import org.junit.Assert;
@@ -45,6 +40,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -250,4 +246,62 @@ public class TestHoodieCompactionStrategy {
}); });
return operations; return operations;
} }
public static class TestHoodieBaseFile extends HoodieBaseFile {
private final long size;
public TestHoodieBaseFile(long size) {
super("/tmp/XYXYXYXYXYYX_11_20180918020003.parquet");
this.size = size;
}
public static HoodieBaseFile newDataFile(long size) {
return new TestHoodieBaseFile(size);
}
@Override
public String getPath() {
return "/tmp/test";
}
@Override
public String getFileId() {
return UUID.randomUUID().toString();
}
@Override
public String getCommitTime() {
return "100";
}
@Override
public long getFileSize() {
return size;
}
}
public static class TestHoodieLogFile extends HoodieLogFile {
private final long size;
public TestHoodieLogFile(long size) {
super("/tmp/.ce481ee7-9e53-4a2e-9992-f9e295fa79c0_20180919184844.log.1");
this.size = size;
}
public static HoodieLogFile newLogFile(long size) {
return new TestHoodieLogFile(size);
}
@Override
public Path getPath() {
return new Path("/tmp/test-log");
}
@Override
public long getFileSize() {
return size;
}
}
} }

View File

@@ -27,11 +27,13 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DFSConfigKeys; import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.MiniDFSCluster; import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hudi.exception.HoodieIOException;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.ServerSocket;
/** /**
* An HDFS minicluster service implementation. * An HDFS minicluster service implementation.
@@ -45,12 +47,6 @@ public class HdfsTestService {
*/ */
private Configuration hadoopConf; private Configuration hadoopConf;
private String workDir; private String workDir;
private String bindIP = "127.0.0.1";
private int namenodeRpcPort = 8020;
private int namenodeHttpPort = 50070;
private int datanodePort = 50010;
private int datanodeIpcPort = 50020;
private int datanodeHttpPort = 50075;
/** /**
* Embedded HDFS cluster. * Embedded HDFS cluster.
@@ -65,6 +61,14 @@ public class HdfsTestService {
return hadoopConf; return hadoopConf;
} }
private static int nextFreePort() {
try (ServerSocket socket = new ServerSocket(0)) {
return socket.getLocalPort();
} catch (IOException e) {
throw new HoodieIOException("Unable to find next free port", e);
}
}
public MiniDFSCluster start(boolean format) throws IOException { public MiniDFSCluster start(boolean format) throws IOException {
Preconditions.checkState(workDir != null, "The work dir must be set before starting cluster."); Preconditions.checkState(workDir != null, "The work dir must be set before starting cluster.");
hadoopConf = HoodieTestUtils.getDefaultHadoopConf(); hadoopConf = HoodieTestUtils.getDefaultHadoopConf();
@@ -77,8 +81,14 @@ public class HdfsTestService {
FileIOUtils.deleteDirectory(file); FileIOUtils.deleteDirectory(file);
} }
int namenodeRpcPort = nextFreePort();
int datanodePort = nextFreePort();
int datanodeIpcPort = nextFreePort();
int datanodeHttpPort = nextFreePort();
// Configure and start the HDFS cluster // Configure and start the HDFS cluster
// boolean format = shouldFormatDFSCluster(localDFSLocation, clean); // boolean format = shouldFormatDFSCluster(localDFSLocation, clean);
String bindIP = "127.0.0.1";
configureDFSCluster(hadoopConf, localDFSLocation, bindIP, namenodeRpcPort, configureDFSCluster(hadoopConf, localDFSLocation, bindIP, namenodeRpcPort,
datanodePort, datanodeIpcPort, datanodeHttpPort); datanodePort, datanodeIpcPort, datanodeHttpPort);
miniDfsCluster = new MiniDFSCluster.Builder(hadoopConf).numDataNodes(1).format(format).checkDataNodeAddrConfig(true) miniDfsCluster = new MiniDFSCluster.Builder(hadoopConf).numDataNodes(1).format(format).checkDataNodeAddrConfig(true)

View File

@@ -18,6 +18,9 @@
package org.apache.hudi; package org.apache.hudi;
import org.apache.hudi.client.HoodieReadClient;
import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.client.embedded.EmbeddedTimelineService; import org.apache.hudi.client.embedded.EmbeddedTimelineService;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -24,6 +24,7 @@ import org.apache.avro.generic.GenericRecord
import org.apache.hadoop.fs.{FileSystem, Path} import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.hive.conf.HiveConf import org.apache.hadoop.hive.conf.HiveConf
import org.apache.hudi.DataSourceWriteOptions._ import org.apache.hudi.DataSourceWriteOptions._
import org.apache.hudi.client.{HoodieWriteClient, WriteStatus}
import org.apache.hudi.common.model.HoodieRecordPayload import org.apache.hudi.common.model.HoodieRecordPayload
import org.apache.hudi.common.table.HoodieTableMetaClient import org.apache.hudi.common.table.HoodieTableMetaClient
import org.apache.hudi.common.table.timeline.HoodieActiveTimeline import org.apache.hudi.common.table.timeline.HoodieActiveTimeline

View File

@@ -18,8 +18,8 @@
package org.apache.hudi.utilities; package org.apache.hudi.utilities;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.HoodieJsonPayload; import org.apache.hudi.common.HoodieJsonPayload;
import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieKey;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.utilities; package org.apache.hudi.utilities;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.common.util.FSUtils; import org.apache.hudi.common.util.FSUtils;
import org.apache.hudi.common.util.TypedProperties; import org.apache.hudi.common.util.TypedProperties;
import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.config.HoodieWriteConfig;

View File

@@ -18,9 +18,9 @@
package org.apache.hudi.utilities; package org.apache.hudi.utilities;
import org.apache.hudi.CompactionAdminClient; import org.apache.hudi.client.CompactionAdminClient;
import org.apache.hudi.CompactionAdminClient.RenameOpResult; import org.apache.hudi.client.CompactionAdminClient.RenameOpResult;
import org.apache.hudi.CompactionAdminClient.ValidationOpResult; import org.apache.hudi.client.CompactionAdminClient.ValidationOpResult;
import org.apache.hudi.common.model.HoodieFileGroupId; import org.apache.hudi.common.model.HoodieFileGroupId;
import org.apache.hudi.common.table.HoodieTableMetaClient; import org.apache.hudi.common.table.HoodieTableMetaClient;
import org.apache.hudi.common.util.FSUtils; import org.apache.hudi.common.util.FSUtils;

View File

@@ -18,8 +18,8 @@
package org.apache.hudi.utilities; package org.apache.hudi.utilities;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.util.FSUtils; import org.apache.hudi.common.util.FSUtils;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
import org.apache.hudi.common.util.TypedProperties; import org.apache.hudi.common.util.TypedProperties;

View File

@@ -20,8 +20,8 @@ package org.apache.hudi.utilities;
import org.apache.avro.Schema; import org.apache.avro.Schema;
import org.apache.hudi.AvroConversionUtils; import org.apache.hudi.AvroConversionUtils;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.util.DFSPropertiesConfiguration; import org.apache.hudi.common.util.DFSPropertiesConfiguration;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
import org.apache.hudi.common.util.ReflectionUtils; import org.apache.hudi.common.util.ReflectionUtils;

View File

@@ -18,8 +18,8 @@
package org.apache.hudi.utilities.deltastreamer; package org.apache.hudi.utilities.deltastreamer;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.table.timeline.HoodieInstant; import org.apache.hudi.common.table.timeline.HoodieInstant;
import org.apache.hudi.common.util.Option; import org.apache.hudi.common.util.Option;
import org.apache.hudi.exception.HoodieException; import org.apache.hudi.exception.HoodieException;

View File

@@ -20,9 +20,9 @@ package org.apache.hudi.utilities.deltastreamer;
import org.apache.hudi.AvroConversionUtils; import org.apache.hudi.AvroConversionUtils;
import org.apache.hudi.DataSourceUtils; import org.apache.hudi.DataSourceUtils;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.keygen.KeyGenerator; import org.apache.hudi.keygen.KeyGenerator;
import org.apache.hudi.WriteStatus; import org.apache.hudi.client.WriteStatus;
import org.apache.hudi.common.model.HoodieCommitMetadata; import org.apache.hudi.common.model.HoodieCommitMetadata;
import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.model.HoodieRecord;
import org.apache.hudi.common.model.HoodieRecordPayload; import org.apache.hudi.common.model.HoodieRecordPayload;

View File

@@ -18,7 +18,7 @@
package org.apache.hudi.utilities.deltastreamer; package org.apache.hudi.utilities.deltastreamer;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.common.model.HoodieTableType; import org.apache.hudi.common.model.HoodieTableType;
import org.apache.hudi.common.model.OverwriteWithLatestAvroPayload; import org.apache.hudi.common.model.OverwriteWithLatestAvroPayload;
import org.apache.hudi.common.table.HoodieTableMetaClient; import org.apache.hudi.common.table.HoodieTableMetaClient;

View File

@@ -18,8 +18,8 @@
package org.apache.hudi.utilities; package org.apache.hudi.utilities;
import org.apache.hudi.HoodieReadClient; import org.apache.hudi.client.HoodieReadClient;
import org.apache.hudi.HoodieWriteClient; import org.apache.hudi.client.HoodieWriteClient;
import org.apache.hudi.common.HoodieTestDataGenerator; import org.apache.hudi.common.HoodieTestDataGenerator;
import org.apache.hudi.common.minicluster.HdfsTestService; import org.apache.hudi.common.minicluster.HdfsTestService;
import org.apache.hudi.common.model.HoodieTestUtils; import org.apache.hudi.common.model.HoodieTestUtils;