Merge branch 'cassandra-4.1' into cassandra-5.0

This commit is contained in:
Stefan Miklosovic 2023-10-24 16:27:20 +02:00
commit 9ffb838d03
No known key found for this signature in database
GPG Key ID: 32F35CB2F546D93E
3 changed files with 39 additions and 3 deletions

View File

@ -30,6 +30,8 @@ Merged from 4.0:
Merged from 3.11:
Merged from 3.0:
* Implement the logic in bin/stop-server (CASSANDRA-18838)
* Fix nodetool enable/disablebinary to correctly set rpc readiness in gossip (CASSANDRA-18935)
* Implement the logic in bin/stop-server (CASSANDRA-18838)
* Upgrade snappy-java to 1.1.10.4 (CASSANDRA-18878)
* Add cqlshrc.sample and credentials.sample into Debian package (CASSANDRA-18818)

View File

@ -665,10 +665,7 @@ public class CassandraDaemon
{
String nativeFlag = START_NATIVE_TRANSPORT.getString();
if (START_NATIVE_TRANSPORT.getBoolean() || (nativeFlag == null && DatabaseDescriptor.startNativeTransport()))
{
startNativeTransport();
StorageService.instance.setRpcReady(true);
}
else
logger.info("Not starting native transport as requested. Use JMX (StorageService->startNativeTransport()) or nodetool (enablebinary) to start it");
}
@ -815,13 +812,24 @@ public class CassandraDaemon
if (nativeTransportService == null)
throw new IllegalStateException("setup() must be called first for CassandraDaemon");
// this iterates over a collection of servers and returns true if one of them is started
boolean alreadyRunning = nativeTransportService.isRunning();
// this might in practice start all servers which are not started yet
nativeTransportService.start();
// interact with gossip only in case if no server was started before to signal they are started now
if (!alreadyRunning)
StorageService.instance.setRpcReady(true);
}
public void stopNativeTransport()
{
if (nativeTransportService != null)
{
StorageService.instance.setRpcReady(false);
nativeTransportService.stop();
}
}
public boolean isNativeTransportRunning()

View File

@ -33,6 +33,7 @@ import com.datastax.driver.core.SimpleStatement;
import com.datastax.driver.core.Statement;
import org.apache.cassandra.distributed.api.ICluster;
import org.apache.cassandra.distributed.impl.RowUtil;
import org.apache.cassandra.utils.FBUtilities;
import static org.apache.cassandra.config.CassandraRelevantProperties.JOIN_RING;
import static org.apache.cassandra.distributed.action.GossipHelper.withProperty;
@ -120,4 +121,29 @@ public class NativeProtocolTest extends TestBaseImpl
() -> StorageService.instance.isNativeTransportRunning()));
}
}
@Test
public void testBinaryReflectsRpcReadiness() throws Throwable
{
try (Cluster cluster = builder().withNodes(1)
.withConfig(config -> config.with(NETWORK, GOSSIP, NATIVE_PROTOCOL)
.set("start_native_transport", "false"))
.start())
{
IInvokableInstance i = cluster.get(1);
// rpc is false when native transport is not enabled
assertFalse(i.callOnInstance((IIsolatedExecutor.SerializableCallable<Boolean>) () -> StorageService.instance.isNativeTransportRunning()));
assertFalse(i.callOnInstance((IIsolatedExecutor.SerializableCallable<Boolean>) () -> StorageService.instance.isRpcReady(FBUtilities.getBroadcastAddressAndPort())));
// but if we enable it, e.g. by nodetool enablebinary, rpc will be enabled
i.runOnInstance((IIsolatedExecutor.SerializableRunnable) () -> StorageService.instance.startNativeTransport());
assertTrue(i.callOnInstance((IIsolatedExecutor.SerializableCallable<Boolean>) () -> StorageService.instance.isRpcReady(FBUtilities.getBroadcastAddressAndPort())));
// by calling e.g. nodetool disablebinary, rpc will be set to false again
i.runOnInstance((IIsolatedExecutor.SerializableRunnable) () -> StorageService.instance.stopNativeTransport());
assertFalse(i.callOnInstance((IIsolatedExecutor.SerializableCallable<Boolean>) () -> StorageService.instance.isRpcReady(FBUtilities.getBroadcastAddressAndPort())));
}
}
}