mirror of https://github.com/apache/cassandra
Avoid NPE when meta keyspace placements are empty before CMS is initialized
Patch by Sam Tunnicliffe; reviewed by Marcus Eriksson for CASSANDRA-21004
This commit is contained in:
parent
62bd9ab1ae
commit
ec7794f20f
|
|
@ -1,4 +1,5 @@
|
|||
5.1
|
||||
* Avoid NPE when meta keyspace placements are empty before CMS is initialized (CASSANDRA-21004)
|
||||
* Gossip entries for hibernating non-members don't block truncate (CASSANDRA-21003)
|
||||
* Retry without time limit calculates wait time incorrectly (CASSANDRA-21002)
|
||||
* Don't submit AlterSchemaStatements which produce no effect locally to the CMS (CASSANDRA-21001)
|
||||
|
|
|
|||
|
|
@ -200,6 +200,7 @@ import org.apache.cassandra.tcm.membership.NodeAddresses;
|
|||
import org.apache.cassandra.tcm.membership.NodeId;
|
||||
import org.apache.cassandra.tcm.membership.NodeState;
|
||||
import org.apache.cassandra.tcm.migration.GossipCMSListener;
|
||||
import org.apache.cassandra.tcm.ownership.DataPlacement;
|
||||
import org.apache.cassandra.tcm.ownership.MovementMap;
|
||||
import org.apache.cassandra.tcm.ownership.TokenMap;
|
||||
import org.apache.cassandra.tcm.ownership.VersionedEndpoints;
|
||||
|
|
@ -2070,9 +2071,10 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
|
|||
{
|
||||
if (keyspaceMetadata.params.replication.isMeta())
|
||||
{
|
||||
rangeToEndpointMap.put(MetaStrategy.entireRange,
|
||||
metadata.placements.get(keyspaceMetadata.params.replication)
|
||||
.reads.forRange(MetaStrategy.entireRange).get());
|
||||
DataPlacement placement = metadata.placements.get(keyspaceMetadata.params.replication);
|
||||
// May be empty if mid-upgrade and CMS is not yet initialized
|
||||
if (!placement.reads.isEmpty())
|
||||
rangeToEndpointMap.put(MetaStrategy.entireRange, placement.reads.forRange(MetaStrategy.entireRange).get());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,6 +22,10 @@ import org.junit.Test;
|
|||
|
||||
import org.apache.cassandra.distributed.Constants;
|
||||
import org.apache.cassandra.distributed.api.Feature;
|
||||
import org.apache.cassandra.distributed.api.IInvokableInstance;
|
||||
import org.apache.cassandra.service.StorageService;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* @see org.apache.cassandra.tools.nodetool.CMSAdmin.InitializeCMS
|
||||
|
|
@ -42,6 +46,7 @@ public class ClusterMetadataSingleNodeUpgradeTest extends UpgradeTestBase
|
|||
cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
|
||||
})
|
||||
.runAfterClusterUpgrade((cluster) -> {
|
||||
assertTrue(((IInvokableInstance)cluster.get(1)).callOnInstance(() -> StorageService.instance.getRangeToAddressMap("system_cluster_metadata").isEmpty()));
|
||||
cluster.get(1).nodetoolResult("cms", "initialize").asserts().success();
|
||||
// make sure we can execute transformations:
|
||||
cluster.schemaChange(withKeyspace("ALTER TABLE %s.tbl with comment = 'hello123'"));
|
||||
|
|
|
|||
Loading…
Reference in New Issue