Skip to content

Instantly share code, notes, and snippets.

@keith-turner
Last active October 2, 2024 16:26
Show Gist options
  • Select an option

  • Save keith-turner/5bdcab6959d903f91c044b8c7388537f to your computer and use it in GitHub Desktop.

Select an option

Save keith-turner/5bdcab6959d903f91c044b8c7388537f to your computer and use it in GitHub Desktop.
Notes for getting stack trace of native map code

Made the following changes to native map code to force it to get stuck.

diff --git a/server/native/src/main/c++/nativeMap/org_apache_accumulo_tserver_NativeMap.cc b/server/native/src/main/c++/nativeMap/org_apache_accumulo_tserver_NativeMap.cc
index eb543b936d..4783bd8156 100644
--- a/server/native/src/main/c++/nativeMap/org_apache_accumulo_tserver_NativeMap.cc
+++ b/server/native/src/main/c++/nativeMap/org_apache_accumulo_tserver_NativeMap.cc
@@ -24,6 +24,7 @@
 #include <vector>
 #include <jni.h>
 #include <iostream>
+#include <unistd.h>
 
 #ifdef _POSIX_MEMLOCK
 #include <sys/mman.h>
@@ -80,6 +81,10 @@ JNIEXPORT jlong JNICALL Java_org_apache_accumulo_tserver_NativeMap_createNMI__J_
 
 JNIEXPORT jlong JNICALL Java_org_apache_accumulo_tserver_NativeMap_createNMI__J_3B_3B_3B_3BJZ_3I(JNIEnv *env, jclass cls, jlong nm, jbyteArray r, jbyteArray cf, jbyteArray cq, jbyteArray cv, jlong ts, jboolean del, jintArray lens) {
 
+  while(true) {
+    sleep(1);
+  }
+
   NativeMap *nativeMap = (NativeMap *)nm;
   LocalField row(env, r);
   LocalSubKey sk(env, cf, cq, cv, ts, del);

Ran NativeMapIT and it got stuck, the following is a stack trace of it.

"main" #1 prio=5 os_prio=0 cpu=1168.26ms elapsed=25.70s tid=0x00007f43b801e000 nid=0x207b runnable  [0x00007f43bd170000]
   java.lang.Thread.State: RUNNABLE
	at org.apache.accumulo.tserver.NativeMap.createNMI(Native Method)
	at org.apache.accumulo.tserver.NativeMap$NMIterator.<init>(NativeMap.java:300)

Started gdb with command sudo gdb -p 8313, would not work w/o sudo because of some ptrace permission.

List threads in gdb, 0x207b->8315 so 8315 is the java thread we want.

(gdb) info threads
  Id   Target Id                                          Frame 
* 1    Thread 0x7f43be77b740 (LWP 8313) "java"            __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, expected=8315, futex_word=0x7f43bd174910) at ./nptl/futex-internal.c:57
  2    Thread 0x7f43bd174640 (LWP 8315) "java"            0x00007f43be8637f8 in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7f43bd1707f0, rem=rem@entry=0x7f43bd1707f0)
    at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
  3    Thread 0x7f43bc4fb640 (LWP 8324) "GC Thread#0"     __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0x7f43b80369d0) at ./nptl/futex-internal.c:57

Get the native stack trace.

(gdb) thread 2
[Switching to thread 2 (Thread 0x7f43bd174640 (LWP 8315))]
#0  0x00007f43be8637f8 in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7f43bd1707f0, rem=rem@entry=0x7f43bd1707f0) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78	../sysdeps/unix/sysv/linux/clock_nanosleep.c: No such file or directory.
(gdb) bt
#0  0x00007f43be8637f8 in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7f43bd1707f0, rem=rem@entry=0x7f43bd1707f0) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
#1  0x00007f43be868677 in __GI___nanosleep (req=req@entry=0x7f43bd1707f0, rem=rem@entry=0x7f43bd1707f0) at ../sysdeps/unix/sysv/linux/nanosleep.c:25
#2  0x00007f43be8685ae in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#3  0x00007f43bc016faa in Java_org_apache_accumulo_tserver_NativeMap_createNMI__J_3B_3B_3B_3BJZ_3I (env=<optimized out>, cls=<optimized out>, nm=<optimized out>, r=<optimized out>, cf=<optimized out>, cq=<optimized out>, 
    cv=0x7f43bd170920, ts=9223372036854775807, del=0 '\000', lens=0x7f43bd170900) at nativeMap/org_apache_accumulo_tserver_NativeMap.cc:85
#4  0x00007f43a07dea10 in ?? ()
#5  0x00007f43bd170920 in ?? ()
#6  0x7fffffffffffffff in ?? ()
#7  0x00007f4300000000 in ?? ()
#8  0x00007f43bd170900 in ?? ()
#9  0x00007f4398d0e070 in ?? ()
#10 0x0000000000000000 in ?? ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment