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):
gdb.Frame.select(f)
block = gdb.Frame.block(f)
gdb.lookup_symbol('parent_thread_info', block)
p = f.read_var('parent_thread_info')
# No valid parent_thread_info pointer
if not p:
gdb.lookup_symbol('thread_debug_info', block)
tdi = f.read_var('thread_debug_info')
# No valid thread_debug_info
if not tdi:
break
v = p.dereference()
fi = str(v['instance_id_'])
fi = str(tdi['instance_id_'])
if ':' in fi:
fragment_instances[fi.strip('"')].append(thread.num)
break