Skip to content

STAR-844 Read/Write hooks#250

Merged
jtgrabowski merged 13 commits intods-trunkfrom
STAR-844
Sep 23, 2021
Merged

STAR-844 Read/Write hooks#250
jtgrabowski merged 13 commits intods-trunkfrom
STAR-844

Conversation

@jtgrabowski
Copy link
Copy Markdown

@jtgrabowski jtgrabowski commented Sep 14, 2021

This is a port of

The original QIT utilizes ReadReconciliationObserver in the ReadTracker paths. Only onRow, onPartition and queried callbacks are utilized by CNDB and thus only these methods are ported to Converged Cassandra (CC). The callbacks are a bit different tho:

  • The callback methods are added directly to ReadTracker as CC doesn't have ReadReconciliationObserver. The class was added as a part of NodeSync effort and it is rather superfluous. Porting the whole class would add unnecessary complexity. Adding the required methods directly to the ReadTracker makes the interface cleaner and easier to understand.
  • CC operates on ReplicaPlans instead of plain host lists, that is why queried was changed to onReplicaPlan.

The PR adds empty QIT (with write callback only) + ClientState and then step by step extends it with more callback methods. It is advisable to review commit by commit although some of the code parts were slightly refactored along the way.

@jtgrabowski jtgrabowski force-pushed the STAR-844 branch 3 times, most recently from 5745947 to 8b46c7b Compare September 21, 2021 14:23
@jtgrabowski jtgrabowski marked this pull request as ready for review September 21, 2021 18:26
Other API parts were removed and will be added in the subsequent
commits. Only the "write" API is present for now, it's implementation
is added in the next commit.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, how can this happen? I expected the lwtTacker to be the noop version at the very least?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch, it a leftover from a previous implementation. Fixed.

The ClientState conveys information about the client. It will be
passed to trackers in subsequent commits. Tracker implementations
are free to interpret client's information supplied to StorageProxy.

For the most cases the ClientState instance comes directly from QueryState
but in case of Tracing on replicas this approach in impossible.
Tracing on replicas reconstructs TracingState from Message.Header.
ClientState is mocked there from ClientState.forInternalCalls with
traced keyspace. The keyspace has been added to the Message.Header for
this purpose only.
Writes and batch writes are the simplest case for tracking. The trackers
watch onf for write start and end (success or failure).
So far we do not count transferred rows/partitions only number
of [range] reads.
So far we do not count transferred rows/partitions only
number of read/writes.
Row and Partition tracking is achieved by `ReadTrackingTransformation`
applied to unfiltered row iterators. We apply the transformation
early to prepare for possible tracker extension with
tombstone accounting (that is present in the original QIT).
Don't track the first phase of RFP to avoid extra calls to
ReadTracker callback methods. Only the "final" unfiltered rows
are tracked.
This substitutes `queried` callback method from the original QIT.
OSS C* uses ReplicaPlans instead of plain endpoint lists.
this caused confusion when QIT test was executed with other tests.
In the original patch traced keyspace comes from TracingClientState,
not from ClientState. This commit fixes this mistake.

Additionally add graceful handling nulls for traced keyspace as
adding null values to trace headers results in NPE.
* <p>For writes, the {@link #onWrite} method is only called for the "user write", but if that write trigger either
* secondary index or materialized views updates, those additional update do not trigger additional calls.
*
* <p>The methods of this tracker are called on hot path, so none of them should be blocking, and they should be as
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The "blocking" part is a TPC artifact, there's no need for implementations to be non-blocking here.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed

*/
interface ReadTracker extends Tracker
{
ReadTracker NOOP = new ReadTracker()
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: although these are constants, I find things much easier to read if they are placed after the type is actually defined i.e. at the end rather than at the beginning of the interface/class.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved

metrics.casWriteMetrics.timeouts.mark();
metrics.writeMetricsMap.get(consistencyForPaxos).timeouts.mark();
lwtTracker.onError(wte);
throw new CasWriteTimeoutException(wte.writeType, wte.consistency, wte.received, wte.blockFor, wte.contentions);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious why new exception with the same data rather than just throw wte? This is obfuscating the stack trace of the actual failure.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

true, I don't know why tho.

consistencyLevel,
queryState,
queryStartNanoTime,
readTracker), command);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: command should be on a new line.


