[ 
https://issues.apache.org/jira/browse/CASSANDRA-19400?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17852896#comment-17852896
 ] 

Caleb Rackliffe commented on CASSANDRA-19400:
---------------------------------------------

bq. 2. How do I test my changes?

{{PartialUpdateHandlingTest}} and other tests already look at the happy path. 
{{IndexAvailabilityTest}} tests the propagation of indexing status around a 
cluster, but doesn't test the logic of {{IndexStatusManager}} itself. I think 
what might make sense is a new {{IndexStatusManagerTest}} unit test that mocks 
out (probably use {{Mockito}}, see {{ShardManagerTest}}) {{Index.QueryPlan}} to 
return indexes with names that match up with prior calls to 
{{receivePeerIndexStatus()}} and {{Keyspace}} to return a name and 
{{NetworkTopologyStrategy}}. You'd have total control to run through scenarios 
where one or more statuses are {{UNKNOWN}} on calls to {{filterForQuery()}}, 
and verify either {{ReadFailureException}} is thrown or we get back an expected 
set of {{Endpoints}}. The {{liveEndpoints}} you'd pass int the test would 
probably be an {{EndpointsForRange}} object, but you look to already be 
familiar with {{ReplicaCollection.Builder}}.

> IndexStatusManager needs to prioritize SUCCESS over UNKNOWN states to 
> maximize availability
> -------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-19400
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-19400
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Feature/SAI
>            Reporter: Caleb Rackliffe
>            Assignee: Arun Ganesh
>            Priority: Low
>             Fix For: 5.0.x, 5.x
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> {{IndexStatusManager}} is responsible for knowing what SAI indexes are 
> queryable across the ring, endpoint by endpoint. There are two statuses that 
> SAI treats as queryable, but it should not treat them equally. 
> {{BUILD_SUCCEEDED}} means the index is definitely available and should be 
> able to serve queries without issue. {{UNKNOWN}} indicates that the status of 
> the index hasn’t propagated yet to this coordinator. It may be just fine, or 
> it may not be. If it isn’t a query will not return incorrect results, but it 
> will fail. If there are enough {{BUILD_SUCCEEDED}} replicas, we should ignore 
> {{UNKNOWN}} replicas and maximize availability. If the UNKNOWN replica is 
> going to become {{BUILD_SUCCEEDED}} shortly, it will happily start taking 
> requests at that point and spread the load. If not, we’ll avoid futile 
> attempts to query it too early.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to