view tests/svn/encoding.svndump @ 39561:d06834e0f48e

wireprotov2peer: stream decoded responses Previously, wire protocol version 2 would buffer all response data. Only once all data was received did we CBOR decode it and resolve the future associated with the command. This was obviously not desirable. In future commits that introduce large response payloads, this caused significant memory bloat and slowed down client operations due to waiting on the server. This commit refactors the response handling code so that response data can be streamed. Command response objects now contain a buffered CBOR decoder. As new data arrives, it is fed into the decoder. Decoded objects are made available to the generator as they are decoded. Because there is a separate thread processing incoming frames and feeding data into the response object, there is the potential for race conditions when mutating response objects. So a lock has been added to guard access to critical state variables. Because the generator emitting decoded objects needs to wait on those objects to become available, we've added an Event for the generator to wait on so it doesn't busy loop. This does mean there is the potential for deadlocks. And I'm pretty sure they can occur in some scenarios. We already have a handful of TODOs around this. But I've added some more. Fixing this will likely require moving the background thread receiving frames into clienthandler. We likely would have done this anyway when implementing the client bits for the SSH transport. Test output changes because the initial CBOR map holding the overall response state is now always handled internally by the response object. Differential Revision: https://phab.mercurial-scm.org/D4474
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 29 Aug 2018 15:17:11 -0700
parents 0332f8b44e54
children
line wrap: on
line source

SVN-fs-dump-format-version: 2

UUID: afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2009-06-21T16:34:55.835945Z
PROPS-END

Revision-number: 1
Prop-content-length: 112
Content-length: 112

K 7
svn:log
V 10
init projA
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:34:55.909545Z
PROPS-END

Node-path: branches
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Node-path: tags
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Node-path: trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Revision-number: 2
Prop-content-length: 106
Content-length: 106

K 7
svn:log
V 5
hello
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:34:56.150049Z
PROPS-END

Node-path: trunk/à
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Node-path: trunk/à/é
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 2
Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b
Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
Content-length: 12

PROPS-END
d


Node-path: trunk/é
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 2
Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9
Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
Content-length: 12

PROPS-END
e


Revision-number: 3
Prop-content-length: 112
Content-length: 112

K 7
svn:log
V 10
copy files
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:34:59.089402Z
PROPS-END

Node-path: trunk/è
Node-kind: file
Node-action: add
Node-copyfrom-rev: 2
Node-copyfrom-path: trunk/é
Text-copy-source-md5: 9ffbf43126e33be52cd2bf7e01d627f9
Text-copy-source-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff


Node-path: trunk/ù
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 2
Node-copyfrom-path: trunk/à


Node-path: trunk/à
Node-action: delete


Node-path: trunk/é
Node-action: delete


Revision-number: 4
Prop-content-length: 114
Content-length: 114

K 7
svn:log
V 12
remove files
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:00.165121Z
PROPS-END

Node-path: trunk/è
Node-action: delete


Node-path: trunk/ù
Node-action: delete


Revision-number: 5
Prop-content-length: 120
Content-length: 120

K 7
svn:log
V 18
branch to branché
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:03.079138Z
PROPS-END

Node-path: branches/branché
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 4
Node-copyfrom-path: trunk


Revision-number: 6
Prop-content-length: 121
Content-length: 121

K 7
svn:log
V 19
branch to branchée
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:06.060801Z
PROPS-END

Node-path: branches/branchée
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 5
Node-copyfrom-path: branches/branché


Revision-number: 7
Prop-content-length: 110
Content-length: 110

K 7
svn:log
V 9
tag trunk
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:09.061530Z
PROPS-END

Node-path: tags/branché
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 6
Node-copyfrom-path: trunk


Revision-number: 8
Prop-content-length: 114
Content-length: 114

K 7
svn:log
V 12
tag branché
K 10
svn:author
V 7
pmezard
K 8
svn:date
V 27
2009-06-21T16:35:11.068562Z
PROPS-END

Node-path: tags/branchée
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 6
Node-copyfrom-path: branches/branchée