dcapwell commented on code in PR #3662:
URL: https://github.com/apache/cassandra/pull/3662#discussion_r1838600519


##########
src/java/org/apache/cassandra/db/virtual/AccordDebugKeyspace.java:
##########
@@ -0,0 +1,663 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cassandra.db.virtual;
+
+import java.nio.ByteBuffer;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Sets;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import accord.api.RoutingKey;
+import accord.impl.DurabilityScheduling;
+import accord.impl.progresslog.DefaultProgressLog;
+import accord.impl.progresslog.TxnStateKind;
+import accord.local.CommandStores;
+import accord.local.DurableBefore;
+import accord.local.MaxConflicts;
+import accord.local.Node;
+import accord.local.RedundantBefore;
+import accord.local.RejectBefore;
+import accord.primitives.Routable;
+import accord.primitives.Status;
+import accord.primitives.Timestamp;
+import accord.primitives.Txn;
+import accord.primitives.TxnId;
+import accord.utils.Invariants;
+import accord.utils.async.AsyncChain;
+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.ByteBufferAccessor;
+import org.apache.cassandra.db.marshal.Int32Type;
+import org.apache.cassandra.db.marshal.LongType;
+import org.apache.cassandra.db.marshal.TupleType;
+import org.apache.cassandra.db.marshal.UTF8Type;
+import org.apache.cassandra.db.marshal.UUIDType;
+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.AccordKeyspace;
+import org.apache.cassandra.service.accord.AccordService;
+import org.apache.cassandra.service.accord.AccordStateCache;
+import org.apache.cassandra.service.accord.CommandStoreTxnBlockedGraph;
+import org.apache.cassandra.service.accord.api.AccordRoutingKey;
+import org.apache.cassandra.service.accord.api.AccordRoutingKey.TokenKey;
+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.ByteBufferUtil;
+import org.apache.cassandra.utils.Pair;
+
+import static java.lang.String.format;
+import static java.util.Comparator.comparing;
+import static com.google.common.collect.ImmutableList.toImmutableList;
+import static accord.utils.async.AsyncChains.getBlockingAndRethrow;
+import static org.apache.cassandra.schema.SchemaConstants.VIRTUAL_ACCORD_DEBUG;
+import static org.apache.cassandra.utils.ByteBufferUtil.bytes;
+
+public class AccordDebugKeyspace extends VirtualKeyspace

Review Comment:
   > The coordination table as discussed already I consider to be pretty 
useless,
   
   stated in another comment, I am fine saying we will punt on this table 
closer to the release and drop it for now.  What is running is very useful but 
if you both don't feel we are ready for that we can drop for now.
   
   > The txn block table... But this leaks at least: SaveStatus, ExecuteAt, 
StoreId, but also leaks details about how we manage execution dependencies 
(which has already been drastically modified more than once during development).
   
   this table is critical for someone to answer the question "why did my txn 
timeout", as it shows what is blocking it still.  If we say key vs txn 
dependencies should not be exposed then thats mostly fine as the txn_id matters 
the most... if you are blocked on X you then can ask why is X blocked and keep 
going until you find what is stuck. But if you don't expose save status and 
timestamps then what can you meaningfully say why something is stuck?
   
   So, if you prefer to drop the key vs txn part, I am fine removing in this 
patch. If you feel the txn id and save status is too much, then we have 
problems as I don't know how to answer the above question.
   
   > I did not anyway honestly consider this was intended to be consumed by 
applications, nor was I aware of any controversy about human-only virtual 
tables.
   
   when ever there has been a patch to alter any existing table the same 
conversation comes up about backwards compatibility; once it reaches the public 
API we have to maintain it.  We have 0 tables where this stance doesn't hold 
true today, this patch is arguing to be the first.
   
   As stated in the other thread, I am fine with a view point that these tables 
are for testing so off by default and off in prod, but exist to aid developers 
writing patches or to improve test errors; there is clear value in that.  



-- 
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]

Reply via email to