You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by GitBox <gi...@apache.org> on 2019/11/07 10:00:35 UTC
[GitHub] [pulsar] weishuisheng opened a new issue #5585: Non-persistent
topic's replication has a deadlock
weishuisheng opened a new issue #5585: Non-persistent topic's replication has a deadlock
URL: https://github.com/apache/pulsar/issues/5585
NonPersistentReplicator disable batching. If there is batch message,producer will acquire one,but release num in message's meta when process ack.
```
// When publishing during replication, we need to set the correct number of message in batch
// This is only used in tracking the publish rate stats
int numMessages = msg.getMessageBuilder().hasNumMessagesInBatch()
? msg.getMessageBuilder().getNumMessagesInBatch()
: 1;
ByteBufPair cmd = sendMessage(producerId, sequenceId, numMessages, msgMetadata, encryptedPayload);
msgMetadataBuilder.recycle();
msgMetadata.recycle();
final OpSendMsg op = OpSendMsg.create(msg, cmd, sequenceId, callback);
op.setNumMessagesInBatch(numMessages);
op.setBatchSizeByte(encryptedPayload.readableBytes());
pendingMessages.put(op);
lastSendFuture = callback.getFuture();
```
So the ProducerImpl's semaphore no longer has any effect, the ProducerImpl's sendAsync method maybe blocked in pendingMessages's put method .
There may be a deadlock between ackReceived and sendAsync .
The deadlock is between pulsar-io-22-8 and pulsar-io-22-12 in jstack log.
[broker jstack log](https://github.com/apache/pulsar/files/3818922/broker.txt)
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services