bug in mutable publish that could cause an IndexError when a writer is removed in Publish._connection_problem #1749
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#1749
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?
I can reproduce this, at least on the cloud-branch, when I do a
tahoe put --mutable
shortly after the gateway has started.zooko suggests this fix, which I reviewed and approved of:
sounds like a job for
dictutil.DictOfSets
!Seriously though, yes,
DictOfSets
was made for this. It deletes the key from the dict when the last value is removed. I skimmed through publish.py: the only place that populatesself.writers
does so from an unordered set, soself.writers
does not need to retain order, soDictOfSets
is sufficient, andDictOfLists
is not necessary.+1 for using
DictOfSets
.I looked at changing it to use
DictOfSets
, but there are several instances ofself.writers.values()[0][0]
. Currently, that will always pick the first writer added for some arbitrary shnum. If I uselist(self.writers.values()[0])[0]
, that does pass tests, but it is using an arbitrary writer for an arbitrary shnum. Kevan (who wrote this code), is that change ok?Oh, warner is right, the writers are populated based on
self.goal
which is unordered.Note that there are two places where
self.writers
is initialized, and the diff in comment:88747 only changes one of them. (In general there's a lot of duplicated code between theupdate
andpublish
methods of classPublish
.)Attachment fix-1749.darcs.patch (132378 bytes) added
Fix a bug in mutable publish that could cause an IndexError when a writer is removed in Publish._connection_problem. This version uses DictOfSets as suggested by warner. fixes #1749
The existing tests should be sufficient to check that the changed code works, but we probably should have a test for the original issue. Review needed for the fix.
In changeset:635e87bd7b460324: