mirror of
https://github.com/apache/rocketmq.git
synced 2026-09-24 16:04:00 +08:00
[ISSUE #5542] Fix ConsumerProcessor lockBatchMQ future allOf data race issue
This commit is contained in:
committed by
Zhouxiang Zhan
parent
d781271654
commit
991af5e204
@@ -313,19 +313,15 @@ public class ConsumerProcessor extends AbstractProcessor {
|
||||
Set<MessageQueue> successSet = new CopyOnWriteArraySet<>();
|
||||
Set<AddressableMessageQueue> addressableMessageQueueSet = buildAddressableSet(mqSet);
|
||||
Map<String, List<AddressableMessageQueue>> messageQueueSetMap = buildAddressableMapByBrokerName(addressableMessageQueueSet);
|
||||
List<CompletableFuture<Set<MessageQueue>>> futureList = new ArrayList<>();
|
||||
List<CompletableFuture<Void>> futureList = new ArrayList<>();
|
||||
messageQueueSetMap.forEach((k, v) -> {
|
||||
LockBatchRequestBody requestBody = new LockBatchRequestBody();
|
||||
requestBody.setConsumerGroup(consumerGroup);
|
||||
requestBody.setClientId(clientId);
|
||||
requestBody.setMqSet(v.stream().map(AddressableMessageQueue::getMessageQueue).collect(Collectors.toSet()));
|
||||
CompletableFuture<Set<MessageQueue>> future0 = new CompletableFuture<>();
|
||||
try {
|
||||
future0 = serviceManager.getMessageService().lockBatchMQ(ctx, v.get(0), requestBody, timeoutMillis);
|
||||
future0.thenAccept(successSet::addAll);
|
||||
} catch (Throwable t) {
|
||||
future0.completeExceptionally(t);
|
||||
}
|
||||
CompletableFuture<Void> future0 = serviceManager.getMessageService()
|
||||
.lockBatchMQ(ctx, v.get(0), requestBody, timeoutMillis)
|
||||
.thenAccept(successSet::addAll);
|
||||
futureList.add(FutureUtils.addExecutor(future0, this.executor));
|
||||
});
|
||||
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).whenComplete((v, t) -> {
|
||||
@@ -348,13 +344,7 @@ public class ConsumerProcessor extends AbstractProcessor {
|
||||
requestBody.setConsumerGroup(consumerGroup);
|
||||
requestBody.setClientId(clientId);
|
||||
requestBody.setMqSet(v.stream().map(AddressableMessageQueue::getMessageQueue).collect(Collectors.toSet()));
|
||||
CompletableFuture<Void> future0 = new CompletableFuture<>();
|
||||
try {
|
||||
future0 = serviceManager.getMessageService().unlockBatchMQ(ctx, v.get(0), requestBody, timeoutMillis);
|
||||
future0.complete(null);
|
||||
} catch (Throwable t) {
|
||||
future0.completeExceptionally(t);
|
||||
}
|
||||
CompletableFuture<Void> future0 = serviceManager.getMessageService().unlockBatchMQ(ctx, v.get(0), requestBody, timeoutMillis);
|
||||
futureList.add(FutureUtils.addExecutor(future0, this.executor));
|
||||
});
|
||||
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).whenComplete((v, t) -> {
|
||||
|
||||
Reference in New Issue
Block a user