I tried running the code to fetch some records, which runs fine on Windows machine but takes 30 minutes on Linux machine. Originally, I blamed it on a network issue but the network people have assure me it's not a network issue, so I'm at a block here. Could you please verify if it is indeed working properly on Linux?
LocalConfigStorage storage = new LocalConfigStorage(configPath);
SecretsManagerOptions options = new SecretsManagerOptions(storage);
System.out.print("Initializing KeeperSecrets: ");
System.out.println(new java.util.Date());
KeeperSecrets keeperSecrets = SecretsManager.getSecrets(options);
System.out.print("Before making API call: ");
System.out.println(new java.util.Date());
keeperSecrets.getRecords().stream().forEach(Keeper::print);
System.out.print("After at: ");
System.out.println(new java.util.Date());
Below is the thread dump during the run. This is the first time I've ever looked at a thread dump, but it looks like both "Finalizer" #3 daemon and "Reference Handler" #2 daemon are waiting on the same objects they themselves have the locks on?
]$ jstack -l 26856
2022-06-30 11:12:28
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.202-b08 mixed mode):
"Attach Listener" #8 daemon prio=9 os_prio=0 tid=0x00007f792c001000 nid=0x6a6e runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Service Thread" #7 daemon prio=9 os_prio=0 tid=0x00007f79600c2800 nid=0x68f2 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"C1 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007f79600b7800 nid=0x68f1 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007f79600b5000 nid=0x68f0 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007f79600b3000 nid=0x68ef runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f796007f800 nid=0x68ee in Object.wait() [0x00007f7950369000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d6f88ed0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
- locked <0x00000000d6f88ed0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216)
Locked ownable synchronizers:
- None
"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007f796007d000 nid=0x68ed in Object.wait() [0x00007f7964126000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d6f86bf8> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x00000000d6f86bf8> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
Locked ownable synchronizers:
- None
"main" #1 prio=5 os_prio=0 tid=0x00007f7960009800 nid=0x68e9 runnable [0x00007f79663bd000]
java.lang.Thread.State: RUNNABLE
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:255)
at sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.java:424)
at sun.security.provider.NativePRNG$RandomIO.ensureBufferValid(NativePRNG.java:526)
at sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:545)
- locked <0x00000000d77b2598> (a java.lang.Object)
at sun.security.provider.NativePRNG$RandomIO.access$400(NativePRNG.java:331)
at sun.security.provider.NativePRNG$Blocking.engineNextBytes(NativePRNG.java:268)
at java.security.SecureRandom.nextBytes(SecureRandom.java:468)
at com.keepersecurity.secretsManager.core.CryptoUtils.getRandomBytes(CryptoUtils.kt:80)
at com.keepersecurity.secretsManager.core.SecretsManager.generateTransmissionKey(SecretsManager.kt:634)
at com.keepersecurity.secretsManager.core.SecretsManager.fetchAndDecryptSecrets(SecretsManager.kt:842)
at com.keepersecurity.secretsManager.core.SecretsManager.getSecrets(SecretsManager.kt:283)
at com.keepersecurity.secretsManager.core.SecretsManager.getSecrets$default(SecretsManager.kt:282)
at com.keepersecurity.secretsManager.core.SecretsManager.getSecrets(SecretsManager.kt)
at Keeper.main(Keeper.java:18)
Locked ownable synchronizers:
- None
"VM Thread" os_prio=0 tid=0x00007f7960073800 nid=0x68ec runnable
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f796001e800 nid=0x68ea runnable
"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f7960020800 nid=0x68eb runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007f79600c5800 nid=0x68f3 waiting on condition
JNI global references: 5
]$ jstack -F 26856
Attaching to process ID 26856, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08
Deadlock Detection:
No deadlocks found.
Thread 27246: (state = BLOCKED)
Thread 26863: (state = BLOCKED)
Thread 26862: (state = BLOCKED)
- java.lang.Object.wait(long) @bci=0 (Interpreted frame)
- java.lang.ref.ReferenceQueue.remove(long) @bci=59, line=144 (Interpreted frame)
- java.lang.ref.ReferenceQueue.remove() @bci=2, line=165 (Interpreted frame)
- java.lang.ref.Finalizer$FinalizerThread.run() @bci=36, line=216 (Interpreted frame)
Thread 26861: (state = BLOCKED)
- java.lang.Object.wait(long) @bci=0 (Interpreted frame)
- java.lang.Object.wait() @bci=2, line=502 (Interpreted frame)
- java.lang.ref.Reference.tryHandlePending(boolean) @bci=54, line=191 (Interpreted frame)
- java.lang.ref.Reference$ReferenceHandler.run() @bci=1, line=153 (Interpreted frame)
Thread 26857: (state = IN_NATIVE)
- java.io.FileInputStream.readBytes(byte[], int, int) @bci=0 (Interpreted frame)
- java.io.FileInputStream.read(byte[], int, int) @bci=4, line=255 (Interpreted frame)
- sun.security.provider.NativePRNG$RandomIO.readFully(java.io.InputStream, byte[]) @bci=13, line=424 (Interpreted frame)
- sun.security.provider.NativePRNG$RandomIO.ensureBufferValid() @bci=198, line=526 (Interpreted frame)
- sun.security.provider.NativePRNG$RandomIO.implNextBytes(byte[]) @bci=26, line=545 (Interpreted frame)
- sun.security.provider.NativePRNG$RandomIO.access$400(sun.security.provider.NativePRNG$RandomIO, byte[]) @bci=2, line=331 (Interpreted frame)
- sun.security.provider.NativePRNG$Blocking.engineNextBytes(byte[]) @bci=4, line=268 (Interpreted frame)
- java.security.SecureRandom.nextBytes(byte[]) @bci=5, line=468 (Interpreted frame)
- com.keepersecurity.secretsManager.core.CryptoUtils.getRandomBytes(int) @bci=10, line=80 (Interpreted frame)
- com.keepersecurity.secretsManager.core.SecretsManager.generateTransmissionKey(com.keepersecurity.secretsManager.core.KeyValueStorage) @bci=28, line=634 (Interpreted frame)
- com.keepersecurity.secretsManager.core.SecretsManager.fetchAndDecryptSecrets(com.keepersecurity.secretsManager.core.SecretsManagerOptions, java.util.List) @bci=87, line=842 (Interpreted frame)
- com.keepersecurity.secretsManager.core.SecretsManager.getSecrets(com.keepersecurity.secretsManager.core.SecretsManagerOptions, java.util.List) @bci=14, line=283 (Interpreted frame)
- com.keepersecurity.secretsManager.core.SecretsManager.getSecrets$default(com.keepersecurity.secretsManager.core.SecretsManagerOptions, java.util.List, int, java.lang.Object) @bci=12, line=282 (Interpreted frame)
- com.keepersecurity.secretsManager.core.SecretsManager.getSecrets(com.keepersecurity.secretsManager.core.SecretsManagerOptions) @bci=10 (Interpreted frame)
- Keeper.main(java.lang.String[]) @bci=104, line=18 (Interpreted frame)
Thanks.