Skip to content

Commit

Permalink
GH-1524: Fix ThreadChannelCF with Transactional
Browse files Browse the repository at this point in the history
Resolves #1524

Channel was always physically closed.

**cherry-pick to 2.4.x**
  • Loading branch information
garyrussell authored and artembilan committed Oct 26, 2022
1 parent 9242967 commit 8dea23b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
Expand Up @@ -307,8 +307,7 @@ private Channel createProxy(Channel channel, boolean transactional) {
}

private void handleClose(Channel channel, boolean transactional) {

if (transactional && this.txChannels.get() == null ? true : this.channels.get() == null) {
if ((transactional && this.txChannels.get() == null) || (!transactional && this.channels.get() == null)) {
physicalClose(channel);
}
else {
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2020-2021 the original author or authors.
* Copyright 2020-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -110,6 +110,36 @@ void testBasic() throws Exception {
.isFalse();
}

@Test
void testClose() throws Exception {
ConnectionFactory rabbitConnectionFactory = new ConnectionFactory();
rabbitConnectionFactory.setHost("localhost");
ThreadChannelConnectionFactory tccf = new ThreadChannelConnectionFactory(rabbitConnectionFactory);
Connection conn = tccf.createConnection();
Channel chann1 = conn.createChannel(false);
Channel targetChannel1 = ((ChannelProxy) chann1).getTargetChannel();
chann1.close();
Channel chann2 = conn.createChannel(false);
Channel targetChannel2 = ((ChannelProxy) chann2).getTargetChannel();
assertThat(chann2).isSameAs(chann1);
assertThat(targetChannel2).isSameAs(targetChannel1);
}

@Test
void testTxClose() throws Exception {
ConnectionFactory rabbitConnectionFactory = new ConnectionFactory();
rabbitConnectionFactory.setHost("localhost");
ThreadChannelConnectionFactory tccf = new ThreadChannelConnectionFactory(rabbitConnectionFactory);
Connection conn = tccf.createConnection();
Channel chann1 = conn.createChannel(true);
Channel targetChannel1 = ((ChannelProxy) chann1).getTargetChannel();
chann1.close();
Channel chann2 = conn.createChannel(true);
Channel targetChannel2 = ((ChannelProxy) chann2).getTargetChannel();
assertThat(chann2).isSameAs(chann1);
assertThat(targetChannel2).isSameAs(targetChannel1);
}

@Test
void queueDeclared(@Autowired RabbitAdmin admin, @Autowired Config config,
@Autowired ThreadChannelConnectionFactory tccf) throws Exception {
Expand Down

0 comments on commit 8dea23b

Please sign in to comment.