[
https://issues.apache.org/jira/browse/CASSANDRA-18638?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ke Han updated CASSANDRA-18638:
-------------------------------
Description:
When I was testing the upgrade from Cassandra-3.11.15 to Cassandra-4.1.2
(single node), for the debugging purpose, I enabled partition_denylist_enabled
and set the partition consistency level to {_}NODE_LOCAL{_}.
I encountered the following error message in the system log
{code:java}
ERROR [main] 2023-06-29 14:12:17,870 PartitionDenylist.java:156 - Failed to
load partition denylist
java.lang.UnsupportedOperationException: Invalid consistency level: NODE_LOCAL
at
org.apache.cassandra.db.ConsistencyLevel.blockFor(ConsistencyLevel.java:168)
at
org.apache.cassandra.locator.ReplicaPlans.contactForRead(ReplicaPlans.java:558)
at
org.apache.cassandra.locator.ReplicaPlans.forRangeRead(ReplicaPlans.java:611)
at
org.apache.cassandra.service.reads.range.ReplicaPlanIterator.computeNext(ReplicaPlanIterator.java:76)
at
org.apache.cassandra.service.reads.range.ReplicaPlanIterator.computeNext(ReplicaPlanIterator.java:42)
at
org.apache.cassandra.utils.AbstractIterator.hasNext(AbstractIterator.java:47)
at java.util.Iterator.forEachRemaining(Iterator.java:115)
at
org.apache.cassandra.service.reads.range.RangeCommands.sufficientLiveNodesForSelectStar(RangeCommands.java:135)
at
org.apache.cassandra.schema.PartitionDenylist.checkDenylistNodeAvailability(PartitionDenylist.java:169)
at
org.apache.cassandra.schema.PartitionDenylist.initialLoad(PartitionDenylist.java:148)
at
org.apache.cassandra.service.StorageProxy.initialLoadPartitionDenylist(StorageProxy.java:2914)
at
org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:1224)
at
org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:1145)
at
org.apache.cassandra.service.StorageService.initServer(StorageService.java:936)
at
org.apache.cassandra.service.StorageService.initServer(StorageService.java:854)
at
org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:424)
at
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:751)
at
org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:875)
INFO [main] 2023-06-29 14:12:17,870 PartitionDenylist.java:163 - Exception
while loading partition denylist cache. Scheduled retry in 5 seconds. {code}
h2. How to reproduce
I encountered it after the upgrade process. But I think it can also be
reproduced without the upgrade process.
1. Set up Cassandra-4.1.2 single node, add the follow configurations to
cassandra.yaml
{code:java}
denylist_consistency_level: NODE_LOCAL
partition_denylist_enabled: true{code}
2. Start up Cassandra, the error message will show in system.log file.
h2. Root Cause
After setting denylist_consistency_level to NODE LEVEL, when loading denylist,
it invokes the _blockFor_ method
{code:java}
public int blockFor(AbstractReplicationStrategy replicationStrategy)
{
switch (this)
{
case ONE:
case LOCAL_ONE:
return 1;
case ANY:
return 1;
case TWO:
return 2;
case THREE:
return 3;
case QUORUM:
case SERIAL:
return quorumFor(replicationStrategy);
case ALL:
return replicationStrategy.getReplicationFactor().allReplicas;
case LOCAL_QUORUM:
case LOCAL_SERIAL:
return localQuorumForOurDc(replicationStrategy);
case EACH_QUORUM:
if (replicationStrategy instanceof NetworkTopologyStrategy)
{
NetworkTopologyStrategy strategy = (NetworkTopologyStrategy)
replicationStrategy;
int n = 0;
for (String dc : strategy.getDatacenters())
n += localQuorumFor(replicationStrategy, dc);
return n;
}
else
{
return quorumFor(replicationStrategy);
}
default:
throw new UnsupportedOperationException("Invalid consistency level:
" + toString());
}
} {code}
However, the _NODE_LOCAL_ enum is not included in those cases and thus results
in the exception message.
Should this enum be included, or does Cassandra forbid users from using
partition denylist with the _NODE_LOCAL_ consistency level (even for debugging
purposes)?
was:
When I was testing upgrade from cassandra-3.11.15 to cassandra-4.1.2 (single
node), for debugging purpose I enabled partition_denylist_enabled and set the
parition consistency level to {_}NODE_LOCAL{_}.
I encountered error message from the system log
{code:java}
ERROR [main] 2023-06-29 14:12:17,870 PartitionDenylist.java:156 - Failed to
load partition denylist
java.lang.UnsupportedOperationException: Invalid consistency level: NODE_LOCAL
at
org.apache.cassandra.db.ConsistencyLevel.blockFor(ConsistencyLevel.java:168)
at
org.apache.cassandra.locator.ReplicaPlans.contactForRead(ReplicaPlans.java:558)
at
org.apache.cassandra.locator.ReplicaPlans.forRangeRead(ReplicaPlans.java:611)
at
org.apache.cassandra.service.reads.range.ReplicaPlanIterator.computeNext(ReplicaPlanIterator.java:76)
at
org.apache.cassandra.service.reads.range.ReplicaPlanIterator.computeNext(ReplicaPlanIterator.java:42)
at
org.apache.cassandra.utils.AbstractIterator.hasNext(AbstractIterator.java:47)
at java.util.Iterator.forEachRemaining(Iterator.java:115)
at
org.apache.cassandra.service.reads.range.RangeCommands.sufficientLiveNodesForSelectStar(RangeCommands.java:135)
at
org.apache.cassandra.schema.PartitionDenylist.checkDenylistNodeAvailability(PartitionDenylist.java:169)
at
org.apache.cassandra.schema.PartitionDenylist.initialLoad(PartitionDenylist.java:148)
at
org.apache.cassandra.service.StorageProxy.initialLoadPartitionDenylist(StorageProxy.java:2914)
at
org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:1224)
at
org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:1145)
at
org.apache.cassandra.service.StorageService.initServer(StorageService.java:936)
at
org.apache.cassandra.service.StorageService.initServer(StorageService.java:854)
at
org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:424)
at
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:751)
at
org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:875)
INFO [main] 2023-06-29 14:12:17,870 PartitionDenylist.java:163 - Exception
while loading partition denylist cache. Scheduled retry in 5 seconds. {code}
h2. How to reproduce
I encountered it after the upgrade process. But I think it can also be
reproduced without the upgrade process.
1. Set up Cassandra-4.1.2 single node, add the follow configurations to
cassandra.yaml
{code:java}
denylist_consistency_level: NODE_LOCAL
partition_denylist_enabled: true{code}
2. Start up Cassandra, the error message will show in system.log file.
h2. Root Cause
After setting denylist_consistency_level to NODE LEVEL, when loading denylist,
it invokes the _blockFor_ method
{code:java}
public int blockFor(AbstractReplicationStrategy replicationStrategy)
{
switch (this)
{
case ONE:
case LOCAL_ONE:
return 1;
case ANY:
return 1;
case TWO:
return 2;
case THREE:
return 3;
case QUORUM:
case SERIAL:
return quorumFor(replicationStrategy);
case ALL:
return replicationStrategy.getReplicationFactor().allReplicas;
case LOCAL_QUORUM:
case LOCAL_SERIAL:
return localQuorumForOurDc(replicationStrategy);
case EACH_QUORUM:
if (replicationStrategy instanceof NetworkTopologyStrategy)
{
NetworkTopologyStrategy strategy = (NetworkTopologyStrategy)
replicationStrategy;
int n = 0;
for (String dc : strategy.getDatacenters())
n += localQuorumFor(replicationStrategy, dc);
return n;
}
else
{
return quorumFor(replicationStrategy);
}
default:
throw new UnsupportedOperationException("Invalid consistency level:
" + toString());
}
} {code}
However, the _NODE_LOCAL_ enum is not included in those cases and thus results
in the exception message.
Should this enum be included, or does Cassandra forbid users from using
partition denylist with the _NODE_LOCAL_ consistency level (even for debugging
purposes)?
> ERROR: Invalid consistency level: NODE_LOCAL when using partition denylist in
> 4.1.2
> -----------------------------------------------------------------------------------
>
> Key: CASSANDRA-18638
> URL: https://issues.apache.org/jira/browse/CASSANDRA-18638
> Project: Cassandra
> Issue Type: Bug
> Reporter: Ke Han
> Priority: Normal
> Attachments: cassandra.yaml, system.log
>
>
> When I was testing the upgrade from Cassandra-3.11.15 to Cassandra-4.1.2
> (single node), for the debugging purpose, I enabled
> partition_denylist_enabled and set the partition consistency level to
> {_}NODE_LOCAL{_}.
> I encountered the following error message in the system log
> {code:java}
> ERROR [main] 2023-06-29 14:12:17,870 PartitionDenylist.java:156 - Failed to
> load partition denylist
> java.lang.UnsupportedOperationException: Invalid consistency level: NODE_LOCAL
> at
> org.apache.cassandra.db.ConsistencyLevel.blockFor(ConsistencyLevel.java:168)
> at
> org.apache.cassandra.locator.ReplicaPlans.contactForRead(ReplicaPlans.java:558)
> at
> org.apache.cassandra.locator.ReplicaPlans.forRangeRead(ReplicaPlans.java:611)
> at
> org.apache.cassandra.service.reads.range.ReplicaPlanIterator.computeNext(ReplicaPlanIterator.java:76)
> at
> org.apache.cassandra.service.reads.range.ReplicaPlanIterator.computeNext(ReplicaPlanIterator.java:42)
> at
> org.apache.cassandra.utils.AbstractIterator.hasNext(AbstractIterator.java:47)
> at java.util.Iterator.forEachRemaining(Iterator.java:115)
> at
> org.apache.cassandra.service.reads.range.RangeCommands.sufficientLiveNodesForSelectStar(RangeCommands.java:135)
> at
> org.apache.cassandra.schema.PartitionDenylist.checkDenylistNodeAvailability(PartitionDenylist.java:169)
> at
> org.apache.cassandra.schema.PartitionDenylist.initialLoad(PartitionDenylist.java:148)
> at
> org.apache.cassandra.service.StorageProxy.initialLoadPartitionDenylist(StorageProxy.java:2914)
> at
> org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:1224)
> at
> org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:1145)
> at
> org.apache.cassandra.service.StorageService.initServer(StorageService.java:936)
> at
> org.apache.cassandra.service.StorageService.initServer(StorageService.java:854)
> at
> org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:424)
> at
> org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:751)
> at
> org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:875)
> INFO [main] 2023-06-29 14:12:17,870 PartitionDenylist.java:163 - Exception
> while loading partition denylist cache. Scheduled retry in 5 seconds. {code}
> h2. How to reproduce
> I encountered it after the upgrade process. But I think it can also be
> reproduced without the upgrade process.
> 1. Set up Cassandra-4.1.2 single node, add the follow configurations to
> cassandra.yaml
> {code:java}
> denylist_consistency_level: NODE_LOCAL
> partition_denylist_enabled: true{code}
> 2. Start up Cassandra, the error message will show in system.log file.
> h2. Root Cause
> After setting denylist_consistency_level to NODE LEVEL, when loading
> denylist, it invokes the _blockFor_ method
> {code:java}
> public int blockFor(AbstractReplicationStrategy replicationStrategy)
> {
> switch (this)
> {
> case ONE:
> case LOCAL_ONE:
> return 1;
> case ANY:
> return 1;
> case TWO:
> return 2;
> case THREE:
> return 3;
> case QUORUM:
> case SERIAL:
> return quorumFor(replicationStrategy);
> case ALL:
> return replicationStrategy.getReplicationFactor().allReplicas;
> case LOCAL_QUORUM:
> case LOCAL_SERIAL:
> return localQuorumForOurDc(replicationStrategy);
> case EACH_QUORUM:
> if (replicationStrategy instanceof NetworkTopologyStrategy)
> {
> NetworkTopologyStrategy strategy = (NetworkTopologyStrategy)
> replicationStrategy;
> int n = 0;
> for (String dc : strategy.getDatacenters())
> n += localQuorumFor(replicationStrategy, dc);
> return n;
> }
> else
> {
> return quorumFor(replicationStrategy);
> }
> default:
> throw new UnsupportedOperationException("Invalid consistency
> level: " + toString());
> }
> } {code}
> However, the _NODE_LOCAL_ enum is not included in those cases and thus
> results in the exception message.
> Should this enum be included, or does Cassandra forbid users from using
> partition denylist with the _NODE_LOCAL_ consistency level (even for
> debugging purposes)?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]