|
24 | 24 | import java.util.stream.Collectors; |
25 | 25 | import java.util.stream.Stream; |
26 | 26 |
|
| 27 | +import com.codahale.metrics.Counter; |
27 | 28 | import com.datastax.driver.core.BatchStatement; |
28 | 29 | import com.datastax.driver.core.Cluster; |
29 | 30 | import com.datastax.driver.core.PreparedStatement; |
@@ -213,6 +214,61 @@ public void testPreparedStatementsExecuted() |
213 | 214 | assertGreaterThan(cfs.metric.coordinatorWriteLatency.getMeanRate(), 0); |
214 | 215 | } |
215 | 216 |
|
| 217 | + @Test |
| 218 | + public void testRowsMutatedCounter() |
| 219 | + { |
| 220 | + ColumnFamilyStore cfs = recreateTable(); |
| 221 | + assertEquals(0, cfs.metric.totalRowsMutated.getCount()); |
| 222 | + |
| 223 | + // Each INSERT touches exactly one row |
| 224 | + session.execute(String.format("INSERT INTO %s.%s (id, val1, val2) VALUES (1, 'a', 'b')", KEYSPACE, TABLE)); |
| 225 | + assertEquals(1, cfs.metric.totalRowsMutated.getCount()); |
| 226 | + |
| 227 | + session.execute(String.format("INSERT INTO %s.%s (id, val1, val2) VALUES (2, 'c', 'd')", KEYSPACE, TABLE)); |
| 228 | + assertEquals(2, cfs.metric.totalRowsMutated.getCount()); |
| 229 | + |
| 230 | + // Batch of 3 rows — counter should jump by 3 |
| 231 | + executeBatch(false, 3, 1); |
| 232 | + assertEquals(5, cfs.metric.totalRowsMutated.getCount()); |
| 233 | + |
| 234 | + assertMetricRows("TotalRowsMutated", cfs.metric.totalRowsMutated); |
| 235 | + } |
| 236 | + |
| 237 | + @Test |
| 238 | + public void testRowsReadCounter() |
| 239 | + { |
| 240 | + ColumnFamilyStore cfs = recreateTable(); |
| 241 | + assertEquals(0, cfs.metric.totalRowsRead.getCount()); |
| 242 | + |
| 243 | + // Seed some rows |
| 244 | + for (int i = 0; i < 5; i++) |
| 245 | + session.execute(String.format("INSERT INTO %s.%s (id, val1, val2) VALUES (%d, 'v%d', 'x')", KEYSPACE, TABLE, i, i)); |
| 246 | + |
| 247 | + // Full-table scan should touch all 5 rows |
| 248 | + session.execute(String.format("SELECT * FROM %s.%s", KEYSPACE, TABLE)); |
| 249 | + assertEquals(5, cfs.metric.totalRowsRead.getCount()); |
| 250 | + |
| 251 | + // Single-partition read touches 1 row |
| 252 | + session.execute(String.format("SELECT * FROM %s.%s WHERE id = 0", KEYSPACE, TABLE)); |
| 253 | + assertEquals(6, cfs.metric.totalRowsRead.getCount()); |
| 254 | + |
| 255 | + assertMetricRows("TotalRowsRead", cfs.metric.totalRowsRead); |
| 256 | + } |
| 257 | + |
| 258 | + private void assertMetricRows(String metricName, Counter counter) |
| 259 | + { |
| 260 | + assertRowsContains(cluster, session.execute("SELECT * FROM system_metrics.table_group"), |
| 261 | + row("org.apache.cassandra.metrics.Table." + metricName + ".junit.tablemetricstest", |
| 262 | + "junit.tablemetricstest", |
| 263 | + "counter", |
| 264 | + String.valueOf(counter.getCount()))); |
| 265 | + assertRowsContains(cluster, session.execute("SELECT * FROM system_metrics.column_family_group"), |
| 266 | + row("org.apache.cassandra.metrics.ColumnFamily." + metricName + ".junit.tablemetricstest", |
| 267 | + "junit.tablemetricstest", |
| 268 | + "counter", |
| 269 | + String.valueOf(counter.getCount()))); |
| 270 | + } |
| 271 | + |
216 | 272 | @Test |
217 | 273 | public void testLoggedPartitionsPerBatch() |
218 | 274 | { |
|
0 commit comments