'pack' does not handle concurrent packing
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Bazaar |
Confirmed
|
Low
|
Unassigned |
Bug Description
The autopacking code was taught how to handle when files go missing, that it should try again from the beginning, to see if someone else did the autopack it was trying to do.
get_record_stream() was also taught how to restart the stream if it can't find something.
However 'Repository.pack()' code does not have this retry code.
The reason we did it on a case-by-case basis is because we need to be careful at what level the operation restarts. eg get_record_stream() should not re-send any records it already sent, autopack should start fresh and read the pack-names and determine if an autopack really needs to happen, etc.
This means that manually running 'bzr pack' will fail if people keep pushing to the repo and trigger an autopack. Though the flip-side is that someone needs to re-run it, and they *could* do that manually.
I only ran into this because I wanted to test the autopack stuff by running "repo1.pack(); repo2.pack()" only to find that it doesn't work. :)
tags: | added: check-for-breezy |