Rev 5481: Merge lp:~vila/bzr/551391-log-memory-usage fixing NEWS entry in http://bazaar.launchpad.net/~vila/bzr/integration/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Mon Oct 11 15:18:33 BST 2010
At http://bazaar.launchpad.net/~vila/bzr/integration/
------------------------------------------------------------
revno: 5481 [merge]
revision-id: v.ladeuil+lp at free.fr-20101011141833-v2iqkdnafk2tioxb
parent: pqm at pqm.ubuntu.com-20101011114147-eunz0zgx5yjftom0
parent: v.ladeuil+lp at free.fr-20101011095316-grl1yn3o5j7uo419
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: trunk
timestamp: Mon 2010-10-11 16:18:33 +0200
message:
Merge lp:~vila/bzr/551391-log-memory-usage fixing NEWS entry
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/help_topics/en/debug-flags.txt debugflags.txt-20090312050229-rdspqbqq4fzbjtpe-1
bzrlib/tests/features.py features.py-20090820042958-jglgza3wrn03ha9e-1
bzrlib/tests/test_trace.py testtrace.py-20051110225523-a21117fc7a07eeff
bzrlib/trace.py trace.py-20050309040759-c8ed824bdcd4748a
-------------- next part --------------
=== modified file 'NEWS'
--- a/NEWS 2010-10-11 10:27:23 +0000
+++ b/NEWS 2010-10-11 14:18:33 +0000
@@ -16,6 +16,10 @@
New Features
************
+* Add ``-Dmem_dump`` debug flag, which uses meliae to dump memory to
+ a file upon an out of memory error.
+ (Karl Bielefeldt, #551391)
+
Bug Fixes
*********
=== modified file 'bzrlib/help_topics/en/debug-flags.txt'
--- a/bzrlib/help_topics/en/debug-flags.txt 2010-01-05 04:30:07 +0000
+++ b/bzrlib/help_topics/en/debug-flags.txt 2010-10-06 03:20:28 +0000
@@ -25,6 +25,7 @@
-Dknit Trace knit operations.
-Dlock Trace when lockdir locks are taken or released.
-Dprogress Trace progress bar operations.
+-Dmem_dump Dump memory to a file upon an out of memory error.
-Dmerge Emit information for debugging merges.
-Dno_apport Don't use apport to report crashes.
-Dno_activity Don't show transport activity indicator in progress bar.
=== modified file 'bzrlib/tests/features.py'
--- a/bzrlib/tests/features.py 2010-09-27 19:31:45 +0000
+++ b/bzrlib/tests/features.py 2010-10-11 09:53:16 +0000
@@ -38,12 +38,14 @@
not_running_as_root = _NotRunningAsRoot()
+
apport = tests.ModuleAvailableFeature('apport')
+meliae = tests.ModuleAvailableFeature('meliae')
paramiko = tests.ModuleAvailableFeature('paramiko')
pycurl = tests.ModuleAvailableFeature('pycurl')
pywintypes = tests.ModuleAvailableFeature('pywintypes')
+sphinx = tests.ModuleAvailableFeature('sphinx')
subunit = tests.ModuleAvailableFeature('subunit')
-sphinx = tests.ModuleAvailableFeature('sphinx')
class _BackslashDirSeparatorFeature(tests.Feature):
=== modified file 'bzrlib/tests/test_trace.py'
--- a/bzrlib/tests/test_trace.py 2010-06-26 01:07:16 +0000
+++ b/bzrlib/tests/test_trace.py 2010-10-11 09:53:16 +0000
@@ -26,6 +26,7 @@
import tempfile
from bzrlib import (
+ debug,
errors,
trace,
)
@@ -81,7 +82,18 @@
pass
msg = _format_exception()
self.assertEquals(msg,
- "bzr: out of memory\n")
+ "bzr: out of memory\nUse -Dmem_dump to dump memory to a file.\n")
+
+ def test_format_mem_dump(self):
+ self.requireFeature(features.meliae)
+ debug.debug_flags.add('mem_dump')
+ try:
+ raise MemoryError()
+ except MemoryError:
+ pass
+ msg = _format_exception()
+ self.assertStartsWith(msg,
+ "bzr: out of memory\nMemory dumped to ")
def test_format_os_error(self):
try:
=== modified file 'bzrlib/trace.py'
--- a/bzrlib/trace.py 2010-06-28 02:41:22 +0000
+++ b/bzrlib/trace.py 2010-10-05 23:30:18 +0000
@@ -59,6 +59,7 @@
import os
import sys
import time
+import tempfile
from bzrlib.lazy_import import lazy_import
lazy_import(globals(), """
@@ -469,6 +470,25 @@
note(line)
break
+def _dump_memory_usage(err_file):
+ try:
+ try:
+ fd, name = tempfile.mkstemp(prefix="bzr_memdump", suffix=".json")
+ dump_file = os.fdopen(fd, 'w')
+ from meliae import scanner
+ scanner.dump_gc_objects(dump_file)
+ err_file.write("Memory dumped to %s\n" % name)
+ except ImportError:
+ err_file.write("Dumping memory requires meliae module.\n")
+ log_exception_quietly()
+ except:
+ err_file.write("Exception while dumping memory.\n")
+ log_exception_quietly()
+ finally:
+ if dump_file is not None:
+ dump_file.close()
+ elif fd is not None:
+ os.close(fd)
def report_exception(exc_info, err_file):
"""Report an exception to err_file (typically stderr) and to .bzr.log.
@@ -492,6 +512,10 @@
return errors.EXIT_ERROR
elif isinstance(exc_object, MemoryError):
err_file.write("bzr: out of memory\n")
+ if 'mem_dump' in debug.debug_flags:
+ _dump_memory_usage(err_file)
+ else:
+ err_file.write("Use -Dmem_dump to dump memory to a file.\n")
return errors.EXIT_ERROR
elif isinstance(exc_object, ImportError) \
and str(exc_object).startswith("No module named "):
More information about the bazaar-commits
mailing list