Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
pulsar
提交
cc746322
pulsar
项目概览
apache
/
pulsar
通知
129
Star
40
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Wiki
1
Wiki
分析
仓库
DevOps
项目成员
Pages
pulsar
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Pages
分析
分析
仓库分析
DevOps
Wiki
1
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
提交
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
cc746322
编写于
7月 24, 2019
作者:
X
Xiaobing Fang
提交者:
Jia Zhai
8月 28, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix:PulsarKafkaProducer is not thread safe (#4745)
fix #4707 (cherry picked from commit
0362944f
)
上级
e4790f37
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
64 addition
and
1 deletion
+64
-1
pulsar-client-kafka-compat/pulsar-client-kafka/src/main/java/org/apache/kafka/clients/producer/PulsarKafkaProducer.java
...rg/apache/kafka/clients/producer/PulsarKafkaProducer.java
+3
-1
tests/pulsar-kafka-compat-client-test/src/test/java/org/apache/pulsar/tests/integration/compat/kafka/PulsarKafkaProducerThreadSafeTest.java
...ation/compat/kafka/PulsarKafkaProducerThreadSafeTest.java
+61
-0
未找到文件。
pulsar-client-kafka-compat/pulsar-client-kafka/src/main/java/org/apache/kafka/clients/producer/PulsarKafkaProducer.java
浏览文件 @
cc746322
...
@@ -253,7 +253,9 @@ public class PulsarKafkaProducer<K, V> implements Producer<K, V> {
...
@@ -253,7 +253,9 @@ public class PulsarKafkaProducer<K, V> implements Producer<K, V> {
private
org
.
apache
.
pulsar
.
client
.
api
.
Producer
<
byte
[]>
createNewProducer
(
String
topic
)
{
private
org
.
apache
.
pulsar
.
client
.
api
.
Producer
<
byte
[]>
createNewProducer
(
String
topic
)
{
try
{
try
{
// Add the partitions info for the new topic
// Add the partitions info for the new topic
cluster
=
cluster
.
withPartitions
(
readPartitionsInfo
(
topic
));
synchronized
(
this
){
cluster
=
cluster
.
withPartitions
(
readPartitionsInfo
(
topic
));
}
List
<
org
.
apache
.
pulsar
.
client
.
api
.
ProducerInterceptor
>
wrappedInterceptors
=
interceptors
.
stream
()
List
<
org
.
apache
.
pulsar
.
client
.
api
.
ProducerInterceptor
>
wrappedInterceptors
=
interceptors
.
stream
()
.
map
(
interceptor
->
new
KafkaProducerInterceptorWrapper
(
interceptor
,
keySchema
,
valueSchema
,
topic
))
.
map
(
interceptor
->
new
KafkaProducerInterceptorWrapper
(
interceptor
,
keySchema
,
valueSchema
,
topic
))
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
...
...
tests/pulsar-kafka-compat-client-test/src/test/java/org/apache/pulsar/tests/integration/compat/kafka/PulsarKafkaProducerThreadSafeTest.java
0 → 100644
浏览文件 @
cc746322
/**
* 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.pulsar.tests.integration.compat.kafka
;
import
org.apache.kafka.clients.producer.KafkaProducer
;
import
org.apache.kafka.clients.producer.Producer
;
import
org.apache.kafka.clients.producer.ProducerRecord
;
import
org.apache.kafka.clients.producer.PulsarKafkaProducer
;
import
org.apache.kafka.common.serialization.IntegerSerializer
;
import
org.apache.kafka.common.serialization.StringSerializer
;
import
org.apache.pulsar.tests.integration.suites.PulsarStandaloneTestSuite
;
import
org.testng.annotations.BeforeTest
;
import
org.testng.annotations.Test
;
import
java.util.Properties
;
/**
* A test that tests if {@link PulsarKafkaProducer} is thread safe.
*/
public
class
PulsarKafkaProducerThreadSafeTest
extends
PulsarStandaloneTestSuite
{
private
Producer
producer
;
private
static
String
getPlainTextServiceUrl
()
{
return
container
.
getPlainTextServiceUrl
();
}
@BeforeTest
private
void
setup
()
{
Properties
producerProperties
=
new
Properties
();
producerProperties
.
put
(
"bootstrap.servers"
,
getPlainTextServiceUrl
());
producerProperties
.
put
(
"key.serializer"
,
IntegerSerializer
.
class
.
getName
());
producerProperties
.
put
(
"value.serializer"
,
StringSerializer
.
class
.
getName
());
producer
=
new
KafkaProducer
<>(
producerProperties
);
}
/**
* This test run 10 times in threadPool witch size is 5.
* Different threads have same producer and different topics witch is based on thread time.
* This test will be failed when producer failed to send if PulsarKafkaProducer is not thread safe.
*/
@Test
(
threadPoolSize
=
5
,
invocationCount
=
10
)
public
void
testPulsarKafkaProducerThreadSafe
()
{
String
topic1
=
"persistent://public/default/topic-"
+
System
.
currentTimeMillis
();
ProducerRecord
<
String
,
String
>
record
=
new
ProducerRecord
<>(
topic1
,
"Hello"
);
producer
.
send
(
record
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录