@@ -655,6 +655,8 @@ private void verifyHistogramCount(String name, boolean hasPerQueryKindMetrics)
655655 @ Test
656656 public void testQueryPlannerMetrics ()
657657 {
658+ CassandraRelevantProperties .SAI_QUERY_PLAN_METRICS_ENABLED .setBoolean (true );
659+
658660 String table = createTable ("CREATE TABLE %s (k int PRIMARY KEY, lc int, hc int)" );
659661 createIndex ("CREATE CUSTOM INDEX ON %s(lc) USING 'StorageAttachedIndex'" );
660662 createIndex ("CREATE CUSTOM INDEX ON %s(hc) USING 'StorageAttachedIndex'" );
@@ -739,6 +741,62 @@ public void testQueryPlannerMetrics()
739741 assertTrue (newLogSelectivityEstimated > oldLogSelectivityEstimated );
740742 }
741743
744+ @ Test
745+ public void testDisableQueryPlanMetrics ()
746+ {
747+ CassandraRelevantProperties .SAI_QUERY_PLAN_METRICS_ENABLED .setBoolean (false );
748+
749+ String table = createTable ("CREATE TABLE %s (k int PRIMARY KEY, lc int, hc int)" );
750+ createIndex ("CREATE CUSTOM INDEX ON %s(lc) USING 'StorageAttachedIndex'" );
751+ createIndex ("CREATE CUSTOM INDEX ON %s(hc) USING 'StorageAttachedIndex'" );
752+
753+ int numRows = 10000 ;
754+ for (int i = 0 ; i < numRows ; i ++)
755+ {
756+ execute ("INSERT INTO %s (k, lc, hc) VALUES (?, ?, ?)" , i , i % 2 , i );
757+ }
758+
759+ flush ();
760+
761+ // Check if SAI queries still work correctly when plan metrics are disabled
762+ UntypedResultSet rows ;
763+ rows = execute ("SELECT k FROM %s WHERE lc = 0" );
764+ assertEquals (numRows / 2 , rows .size ());
765+ rows = execute ("SELECT k FROM %s WHERE lc = 0 AND hc < 10" );
766+ assertEquals (5 , rows .size ());
767+ rows = execute ("SELECT k FROM %s WHERE lc = 0 ORDER BY hc LIMIT 100" );
768+ assertEquals (100 , rows .size ());
769+ rows = execute ("SELECT k FROM %s WHERE k = 1 AND hc = 1" );
770+ assertEquals (1 , rows .size ());
771+
772+ // Check if metrics aren't updated
773+ ObjectName objectName ;
774+ objectName = objectNameNoIndex ("RowsToReturnEstimated" , KEYSPACE , table , PER_QUERY_METRIC_TYPE );
775+ waitForHistogramCountEquals (objectName , 0 );
776+ objectName = objectNameNoIndex ("RowsToFetchEstimated" , KEYSPACE , table , PER_QUERY_METRIC_TYPE );
777+ waitForHistogramCountEquals (objectName , 0 );
778+ objectName = objectNameNoIndex ("KeysToIterateEstimated" , KEYSPACE , table , PER_QUERY_METRIC_TYPE );
779+ waitForHistogramCountEquals (objectName , 0 );
780+ objectName = objectNameNoIndex ("CostEstimated" , KEYSPACE , table , PER_QUERY_METRIC_TYPE );
781+ waitForHistogramCountEquals (objectName , 0 );
782+ objectName = objectNameNoIndex ("LogSelectivityEstimated" , KEYSPACE , table , PER_QUERY_METRIC_TYPE );
783+ waitForHistogramCountEquals (objectName , 0 );
784+
785+ objectName = objectNameNoIndex ("IndexReferencesInQuery" , KEYSPACE , table , PER_QUERY_METRIC_TYPE );
786+ waitForHistogramCountEquals (objectName , 0 );
787+ objectName = objectNameNoIndex ("IndexReferencesInPlan" , KEYSPACE , table , PER_QUERY_METRIC_TYPE );
788+ waitForHistogramCountEquals (objectName , 0 );
789+
790+ objectName = objectNameNoIndex ("TotalRowsToReturnEstimated" , KEYSPACE , table , TABLE_QUERY_METRIC_TYPE );
791+ waitForEquals (objectName , 0 );
792+ objectName = objectNameNoIndex ("TotalRowsToFetchEstimated" , KEYSPACE , table , TABLE_QUERY_METRIC_TYPE );
793+ waitForEquals (objectName , 0 );
794+ objectName = objectNameNoIndex ("TotalKeysToIterateEstimated" , KEYSPACE , table , TABLE_QUERY_METRIC_TYPE );
795+ waitForEquals (objectName , 0 );
796+ objectName = objectNameNoIndex ("TotalCostEstimated" , KEYSPACE , table , TABLE_QUERY_METRIC_TYPE );
797+ waitForEquals (objectName , 0 );
798+ }
799+
742800 private ObjectName objectName (String name , String type )
743801 {
744802 return objectNameNoIndex (name , KEYSPACE , currentTable (), type );
0 commit comments