Activity log for bug #819604

Date Who What changed Old value New value Message
2011-08-02 03:30:06 Monty Taylor bug added bug
2011-08-02 10:13:09 Jelmer Vernooij bzr: status New Triaged
2011-08-02 10:13:11 Jelmer Vernooij bzr: status Triaged Confirmed
2011-08-02 10:13:18 Jelmer Vernooij bzr: importance Undecided High
2011-08-02 10:45:50 Jelmer Vernooij bzr: importance High Critical
2011-08-02 10:45:58 Jelmer Vernooij bzr: assignee canonical-bazaar (canonical-bazaar)
2011-08-02 11:28:28 Björn Tillenius bug added subscriber Björn Tillenius
2011-08-09 09:57:25 Martin Pool tags error-reporting hpss launchpad ssh
2011-08-10 04:35:43 Martin Pool nominated for series bzr/2.1
2011-08-10 04:35:43 Martin Pool bug task added bzr/2.1
2011-08-10 04:35:43 Martin Pool nominated for series bzr/2.2
2011-08-10 04:35:43 Martin Pool bug task added bzr/2.2
2011-08-10 04:35:43 Martin Pool nominated for series bzr/2.3
2011-08-10 04:35:43 Martin Pool bug task added bzr/2.3
2011-08-10 04:35:43 Martin Pool nominated for series bzr/2.4
2011-08-10 04:35:43 Martin Pool bug task added bzr/2.4
2011-08-10 04:36:13 Martin Pool bzr: importance Critical High
2011-08-10 04:36:28 Martin Pool bzr/2.1: status New Confirmed
2011-08-10 04:36:31 Martin Pool bzr/2.1: importance Undecided High
2011-08-10 04:36:33 Martin Pool bzr/2.2: status New Confirmed
2011-08-10 04:36:35 Martin Pool bzr/2.2: importance Undecided High
2011-08-10 04:36:37 Martin Pool bzr/2.3: status New Confirmed
2011-08-10 04:36:38 Martin Pool bzr/2.3: importance Undecided High
2011-08-10 04:36:40 Martin Pool bzr/2.4: status New Confirmed
2011-08-10 04:36:42 Martin Pool bzr/2.4: importance Undecided High
2011-08-10 04:36:48 Martin Pool bzr: assignee canonical-bazaar (canonical-bazaar) Martin Pool (mbp)
2011-08-10 04:54:32 Martin Pool description Recent haproxy rollout on launchpad has illuminated a bzrlib bug: 20:29 <lifeless> mtaylor: wgrant: so, this is a bzrlib bug. 20:29 <lifeless> not the holding open 20:29 <lifeless> the handling of the disconnects. 20:29 <lifeless> transports are defined stateless. 20:29 <lifeless> so are RPC calls. 20:31 <lifeless> the haproxy stuff is showing this up very visibly, but the bug pre-existed - bzr didn't seen keepalives, and if ssh wasn't configured to do so it could naturally happen anyhow The following traceback shows the carnage which happens when tarmac holds open its connection around the post-merge hook: Traceback (most recent call last): File "/usr/bin/tarmac", line 6, in <module> main() File "/usr/lib/pymodules/python2.6/tarmac/bin/__init__.py", line 30, in main registry.run(args) File "/usr/lib/pymodules/python2.6/tarmac/bin/registry.py", line 60, in run self._run(args) File "/usr/lib/pymodules/python2.6/tarmac/bin/registry.py", line 48, in _run run_bzr(args) File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 1124, in run_bzr ret = run(*run_argv) File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 689, in run_argv_aliases return self.run(**all_cmd_args) File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 711, in run return self._operation.run_simple(*args, **kwargs) File "/usr/lib/pymodules/python2.6/bzrlib/cleanup.py", line 135, in run_simple self.cleanups, self.func, *args, **kwargs) File "/usr/lib/pymodules/python2.6/bzrlib/cleanup.py", line 165, in _do_with_cleanups result = func(*args, **kwargs) File "/usr/lib/pymodules/python2.6/tarmac/bin/commands.py", line 356, in run self._do_merges(branch_url) File "/usr/lib/pymodules/python2.6/tarmac/bin/commands.py", line 274, in _do_merges authors=source.authors, File "/usr/lib/pymodules/python2.6/tarmac/branch.py", line 163, in authors self.bzr_branch.lock_read() File "/usr/lib/pymodules/python2.6/bzrlib/remote.py", line 2430, in lock_read self.repository.lock_read() File "/usr/lib/pymodules/python2.6/bzrlib/remote.py", line 1021, in lock_read self._real_repository.lock_read() File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 2402, in lock_read repo.lock_read() File "/usr/lib/pymodules/python2.6/bzrlib/remote.py", line 1021, in lock_read self._real_repository.lock_read() File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 2403, in lock_read self._refresh_data() File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 2327, in _refresh_data self._pack_collection.reload_pack_names() File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 2040, in reload_pack_names orig_disk_nodes) = self._diff_pack_names() File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 1906, in _diff_pack_names for index, key, value in self._iter_disk_pack_index(): File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 996, in iter_all_entries if not self.key_count(): File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 1443, in key_count self._get_root_node() File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 940, in _get_root_node self._get_internal_nodes([0]) File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 965, in _get_internal_nodes return self._get_nodes(self._internal_node_cache, node_indexes) File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 957, in _get_nodes found.update(self._get_and_cache_nodes(needed)) File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 734, in _get_and_cache_nodes for node_pos, node in self._read_nodes(sorted(nodes)): File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 1530, in _read_nodes bytes = self._transport.get_bytes(self._name) File "/usr/lib/pymodules/python2.6/bzrlib/transport/remote.py", line 226, in get_bytes resp, response_handler = self._client.call_expecting_body('get', remote) File "/usr/lib/pymodules/python2.6/bzrlib/smart/client.py", line 145, in call_expecting_body method, args, expect_response_body=True) File "/usr/lib/pymodules/python2.6/bzrlib/smart/client.py", line 79, in _call_and_read_response readv_body=readv_body, body_stream=body_stream) File "/usr/lib/pymodules/python2.6/bzrlib/smart/client.py", line 63, in _send_request encoder.call(method, *args) File "/usr/lib/pymodules/python2.6/bzrlib/smart/protocol.py", line 1309, in call self._write_end() File "/usr/lib/pymodules/python2.6/bzrlib/smart/protocol.py", line 1133, in _write_end self.flush() File "/usr/lib/pymodules/python2.6/bzrlib/smart/protocol.py", line 1099, in flush self._real_write_func(''.join(self._buf)) File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 395, in accept_bytes self._accept_bytes(bytes) File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 977, in _accept_bytes self._medium._accept_bytes(bytes) File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 794, in _accept_bytes self._real_medium.accept_bytes(bytes) File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 688, in accept_bytes self._accept_bytes(bytes) File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 861, in _accept_bytes osutils.send_all(self._socket, bytes, self._report_activity) File "/usr/lib/pymodules/python2.6/bzrlib/osutils.py", line 2075, in send_all sent = sock.send(buffer(bytes, sent_total, MAX_SOCKET_CHUNK)) socket.error: [Errno 32] Broken pipe Recent haproxy rollout on launchpad has illuminated a bzrlib bug: 20:29 <lifeless> mtaylor: wgrant: so, this is a bzrlib bug. 20:29 <lifeless> not the holding open 20:29 <lifeless> the handling of the disconnects. 20:29 <lifeless> transports are defined stateless. 20:29 <lifeless> so are RPC calls. 20:31 <lifeless> the haproxy stuff is showing this up very visibly, but the bug pre-existed - bzr didn't seen keepalives, and if ssh wasn't configured to do so it could naturally happen anyhow The following traceback shows the carnage which happens when tarmac holds open its connection around the post-merge hook: Traceback (most recent call last):   File "/usr/bin/tarmac", line 6, in <module>     main()   File "/usr/lib/pymodules/python2.6/tarmac/bin/__init__.py", line 30, in main     registry.run(args)   File "/usr/lib/pymodules/python2.6/tarmac/bin/registry.py", line 60, in run     self._run(args)   File "/usr/lib/pymodules/python2.6/tarmac/bin/registry.py", line 48, in _run     run_bzr(args)   File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 1124, in run_bzr     ret = run(*run_argv)   File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 689, in run_argv_aliases     return self.run(**all_cmd_args)   File "/usr/lib/pymodules/python2.6/bzrlib/commands.py", line 711, in run     return self._operation.run_simple(*args, **kwargs)   File "/usr/lib/pymodules/python2.6/bzrlib/cleanup.py", line 135, in run_simple     self.cleanups, self.func, *args, **kwargs)   File "/usr/lib/pymodules/python2.6/bzrlib/cleanup.py", line 165, in _do_with_cleanups     result = func(*args, **kwargs)   File "/usr/lib/pymodules/python2.6/tarmac/bin/commands.py", line 356, in run     self._do_merges(branch_url)   File "/usr/lib/pymodules/python2.6/tarmac/bin/commands.py", line 274, in _do_merges     authors=source.authors,   File "/usr/lib/pymodules/python2.6/tarmac/branch.py", line 163, in authors     self.bzr_branch.lock_read()   File "/usr/lib/pymodules/python2.6/bzrlib/remote.py", line 2430, in lock_read     self.repository.lock_read()   File "/usr/lib/pymodules/python2.6/bzrlib/remote.py", line 1021, in lock_read     self._real_repository.lock_read()   File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 2402, in lock_read     repo.lock_read()   File "/usr/lib/pymodules/python2.6/bzrlib/remote.py", line 1021, in lock_read     self._real_repository.lock_read()   File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 2403, in lock_read     self._refresh_data()   File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 2327, in _refresh_data     self._pack_collection.reload_pack_names()   File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 2040, in reload_pack_names     orig_disk_nodes) = self._diff_pack_names()   File "/usr/lib/pymodules/python2.6/bzrlib/repofmt/pack_repo.py", line 1906, in _diff_pack_names     for index, key, value in self._iter_disk_pack_index():   File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 996, in iter_all_entries     if not self.key_count():   File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 1443, in key_count     self._get_root_node()   File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 940, in _get_root_node     self._get_internal_nodes([0])   File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 965, in _get_internal_nodes     return self._get_nodes(self._internal_node_cache, node_indexes)   File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 957, in _get_nodes     found.update(self._get_and_cache_nodes(needed))   File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 734, in _get_and_cache_nodes     for node_pos, node in self._read_nodes(sorted(nodes)):   File "/usr/lib/pymodules/python2.6/bzrlib/btree_index.py", line 1530, in _read_nodes     bytes = self._transport.get_bytes(self._name)   File "/usr/lib/pymodules/python2.6/bzrlib/transport/remote.py", line 226, in get_bytes     resp, response_handler = self._client.call_expecting_body('get', remote)   File "/usr/lib/pymodules/python2.6/bzrlib/smart/client.py", line 145, in call_expecting_body     method, args, expect_response_body=True)   File "/usr/lib/pymodules/python2.6/bzrlib/smart/client.py", line 79, in _call_and_read_response     readv_body=readv_body, body_stream=body_stream)   File "/usr/lib/pymodules/python2.6/bzrlib/smart/client.py", line 63, in _send_request     encoder.call(method, *args)   File "/usr/lib/pymodules/python2.6/bzrlib/smart/protocol.py", line 1309, in call     self._write_end()   File "/usr/lib/pymodules/python2.6/bzrlib/smart/protocol.py", line 1133, in _write_end     self.flush()   File "/usr/lib/pymodules/python2.6/bzrlib/smart/protocol.py", line 1099, in flush     self._real_write_func(''.join(self._buf))   File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 395, in accept_bytes     self._accept_bytes(bytes)   File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 977, in _accept_bytes     self._medium._accept_bytes(bytes)   File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 794, in _accept_bytes     self._real_medium.accept_bytes(bytes)   File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 688, in accept_bytes     self._accept_bytes(bytes)   File "/usr/lib/pymodules/python2.6/bzrlib/smart/medium.py", line 861, in _accept_bytes     osutils.send_all(self._socket, bytes, self._report_activity)   File "/usr/lib/pymodules/python2.6/bzrlib/osutils.py", line 2075, in send_all     sent = sock.send(buffer(bytes, sent_total, MAX_SOCKET_CHUNK)) socket.error: [Errno 32] Broken pipe implementation plan: * catch the socket.error and change it into a higher-level "connection closed" error * this might need care to cover both internal/paramiko and external ssh clients; external clients might give different errors on Windows * in the client per-call method, catch this error if it happens while sending the initial request, log a message, and build a new medium(?) object To test it automatically: * make a special medium that raises this error through monkeypatching * use existing ssh tests that start a real server to check that the right error is raised when the Interactive tests are probably a good idea considering the interaction with external systems * start a bzr ssh client from a python shell * kill the server process * send a new request and check that it logs and reconnects
2011-08-10 08:11:46 Martin Pool attachment added test-819604-disconnect.py https://bugs.launchpad.net/bzr/+bug/819604/+attachment/2265528/+files/test-819604-disconnect.py
2011-08-12 08:21:20 Martin Pool summary when an idle ssh transport is interrupted, bzrlib errors when an idle ssh transport is interrupted, bzrlib errors; should reconnect instead
2011-08-19 20:56:17 Francis J. Lacoste bug added subscriber Francis J. Lacoste
2011-09-13 10:03:08 John A Meinel bzr: assignee Martin Pool (mbp) John A Meinel (jameinel)
2011-09-26 11:55:16 John A Meinel bzr/2.1: assignee John A Meinel (jameinel)
2011-09-26 11:55:22 John A Meinel bzr/2.1: status Confirmed In Progress
2011-09-26 11:55:24 John A Meinel bzr: status Confirmed Triaged
2011-09-26 11:55:27 John A Meinel bzr: status Triaged In Progress
2011-10-03 12:39:00 John A Meinel branch linked lp:~jameinel/bzr/2.1-client-reconnect-819604
2011-10-10 13:09:29 Launchpad Janitor branch linked lp:~jameinel/bzr/2.1-client-read-reconnect-819604
2011-10-10 13:39:25 Launchpad Janitor branch linked lp:~jameinel/bzr/2.2-client-reconnect-819604
2011-10-10 13:46:22 Launchpad Janitor branch linked lp:~jameinel/bzr/2.3-client-reconnect-819604
2011-10-10 13:47:33 John A Meinel bzr/2.2: status Confirmed In Progress
2011-10-10 13:47:35 John A Meinel bzr/2.3: status Confirmed In Progress
2011-10-10 13:47:36 John A Meinel bzr/2.4: status Confirmed In Progress
2011-10-10 13:52:55 John A Meinel bzr/2.2: assignee John A Meinel (jameinel)
2011-10-10 13:52:58 John A Meinel bzr/2.3: assignee John A Meinel (jameinel)
2011-10-10 13:53:00 John A Meinel bzr/2.4: assignee John A Meinel (jameinel)
2011-10-10 13:53:04 John A Meinel bzr: milestone 2.5b3
2011-10-10 13:53:07 John A Meinel bzr/2.1: milestone 2.1.5
2011-10-10 13:53:12 John A Meinel bzr/2.2: milestone 2.2.6
2011-10-10 13:53:14 John A Meinel bzr/2.3: milestone 2.3.5
2011-10-10 13:53:16 John A Meinel bzr/2.4: milestone 2.4.2
2011-10-10 13:56:22 Launchpad Janitor branch linked lp:~jameinel/bzr/2.4-client-reconnect-819604
2011-10-10 15:11:38 Launchpad Janitor branch linked lp:~jameinel/bzr/2.5-client-reconnect-819604
2011-10-28 09:09:55 Vincent Ladeuil bzr/2.4: milestone 2.4.2 2.4.3
2011-11-09 14:55:16 Jelmer Vernooij bug added subscriber Jelmer Vernooij
2011-11-10 09:48:42 Vincent Ladeuil bzr: milestone 2.5b3 2.5b4
2011-11-29 11:36:47 Vincent Ladeuil bzr: status In Progress Fix Released
2011-11-29 11:52:05 Vincent Ladeuil bzr/2.4: milestone 2.4.3
2011-11-29 11:52:10 Vincent Ladeuil bzr/2.3: milestone 2.3.5
2011-11-29 11:52:13 Vincent Ladeuil bzr/2.2: milestone 2.2.6
2011-11-29 11:52:15 Vincent Ladeuil bzr/2.1: milestone 2.1.5
2012-12-21 19:43:50 Francis J. Lacoste removed subscriber Francis J. Lacoste