public void handleReplicateDeliveryAck(String sessionID, final long deliveryID) throws Exception
{
if (trace) { log.trace(this + " handleReplicateDeliveryAck " + sessionID + " " + deliveryID); }
//TODO - this does not belong here
final ServerSessionEndpoint session = serverPeer.getSession(sessionID);
if (this.useJGroupsWorkaround)
{
replicateSemaphore.release();
}
if (session == null)
{
log.warn("Cannot find session " + sessionID);
return;
}
//Execute on a different thread to avoid taking up JGroups thread for too long
//which can cause heartbeats to be missed and the member to be suspected
replicateResponseExecutor.execute(
new Runnable()
{
public void run()
{
try
{
session.replicateDeliveryResponseReceived(deliveryID);
}
catch (Exception e)
{
log.error("Failed to process response", e);
}