Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
doujutun3207
flink
提交
2c11291f
F
flink
项目概览
doujutun3207
/
flink
与 Fork 源项目一致
从无法访问的项目Fork
通知
24
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
flink
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2c11291f
编写于
12月 10, 2019
作者:
Y
Yangze Guo
提交者:
azagrebin
12月 11, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[FLINK-14951][tests] Harden the thread safety of State TTL backend tests
上级
5c89d128
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
30 addition
and
27 deletion
+30
-27
flink-end-to-end-tests/flink-stream-state-ttl-test/src/main/java/org/apache/flink/streaming/tests/MonotonicTTLTimeProvider.java
...pache/flink/streaming/tests/MonotonicTTLTimeProvider.java
+23
-13
flink-end-to-end-tests/flink-stream-state-ttl-test/src/main/java/org/apache/flink/streaming/tests/TtlVerifyUpdateFunction.java
...apache/flink/streaming/tests/TtlVerifyUpdateFunction.java
+7
-14
未找到文件。
flink-end-to-end-tests/flink-stream-state-ttl-test/src/main/java/org/apache/flink/streaming/tests/MonotonicTTLTimeProvider.java
浏览文件 @
2c11291f
...
...
@@ -19,12 +19,15 @@
package
org.apache.flink.streaming.tests
;
import
org.apache.flink.runtime.state.ttl.TtlTimeProvider
;
import
org.apache.flink.util.function.FunctionWithException
;
import
javax.annotation.concurrent.GuardedBy
;
import
javax.annotation.concurrent.NotThreadSafe
;
import
java.io.Serializable
;
import
static
org
.
apache
.
flink
.
util
.
Preconditions
.
checkState
;
/**
* A stub implementation of a {@link TtlTimeProvider} which guarantees that
* processing time increases monotonically.
...
...
@@ -54,14 +57,24 @@ final class MonotonicTTLTimeProvider implements TtlTimeProvider, Serializable {
private
static
final
Object
lock
=
new
Object
();
@GuardedBy
(
"lock"
)
static
long
freeze
()
{
static
<
T
,
E
extends
Throwable
>
T
doWithFrozenTime
(
FunctionWithException
<
Long
,
T
,
E
>
action
)
throws
E
{
synchronized
(
lock
)
{
if
(!
timeIsFrozen
||
lastReturnedProcessingTime
==
Long
.
MIN_VALUE
)
{
timeIsFrozen
=
true
;
return
getCurrentTimestamp
();
}
else
{
return
lastReturnedProcessingTime
;
}
final
long
timestampBeforeUpdate
=
freeze
();
T
result
=
action
.
apply
(
timestampBeforeUpdate
);
final
long
timestampAfterUpdate
=
unfreezeTime
();
checkState
(
timestampAfterUpdate
==
timestampBeforeUpdate
,
"Timestamps before and after the update do not match."
);
return
result
;
}
}
private
static
long
freeze
()
{
if
(!
timeIsFrozen
||
lastReturnedProcessingTime
==
Long
.
MIN_VALUE
)
{
timeIsFrozen
=
true
;
return
getCurrentTimestamp
();
}
else
{
return
lastReturnedProcessingTime
;
}
}
...
...
@@ -87,11 +100,8 @@ final class MonotonicTTLTimeProvider implements TtlTimeProvider, Serializable {
return
lastReturnedProcessingTime
;
}
@GuardedBy
(
"lock"
)
static
long
unfreezeTime
()
{
synchronized
(
lock
)
{
timeIsFrozen
=
false
;
return
lastReturnedProcessingTime
;
}
private
static
long
unfreezeTime
()
{
timeIsFrozen
=
false
;
return
lastReturnedProcessingTime
;
}
}
flink-end-to-end-tests/flink-stream-state-ttl-test/src/main/java/org/apache/flink/streaming/tests/TtlVerifyUpdateFunction.java
浏览文件 @
2c11291f
...
...
@@ -47,7 +47,6 @@ import java.util.stream.Collectors;
import
java.util.stream.StreamSupport
;
import
static
org
.
apache
.
flink
.
util
.
Preconditions
.
checkNotNull
;
import
static
org
.
apache
.
flink
.
util
.
Preconditions
.
checkState
;
/**
* Update state with TTL for each verifier.
...
...
@@ -114,19 +113,13 @@ class TtlVerifyUpdateFunction extends RichFlatMapFunction<TtlStateUpdate, String
TtlStateVerifier
<?,
?>
verifier
,
Object
update
)
throws
Exception
{
final
long
timestampBeforeUpdate
=
MonotonicTTLTimeProvider
.
freeze
();
State
state
=
states
.
get
(
verifier
.
getId
());
Object
valueBeforeUpdate
=
verifier
.
get
(
state
);
verifier
.
update
(
state
,
update
);
Object
updatedValue
=
verifier
.
get
(
state
);
final
long
timestampAfterUpdate
=
MonotonicTTLTimeProvider
.
unfreezeTime
();
checkState
(
timestampAfterUpdate
==
timestampBeforeUpdate
,
"Timestamps before and after the update do not match."
);
return
new
TtlUpdateContext
<>(
valueBeforeUpdate
,
update
,
updatedValue
,
timestampAfterUpdate
);
return
MonotonicTTLTimeProvider
.
doWithFrozenTime
(
frozenTimestamp
->
{
State
state
=
states
.
get
(
verifier
.
getId
());
Object
valueBeforeUpdate
=
verifier
.
get
(
state
);
verifier
.
update
(
state
,
update
);
Object
updatedValue
=
verifier
.
get
(
state
);
return
new
TtlUpdateContext
<>(
valueBeforeUpdate
,
update
,
updatedValue
,
frozenTimestamp
);
});
}
@Override
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录