webapi: listen on multiple interfaces/ports #770
Labels
No Label
0.2.0
0.3.0
0.4.0
0.5.0
0.5.1
0.6.0
0.6.1
0.7.0
0.8.0
0.9.0
1.0.0
1.1.0
1.10.0
1.10.1
1.10.2
1.10a2
1.11.0
1.12.0
1.12.1
1.13.0
1.14.0
1.15.0
1.15.1
1.2.0
1.3.0
1.4.1
1.5.0
1.6.0
1.6.1
1.7.0
1.7.1
1.7β
1.8.0
1.8.1
1.8.2
1.8.3
1.8β
1.9.0
1.9.0-s3branch
1.9.0a1
1.9.0a2
1.9.0b1
1.9.1
1.9.2
1.9.2a1
LeastAuthority.com automation
blocker
cannot reproduce
cloud-branch
code
code-dirnodes
code-encoding
code-frontend
code-frontend-cli
code-frontend-ftp-sftp
code-frontend-magic-folder
code-frontend-web
code-mutable
code-network
code-nodeadmin
code-peerselection
code-storage
contrib
critical
defect
dev-infrastructure
documentation
duplicate
enhancement
fixed
invalid
major
minor
n/a
normal
operational
packaging
somebody else's problem
supercritical
task
trivial
unknown
was already fixed
website
wontfix
worksforme
No Milestone
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Reference: tahoe-lafs/trac-2024-07-25#770
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The primary use case is to allow a node to be accessed via either HTTP or HTTPS. Other uses might be for a multihomed host to listen on different ports on each interface, or to listen on a subset of the available interfaces (but more than one), etc.
As discussed in email, let's use a comma-separated list of strports specifications in
web.port=
, since I think commas are not normally a part of strports strings.Shawn pointed out that it's not clear what to do with the
BASEDIR/node.url
file that is written out at node startup when there are multiple web ports. I'd suggest only writing out the URL for the firstweb.port
specification, and documenting the config value to encourage folks to put the cheapest locally-reachable port (e.g. non-encrypted localhost HTTP) as the first value.I've attached a very simple patch that implements multi-port listening. It still needs unit tests, but as I indicated on the mailing list I'm not sure where to implement those. If someone who knows the test infrastructure could give me some guidance, I'd be glad to write some tests.
Attachment multi-listen.dpatch (35022 bytes) added
Very simple multi-listener patch
the patch looks good. testing it is a challenge.. the most obvious approach would be to start a client listening on two separate ports, then make sure that you can hit the welcome page over both of them. But we don't want to use statically-assigned port numbers, because that may collide with some other service running on the same host as the unit tests, or with another instance of the unit tests being run at the same time (out of a different source tree).
I guess what I'd suggest is to have the unit test use
web.port=tcp:0,tcp:0
. That will cause the client to start listening on two (separate) kernel-allocated ports. The first will get written into node.url, where the unit test can read it and verify that it can hit the welcome page. Then, use the following code to reach into the WebishServer and locate the listeners, so we can get both their port numbers, and check that the welcome page is reachable from both (for a total of three separate GETs):I'd put the test in
test_web.Grid
, and take advantage of theclient_config_hooks
argument toset_up_grid
to change theweb.port=
argument on the first client (see test/no_network.py around line 191).Tahoe should allow a node to listen on multiple interfaces/portsto webapi: listen on multiple interfaces/ports