[jbossts-issues] [JBoss JIRA] (JBTM-2977) Participants should not be told to compensate after completion

Nicola Ferraro (JIRA) issues at jboss.org
Fri Dec 22 04:07:01 EST 2017


     [ https://issues.jboss.org/browse/JBTM-2977?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nicola Ferraro updated JBTM-2977:
---------------------------------
    Steps to Reproduce: 
{code}
# # Shell 1: listen for connections (does not reply) and print output
nc -kl 8888

# Shell 2: create a saga and close it
COORDINATOR_URL=http://localhost:8080/lra-coordinator
echo "Creating new LRA"
LRA_URL=$(curl -X POST $COORDINATOR_URL/start | sed "s/\"//g")
echo "Joining LRA"
curl -X PUT $LRA_URL -d http://localhost:8888
echo "Close LRA"
curl -X PUT $LRA_URL/close


# Output of shell 1
PUT /complete HTTP/1.1
Accept-Encoding: gzip, deflate
Content-Type: application/json
Long-Running-Action: http://localhost:8080/lra-coordinator/0_ffff0a2140b4_-14db9cf6_5a3bdf77_241
Long-Running-Action-Recovery: http://localhost:8080/lra-recovery-coordinator/http%3A%2F%2Flocalhost%3A8080%2Flra-coordinator%2F0_ffff0a2140b4_-14db9cf6_5a3bdf77_241/0_ffff0a2140b4_-14db9cf6_5a3bdf77_24e
Content-Length: 0
Host: localhost:8888
Connection: Keep-Alive

###### After some seconds, when periodic recovery starts ######

PUT /compensate HTTP/1.1
Accept-Encoding: gzip, deflate
Content-Type: application/json
Long-Running-Action: http://localhost:8080/lra-coordinator/0_ffff0a2140b4_-14db9cf6_5a3bdf77_241
Long-Running-Action-Recovery: http://localhost:8080/lra-recovery-coordinator/http%3A%2F%2Flocalhost%3A8080%2Flra-coordinator%2F0_ffff0a2140b4_-14db9cf6_5a3bdf77_241/0_ffff0a2140b4_-14db9cf6_5a3bdf77_24e
Content-Length: 0
Host: localhost:8888
Connection: Keep-Alive
{code}

  was:
{code}
# # Shell 1: listen for connections (does not reply) and print output
nc -kl 8888

# Shell 2: create a saga and close it
COORDINATOR_URL=http://localhost:8080/lra-coordinator
echo "Creating new LRA"
LRA_URL=$(curl -X POST $COORDINATOR_URL/start | sed "s/\"//g")
echo "Joining LRA"
curl -X PUT $LRA_URL -d http://localhost:8888
echo "Close LRA"
curl -X PUT $LRA_URL/close


# Output of shell 1
PUT /compensate HTTP/1.1
Accept-Encoding: gzip, deflate
Content-Type: application/json
Long-Running-Action: http://localhost:8080/lra-coordinator/0_ffff0a2140b4_-14db9cf6_5a3bdf77_241
Long-Running-Action-Recovery: http://localhost:8080/lra-recovery-coordinator/http%3A%2F%2Flocalhost%3A8080%2Flra-coordinator%2F0_ffff0a2140b4_-14db9cf6_5a3bdf77_241/0_ffff0a2140b4_-14db9cf6_5a3bdf77_24e
Content-Length: 0
Host: localhost:8888
Connection: Keep-Alive

###### After some seconds, when periodic recovery starts ######

PUT /compensate HTTP/1.1
Accept-Encoding: gzip, deflate
Content-Type: application/json
Long-Running-Action: http://localhost:8080/lra-coordinator/0_ffff0a2140b4_-14db9cf6_5a3bdf77_241
Long-Running-Action-Recovery: http://localhost:8080/lra-recovery-coordinator/http%3A%2F%2Flocalhost%3A8080%2Flra-coordinator%2F0_ffff0a2140b4_-14db9cf6_5a3bdf77_241/0_ffff0a2140b4_-14db9cf6_5a3bdf77_24e
Content-Length: 0
Host: localhost:8888
Connection: Keep-Alive
{code}



> Participants should not be told to compensate after completion
> --------------------------------------------------------------
>
>                 Key: JBTM-2977
>                 URL: https://issues.jboss.org/browse/JBTM-2977
>             Project: JBoss Transaction Manager
>          Issue Type: Bug
>          Components: LRA
>    Affects Versions: 5.7.1.Final
>            Reporter: Nicola Ferraro
>            Assignee: Michael Musgrove
>
> When a LRA is closed the coordinator behaves incorrectly if a participant is slow to respond.
> While the call to "/complete" is still ongoing, the coordinator (recovery module) may issue a second call to "/compensate", making it impossible for the participant to determine when a LRA is really closed.
> The LRA coordinator must choose a single outcome for the LRA and be consistent with that (retrying until all participants are in status complete/failedtocomplete in this case).
> A second minor problem is that the call to "/close" is synchronous, and the caller is kept attached forever if the participant does not respond to "/complete". It would be better to establish a timeout and return a "Completing" status if not all participant are done in time.
> I attach few simple steps to reproduce it with shell commands.



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the jbossts-issues mailing list