CARVIEW |
Select Language
HTTP/2 200
date: Mon, 28 Jul 2025 12:04:28 GMT
content-type: text/html; charset=utf-8
cache-control: no-cache
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
referrer-policy: no-referrer-when-downgrade
server-timing: pull_request_layout-fragment;desc="pull_request_layout fragment";dur=427.863614,conversation_content-fragment;desc="conversation_content fragment";dur=724.497077,conversation_sidebar-fragment;desc="conversation_sidebar fragment";dur=327.291069,nginx;desc="NGINX";dur=1.037688,glb;desc="GLB";dur=101.018581
strict-transport-security: max-age=31536000; includeSubdomains; preload
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
x-content-type-options: nosniff
x-frame-options: deny
x-voltron-version: a2eb102
x-xss-protection: 0
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=cgAt0lAqZrWWInW2gS3gR7YNMX2RLvLL7yEWDkZnRZGIAXFKq%2FlHJfn6I9m55WqZ3sKfIdMREXT3YmoI5PoVj0E6u%2FI0aMjMSKThVpwUVVbP1VFIPZWfmzzVlLMacqFapsLOXPo6KRenUCnMouznHPa0MMF2kVdcbzfMKOx0fhc%2BafUUt0lIKZct6W64tc2tmQO3VoQig%2FNZv%2Ffh72H1oJDyLBEheH7J8aOEczbKK52wnhBty1HGWCIABZbh%2FzLgzUgDY8WmcML2HWbQjMuTcQ%3D%3D--jbFeH2LAwctpqRdh--nra28BP6ZypifZSGCZ1jkg%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.292467706.1753704267; Path=/; Domain=github.com; Expires=Tue, 28 Jul 2026 12:04:27 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Tue, 28 Jul 2026 12:04:27 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: ACE8:93466:11A5E8E:1604A73:6887674B
Ensure a single handler manages channel's auto-read by lutovich · Pull Request #528 · neo4j/neo4j-java-driver · GitHub
lutovich
force-pushed
the
1.6-tx-with-nested-queries
branch
from
September 10, 2018 14:16
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 156
Ensure a single handler manages channel's auto-read #528
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
`PullAllResponseHandler` is responsible for receiving a stream of records. Stream might be very large and handler tries to not fetch if fully into memory. It applies a network-level backpressure by disabling/enabling auto-read property of the underlying Netty channel. This property tells channel to not read from the network. Auto-read is disabled when number of queued records goes beyond the threshold. Management of auto-read turned out to be problematic for nested queries within a single transaction. Nested queries result in multiple `PullAllResponseHandler`s being added to the queue of handlers. They will try to manage auto-read concurrently and can sometimes disable it completely. Callers would then be blocked and unable to proceed. This is not a problem for `Session#run()` because every such call ensures there was a logical SYNC and the previous query has completed and its result is buffered. This commit fixes a problem by making only a single installed handler manage the channel's auto-read property. Making sure there only exists a single such handler is the responsibility of `InboundMessageDispatcher`. Auto-read is enabled when new auto-read managing handler is installed. Previous such handler is disabled.
a1504c1
to
5c968ca
Compare
ali-ince
reviewed
Sep 11, 2018
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good @lutovich. I only had one comment regarding the cleanup of field autoReadManagingHandler
.
driver/src/main/java/org/neo4j/driver/internal/async/inbound/InboundMessageDispatcher.java
Show resolved
Hide resolved
Make sure `InboundMessageDispatcher` does not hold on to the last auto-read management handler after it is removed from the queue of all handlers.
ali-ince
approved these changes
Sep 11, 2018
To make sure it does not influence the auto-read status of the channel. Also restore default value of auto-read for channel when such handler is removed. This change is needed to avoid removing a handler that has just disabled auto-read. This is possible when handler receives a RECORD that causes it to disable auto-read and then receives a SUCCESS message, which causes it to be dequeued with auto-read being disabled.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
You can’t perform that action at this time.
PullAllResponseHandler
is responsible for receiving a stream of records. Stream might be very large and handler tries to not fetch if fully into memory. It applies a network-level backpressure by disabling/enabling auto-read property of the underlying Netty channel. This property tells channel to not read from the network. Auto-read is disabled when number of queued records goes beyond the threshold.Management of auto-read turned out to be problematic for nested queries within a single transaction. Nested queries result in multiple
PullAllResponseHandler
s being added to the queue of handlers. They will try to manage auto-read concurrently and can sometimes disable it completely. Callers would then be blocked and unable to proceed. This is not a problem forSession#run()
because every such call ensures there was a logical SYNC and the previous query has completed and its result is buffered.This PR fixes a problem by making only a single installed handler manage the channel's auto-read property. Making sure there only exists a single such handler is the responsibility of
InboundMessageDispatcher
. Auto-read is enabled when new auto-read managing handler is installed. Previous such handler is disabled.Also renamed
InboundMessageDispatcher#queue()
toInboundMessageDispatcher#enqueue()
.Fixes neo4j/neo4j#12033