This is an automated email from the ASF dual-hosted git repository.
danny0405 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git
The following commit(s) were added to refs/heads/master by this push:
new eeddac702ed [HUDI-1623][Tests] Fix test TestWaitBasedTimeGenerator
(#9972)
eeddac702ed is described below
commit eeddac702ed3a97d6b08a699c506a1898de4af16
Author: Rex(Hui) An <[email protected]>
AuthorDate: Fri Nov 3 08:18:44 2023 +0800
[HUDI-1623][Tests] Fix test TestWaitBasedTimeGenerator (#9972)
---
.../java/org/apache/hudi/config/DynamoDbBasedLockConfig.java | 2 +-
.../main/java/org/apache/hudi/config/HoodieLockConfig.java | 3 ++-
.../hudi/client/transaction/lock/InProcessLockProvider.java | 2 +-
.../org/apache/hudi/common/config/LockConfiguration.java | 4 +---
.../org/apache/hudi/common/table/timeline/TimeGenerator.java | 8 ++++----
.../apache/hudi/common/table/timeline/TimeGeneratorBase.java | 2 +-
.../hudi/common/table/timeline/WaitBasedTimeGenerator.java | 12 ++++++------
.../common/table/timeline/TestWaitBasedTimeGenerator.java | 6 ++++--
8 files changed, 20 insertions(+), 19 deletions(-)
diff --git
a/hudi-aws/src/main/java/org/apache/hudi/config/DynamoDbBasedLockConfig.java
b/hudi-aws/src/main/java/org/apache/hudi/config/DynamoDbBasedLockConfig.java
index 5639db02582..0e884a6797f 100644
--- a/hudi-aws/src/main/java/org/apache/hudi/config/DynamoDbBasedLockConfig.java
+++ b/hudi-aws/src/main/java/org/apache/hudi/config/DynamoDbBasedLockConfig.java
@@ -127,7 +127,7 @@ public class DynamoDbBasedLockConfig extends HoodieConfig {
public static final ConfigProperty<Integer>
LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP_KEY = ConfigProperty
.key(LockConfiguration.LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP_KEY)
- .defaultValue(LockConfiguration.DEFAULT_ACQUIRE_LOCK_WAIT_TIMEOUT_MS)
+ .defaultValue(LockConfiguration.DEFAULT_LOCK_ACQUIRE_WAIT_TIMEOUT_MS)
.markAdvanced()
.sinceVersion("0.10.0")
.withDocumentation("Lock Acquire Wait Timeout in milliseconds");
diff --git
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieLockConfig.java
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieLockConfig.java
index b24aecf46c1..fa38da8f8ab 100644
---
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieLockConfig.java
+++
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieLockConfig.java
@@ -36,6 +36,7 @@ import java.util.Properties;
import static
org.apache.hudi.common.config.LockConfiguration.DEFAULT_LOCK_ACQUIRE_NUM_RETRIES;
import static
org.apache.hudi.common.config.LockConfiguration.DEFAULT_LOCK_ACQUIRE_RETRY_WAIT_TIME_IN_MILLIS;
+import static
org.apache.hudi.common.config.LockConfiguration.DEFAULT_LOCK_ACQUIRE_WAIT_TIMEOUT_MS;
import static
org.apache.hudi.common.config.LockConfiguration.DEFAULT_ZK_CONNECTION_TIMEOUT_MS;
import static
org.apache.hudi.common.config.LockConfiguration.DEFAULT_ZK_SESSION_TIMEOUT_MS;
import static
org.apache.hudi.common.config.LockConfiguration.FILESYSTEM_LOCK_EXPIRE_PROP_KEY;
@@ -106,7 +107,7 @@ public class HoodieLockConfig extends HoodieConfig {
public static final ConfigProperty<Integer> LOCK_ACQUIRE_WAIT_TIMEOUT_MS =
ConfigProperty
.key(LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP_KEY)
- .defaultValue(60 * 1000)
+ .defaultValue(DEFAULT_LOCK_ACQUIRE_WAIT_TIMEOUT_MS)
.markAdvanced()
.sinceVersion("0.8.0")
.withDocumentation("Timeout in ms, to wait on an individual lock
acquire() call, at the lock provider.");
diff --git
a/hudi-common/src/main/java/org/apache/hudi/client/transaction/lock/InProcessLockProvider.java
b/hudi-common/src/main/java/org/apache/hudi/client/transaction/lock/InProcessLockProvider.java
index c3437f91c8c..c2edb1864b0 100644
---
a/hudi-common/src/main/java/org/apache/hudi/client/transaction/lock/InProcessLockProvider.java
+++
b/hudi-common/src/main/java/org/apache/hudi/client/transaction/lock/InProcessLockProvider.java
@@ -61,7 +61,7 @@ public class InProcessLockProvider implements
LockProvider<ReentrantReadWriteLoc
ValidationUtils.checkArgument(basePath != null);
lock = LOCK_INSTANCE_PER_BASEPATH.computeIfAbsent(basePath, (ignore) ->
new ReentrantReadWriteLock());
maxWaitTimeMillis =
typedProperties.getLong(LockConfiguration.LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP_KEY,
- LockConfiguration.DEFAULT_ACQUIRE_LOCK_WAIT_TIMEOUT_MS);
+ LockConfiguration.DEFAULT_LOCK_ACQUIRE_WAIT_TIMEOUT_MS);
}
@Override
diff --git
a/hudi-common/src/main/java/org/apache/hudi/common/config/LockConfiguration.java
b/hudi-common/src/main/java/org/apache/hudi/common/config/LockConfiguration.java
index 9e652c64efe..1171dcf3fce 100644
---
a/hudi-common/src/main/java/org/apache/hudi/common/config/LockConfiguration.java
+++
b/hudi-common/src/main/java/org/apache/hudi/common/config/LockConfiguration.java
@@ -43,7 +43,7 @@ public class LockConfiguration implements Serializable {
public static final String LOCK_ACQUIRE_CLIENT_NUM_RETRIES_PROP_KEY =
LOCK_PREFIX + "client.num_retries";
public static final String LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP_KEY =
LOCK_PREFIX + "wait_time_ms";
- public static final String DEFAULT_LOCK_ACQUIRE_WAIT_TIMEOUT_MS =
String.valueOf(60 * 1000);
+ public static final int DEFAULT_LOCK_ACQUIRE_WAIT_TIMEOUT_MS = 60 * 1000;
// configs for file system based locks. NOTE: This only works for DFS with
atomic create/delete operation
public static final String FILESYSTEM_BASED_LOCK_PROPERTY_PREFIX =
LOCK_PREFIX + "filesystem.";
@@ -100,8 +100,6 @@ public class LockConfiguration implements Serializable {
/** @deprecated Use {@link #LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP_KEY} */
@Deprecated
public static final String LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP =
LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP_KEY;
- @Deprecated
- public static final int DEFAULT_ACQUIRE_LOCK_WAIT_TIMEOUT_MS = 60 * 1000;
/** @deprecated Use {@link #HIVE_DATABASE_NAME_PROP_KEY} */
@Deprecated
public static final String HIVE_DATABASE_NAME_PROP =
HIVE_DATABASE_NAME_PROP_KEY;
diff --git
a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/TimeGenerator.java
b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/TimeGenerator.java
index 7d3b8d71341..5a124c453dc 100644
---
a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/TimeGenerator.java
+++
b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/TimeGenerator.java
@@ -35,17 +35,17 @@ public interface TimeGenerator {
* a new generated timestamp T is guaranteed to be greater than
* any timestamp generated by the preceding calls.
*
- * @param locked Whether the caller holds the lock itself.
+ * @param skipLocking If this is triggered by another parent transaction,
locking can be skipped.
* @return Current true time as milliseconds.
*/
- long currentTimeMillis(boolean locked);
+ long currentTimeMillis(boolean skipLocking);
/**
* Passes an auto generated timestamp to the given function {@code func}.
The implementations
* need to ensure timestamp generation and executing func are atomic.
*
- * @param locked Whether the caller holds the lock itself.
+ * @param skipLocking If this is triggered by another parent transaction,
locking can be skipped.
* @param func A consumer that takes a monotonically increasing timestamp.
*/
- void consumeTimestamp(boolean locked, Consumer<Long> func);
+ void consumeTimestamp(boolean skipLocking, Consumer<Long> func);
}
diff --git
a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/TimeGeneratorBase.java
b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/TimeGeneratorBase.java
index 8b37b21c59b..4acb8d2af54 100644
---
a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/TimeGeneratorBase.java
+++
b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/TimeGeneratorBase.java
@@ -82,7 +82,7 @@ public abstract class TimeGeneratorBase implements
TimeGenerator, Serializable {
maxRetries =
lockConfiguration.getConfig().getInteger(LOCK_ACQUIRE_CLIENT_NUM_RETRIES_PROP_KEY,
Integer.parseInt(DEFAULT_LOCK_ACQUIRE_NUM_RETRIES));
lockAcquireWaitTimeInMs =
lockConfiguration.getConfig().getInteger(LOCK_ACQUIRE_WAIT_TIMEOUT_MS_PROP_KEY,
- Integer.parseInt(DEFAULT_LOCK_ACQUIRE_WAIT_TIMEOUT_MS));
+ DEFAULT_LOCK_ACQUIRE_WAIT_TIMEOUT_MS);
maxWaitTimeInMs =
lockConfiguration.getConfig().getLong(LOCK_ACQUIRE_CLIENT_RETRY_WAIT_TIME_IN_MILLIS_PROP_KEY,
Long.parseLong(DEFAULT_LOCK_ACQUIRE_CLIENT_RETRY_WAIT_TIME_IN_MILLIS));
lockRetryHelper = new RetryHelper<>(maxWaitTimeInMs, maxRetries,
maxWaitTimeInMs,
diff --git
a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/WaitBasedTimeGenerator.java
b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/WaitBasedTimeGenerator.java
index 8728629e983..2cf389ab991 100644
---
a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/WaitBasedTimeGenerator.java
+++
b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/WaitBasedTimeGenerator.java
@@ -36,9 +36,9 @@ public class WaitBasedTimeGenerator extends TimeGeneratorBase
{
}
@Override
- public long currentTimeMillis(boolean locked) {
+ public long currentTimeMillis(boolean skipLocking) {
try {
- if (!locked) {
+ if (!skipLocking) {
lock();
}
long ts = System.currentTimeMillis();
@@ -47,22 +47,22 @@ public class WaitBasedTimeGenerator extends
TimeGeneratorBase {
} catch (InterruptedException e) {
throw new HoodieException("Interrupted when get the current time", e);
} finally {
- if (!locked) {
+ if (!skipLocking) {
unlock();
}
}
}
@Override
- public void consumeTimestamp(boolean locked, Consumer<Long> func) {
+ public void consumeTimestamp(boolean skipLocking, Consumer<Long> func) {
try {
- if (!locked) {
+ if (!skipLocking) {
lock();
}
long currentTimeMillis = currentTimeMillis(true);
func.accept(currentTimeMillis);
} finally {
- if (!locked) {
+ if (!skipLocking) {
unlock();
}
}
diff --git
a/hudi-common/src/test/java/org/apache/hudi/common/table/timeline/TestWaitBasedTimeGenerator.java
b/hudi-common/src/test/java/org/apache/hudi/common/table/timeline/TestWaitBasedTimeGenerator.java
index a31b8e50dd8..ba6c88fdae1 100644
---
a/hudi-common/src/test/java/org/apache/hudi/common/table/timeline/TestWaitBasedTimeGenerator.java
+++
b/hudi-common/src/test/java/org/apache/hudi/common/table/timeline/TestWaitBasedTimeGenerator.java
@@ -64,7 +64,9 @@ public class TestWaitBasedTimeGenerator {
}
}
boolean locked = super.tryLock(time, unit);
- SIGNAL.countDown();
+ if (locked) {
+ SIGNAL.countDown();
+ }
return locked;
}
}
@@ -79,7 +81,7 @@ public class TestWaitBasedTimeGenerator {
@BeforeEach
public void initialize() {
timeGeneratorConfig = HoodieTimeGeneratorConfig.newBuilder()
- .withPath("")
+ .withPath("test_wait_based")
.withMaxExpectedClockSkewMs(25L)
.withTimeGeneratorType(TimeGeneratorType.WAIT_TO_ADJUST_SKEW)
.build();