return StorageProxy.read(Group.one(this), consistency, queryState, queryStartNanoTime);
Group group = Group.one(this);
QueryInfoTracker.ReadTracker readTracker = StorageProxy.queryTracker().onRead(queryState.getClientState(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like this is not the right place for the onRead, onDone pair. Tracking is said to be StorageProxy-level, and this will catch more calls than the ones going through that. It is also inconsistent with the range query path.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I moved it down to StorageProxy. This doesn't change the logic, though.

*/

UnfilteredPartitionIterator merged = UnfilteredPartitionIterators.merge(results, mergeListener);
UnfilteredPartitionIterator trackedPartitionIterator = Transformation.apply(merged, new ReadTrackingTransformation(resolveReadTracker));
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This has some cost to performance; can we make transformation conditional on there being a tracker or alternatively verify that the cost is negligible?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed for DataResolver and DigestResolver

@jtgrabowski
Copy link
Copy Markdown
Author

@blambov I applied your remarks in the latest commit 8f9cba2.

Copy link
Copy Markdown

@blambov blambov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@sonarqubecloud
Copy link
Copy Markdown

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug B 1 Bug
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 21 Code Smells

79.0% 79.0% Coverage
0.0% 0.0% Duplication

@jtgrabowski jtgrabowski merged commit c32e91f into ds-trunk Sep 23, 2021
jacek-lewandowski pushed a commit that referenced this pull request May 26, 2022
This is a port of
- https://github.com/riptano/bdp/commit/b6f0a18cb832c62f05cdcbd9cdcc2923f2fa727f
- https://github.com/riptano/bdp/pull/19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
jacek-lewandowski pushed a commit that referenced this pull request May 27, 2022
This is a port of
- https://github.com/riptano/bdp/commit/b6f0a18cb832c62f05cdcbd9cdcc2923f2fa727f
- https://github.com/riptano/bdp/pull/19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
jacek-lewandowski pushed a commit that referenced this pull request Oct 17, 2022
This is a port of
- https://github.com/riptano/bdp/commit/b6f0a18cb832c62f05cdcbd9cdcc2923f2fa727f
- https://github.com/riptano/bdp/pull/19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
jacek-lewandowski pushed a commit that referenced this pull request Oct 18, 2022
This is a port of
- https://github.com/riptano/bdp/commit/b6f0a18cb832c62f05cdcbd9cdcc2923f2fa727f
- https://github.com/riptano/bdp/pull/19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
mfleming pushed a commit that referenced this pull request Jul 10, 2023
This is a port of
- https://github.com/riptano/bdp/commit/b6f0a18cb832c62f05cdcbd9cdcc2923f2fa727f
- https://github.com/riptano/bdp/pull/19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
djatnieks pushed a commit that referenced this pull request Jul 24, 2023
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
djatnieks pushed a commit that referenced this pull request Aug 22, 2023
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)
djatnieks pushed a commit that referenced this pull request Sep 12, 2023
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
jacek-lewandowski pushed a commit that referenced this pull request Jan 28, 2024
This is a port of
- https://github.com/riptano/bdp/commit/b6f0a18cb832c62f05cdcbd9cdcc2923f2fa727f
- https://github.com/riptano/bdp/pull/19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)
djatnieks pushed a commit that referenced this pull request Mar 29, 2024
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)
djatnieks pushed a commit that referenced this pull request Apr 1, 2024
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)
djatnieks pushed a commit that referenced this pull request Apr 16, 2024
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)
djatnieks pushed a commit that referenced this pull request Jan 30, 2025
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)
djatnieks pushed a commit that referenced this pull request May 18, 2025
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)
michaelsembwever pushed a commit that referenced this pull request Feb 6, 2026
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)
michaelsembwever pushed a commit that referenced this pull request Feb 10, 2026
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)

 (Rebase of commit 99dbcaa)
michaelsembwever pushed a commit that referenced this pull request Feb 11, 2026
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)

 (Rebase of commit 99dbcaa)
michaelsembwever pushed a commit that referenced this pull request Feb 12, 2026
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)

 (Rebase of commit 99dbcaa)
michaelsembwever pushed a commit that referenced this pull request Feb 14, 2026
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)

 (Rebase of commit 99dbcaa)
michaelsembwever pushed a commit that referenced this pull request Feb 16, 2026
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)

 (Rebase of commit 99dbcaa)
michaelsembwever pushed a commit that referenced this pull request Feb 27, 2026
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)

 (Rebase of commit 99dbcaa)
michaelsembwever pushed a commit that referenced this pull request Mar 2, 2026
This is a port of
- riptano/bdp@b6f0a18
- riptano/bdp#19468

The first change set introduces QueryInfoTracker (QIT) interface and
hooks it to StorageProxy. The second adds ClientState to the interface.

The original QIT utilizes ReadReconciliationObserver in the ReadTracker
paths. Only onRow, onPartition and queried callbacks are utilized by
CNDB and thus only these methods are ported to Converged Cassandra
(CC). The callbacks are a bit different tho:
- The callback methods are added directly to ReadTracker as CC doesn't
have ReadReconciliationObserver. The class was added as a part of
NodeSync effort and it is rather superfluous. Porting the whole class would
add unnecessary complexity. Adding the required methods directly to the
ReadTracker makes the interface cleaner and easier to understand.
- CC operates on ReplicaPlans instead of plain host lists, that is why queried
was changed to onReplicaPlan.

(cherry picked from commit c32e91f)
(cherry picked from commit 093bc63)
(cherry picked from commit efdfa1f)
(cherry picked from commit 2ab888d)
(cherry picked from commit 546bc4a)

STAR-844 Fix rebase conflict in ParamType with CASSANDRA-17981

(cherry picked from commit 12cd994)
(cherry picked from commit 5ce23cf)

 (Rebase of commit 99dbcaa)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants