You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
gRPC client-streaming loads (InsertStream, InsertBidirectional, GraphBatchLoad, TimeSeriesWriteStream) are not listed in the running-query registry, so no terminate reaches them #9875
Sibling of #9838 on the gRPC transport. #9838 made every /ws insert chunk listed in the running-query registry (so list queries sees it and terminate query stops it) whatever its transactionMode. The gRPC client-streaming loads - InsertStream, InsertBidirectional, GraphBatchLoad, TimeSeriesWriteStream - still open no registry entry at all.
GrpcAdmissionInterceptor.isGated requires method.getType().clientSendsOneMessage(), and registration (issue #9689) happens only inside the gated listener, so the same predicate that keeps these RPCs out of the admission gate also keeps them out of the registry. The class javadoc explains why they are not GATED (a refusal between two chunks would have to go through each stream's own error path), but nothing argues they should not be LISTED. grep -n RunningQuery grpcw/src/main/java finds no entry opened in insertStream, insertBidirectional, graphBatchLoad or timeSeriesWriteStream.
Consequence
A gRPC bulk load - which in PER_STREAM-like transaction modes holds one write transaction for the whole stream - is invisible to list queries / SHOW TRANSACTIONS and cannot be stopped by terminate query, the same defect #9838 fixed for /ws.
Suggested fix
Open an entry per stream (or per chunk, bound on the stream's executor thread with RunningQuery.bind()), statement text naming the RPC and its transaction mode; on termination roll back what the stream's mode can still retract and close the call with a terminal status, as /ws now does.
Fixed in #9933. The four gRPC client-streaming loads (InsertStream, InsertBidirectional, GraphBatchLoad, TimeSeriesWriteStream) now appear in list queries from their first chunk to the end of the stream, and terminate query stops them, also while they sit idle between chunks. A terminated load ends with CANCELLED and undoes what its mode allows: an insert rolls back its open transaction or batch (rows already committed under per-row or earlier batches stay), a graph batch drops its buffer, and a time-series stream stops appending. The unary BulkInsert can now also be stopped between rows.
Still open: ending a terminated load that runs inside a client transaction waits on that transaction's thread with no timeout, as every chunk of such a stream already does.
❤️ Thanks for helping make ArcadeDB better! ArcadeDB is free and open source, sustained by its community. If it's useful to you or your company, please consider becoming a sponsor to keep development going.
Activity
fix(#9875): list and stop the gRPC client-streaming loads in the runn…
robfrank commentedon Oct 13, 2026
Fixed in #9933. The four gRPC client-streaming loads (
InsertStream,InsertBidirectional,GraphBatchLoad,TimeSeriesWriteStream) now appear inlist queriesfrom their first chunk to the end of the stream, andterminate querystops them, also while they sit idle between chunks. A terminated load ends withCANCELLEDand undoes what its mode allows: an insert rolls back its open transaction or batch (rows already committed under per-row or earlier batches stay), a graph batch drops its buffer, and a time-series stream stops appending. The unaryBulkInsertcan now also be stopped between rows.Still open: ending a terminated load that runs inside a client transaction waits on that transaction's thread with no timeout, as every chunk of such a stream already does.
❤️ Thanks for helping make ArcadeDB better! ArcadeDB is free and open source, sustained by its community. If it's useful to you or your company, please consider becoming a sponsor to keep development going.
fix(#9875): list and stop the gRPC client-streaming loads in the runn…