IMPALA-7542: fix find-fragment-instances to find all "root threads"

find-fragment-instances didn't show all the threads
that worked on some fragment instance. It missed the
top-level "root threads" that started working on the
fragment instances.

I modified the get_fragment_instances() function to
check the local ThreadDebugInfo object of the threads
instead of checking the parent thread's ThreadDebugInfo.

I tested it locally on a core file.

Change-Id: I35ae1a6b384b002b343689469f02ceabd84af1b6
Reviewed-on: http://gerrit.cloudera.org:8080/11396
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
This commit is contained in:
Zoltan Borok-Nagy
2018-09-06 12:30:12 +02:00
committed by Impala Public Jenkins
parent 2a274a1597
commit d19f757641

View File

@@ -43,13 +43,12 @@ def get_fragment_instances():
if 'impala::Thread::SuperviseThread' in gdb.Frame.name(f): if 'impala::Thread::SuperviseThread' in gdb.Frame.name(f):
gdb.Frame.select(f) gdb.Frame.select(f)
block = gdb.Frame.block(f) block = gdb.Frame.block(f)
gdb.lookup_symbol('parent_thread_info', block) gdb.lookup_symbol('thread_debug_info', block)
p = f.read_var('parent_thread_info') tdi = f.read_var('thread_debug_info')
# No valid parent_thread_info pointer # No valid thread_debug_info
if not p: if not tdi:
break break
v = p.dereference() fi = str(tdi['instance_id_'])
fi = str(v['instance_id_'])
if ':' in fi: if ':' in fi:
fragment_instances[fi.strip('"')].append(thread.num) fragment_instances[fi.strip('"')].append(thread.num)
break break