dcapwell commented on code in PR #3305:
URL: https://github.com/apache/cassandra/pull/3305#discussion_r1617865470
##########
src/java/org/apache/cassandra/db/virtual/AccordVirtualTables.java:
##########
@@ -18,57 +18,205 @@
package org.apache.cassandra.db.virtual;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
-import com.google.common.annotations.VisibleForTesting;
-
+import accord.local.CommandStores;
+import accord.primitives.TxnId;
+import accord.utils.async.AsyncChains;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.cql3.statements.schema.CreateTableStatement;
+import org.apache.cassandra.db.ColumnFamilyStore;
+import org.apache.cassandra.db.DecoratedKey;
+import org.apache.cassandra.db.Keyspace;
+import org.apache.cassandra.db.marshal.UTF8Type;
+import org.apache.cassandra.dht.Range;
+import org.apache.cassandra.dht.Token;
+import org.apache.cassandra.exceptions.InvalidRequestException;
+import org.apache.cassandra.schema.Schema;
+import org.apache.cassandra.schema.TableId;
import org.apache.cassandra.schema.TableMetadata;
+import org.apache.cassandra.service.accord.AccordCommandStore;
import org.apache.cassandra.service.accord.AccordService;
-import org.apache.cassandra.service.accord.IAccordService;
+import org.apache.cassandra.service.accord.AccordStateCache;
+import
org.apache.cassandra.service.consensus.migration.ConsensusMigrationState;
+import org.apache.cassandra.service.consensus.migration.TableMigrationState;
+import org.apache.cassandra.tcm.ClusterMetadata;
+import org.apache.cassandra.utils.Clock;
+
+import static com.google.common.collect.ImmutableList.toImmutableList;
public class AccordVirtualTables
{
- private AccordVirtualTables()
- {
-
- }
+ private AccordVirtualTables() {}
public static Collection<VirtualTable> getAll(String keyspace)
{
if (!DatabaseDescriptor.getAccordTransactionsEnabled())
return Collections.emptyList();
- return Arrays.asList(
- new Epoch(keyspace)
+ return List.of(
+ new CommandStoreCache(keyspace),
+ new MigrationStates(keyspace),
+ new CoordinationStatus(keyspace)
);
}
- @VisibleForTesting
- public static final class Epoch extends AbstractVirtualTable
+ public static final class CommandStoreCache extends AbstractVirtualTable
{
+ private CommandStoreCache(String keyspace)
+ {
+ super(parse(keyspace,
+ "Accord Command Store Cache Metrics",
+ "CREATE TABLE accord_command_store_cache(\n" +
+ " id int,\n" +
+ " scope text,\n" +
+ " queries bigint,\n" +
+ " hits bigint,\n" +
+ " misses bigint,\n" +
+ " PRIMARY KEY (id, scope)" +
+ ')'));
+ }
- protected Epoch(String keyspace)
+ @Override
+ public DataSet data()
{
- super(parse(keyspace, "Accord Epochs",
- "CREATE TABLE accord_epochs(\n" +
- " epoch bigint,\n" +
- " PRIMARY KEY ( (epoch) )" +
- ")"));
+ CommandStores stores = ((AccordService)
AccordService.instance()).node().commandStores();
+ SimpleDataSet result = new SimpleDataSet(metadata());
+
+ List<AccordStateCache.ImmutableStats> commandStats =
+ AsyncChains.getBlockingAndRethrow(stores.map(store ->
((AccordCommandStore) store.commandStore()).commandCache().statsSnapshot()));
+ for (int storeID : stores.ids())
+ addRow(commandStats.get(storeID), result, storeID, "command");
+
+ List<AccordStateCache.ImmutableStats> commandsForKeyStats =
+ AsyncChains.getBlockingAndRethrow(stores.map(store ->
((AccordCommandStore)
store.commandStore()).commandsForKeyCache().statsSnapshot()));
+ for (int storeID : stores.ids())
+ addRow(commandsForKeyStats.get(storeID), result, storeID,
"commands_for_key");
+
+ List<AccordStateCache.ImmutableStats> timestampsForKeyStats =
+ AsyncChains.getBlockingAndRethrow(stores.map(store ->
((AccordCommandStore)
store.commandStore()).timestampsForKeyCache().statsSnapshot()));
+ for (int storeID : stores.ids())
+ addRow(timestampsForKeyStats.get(storeID), result, storeID,
"timestamps_for_key");
Review Comment:
nit: why schedule on the same stores 3 times when you could do this once?
this would be 3x faster to do
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]