dlmarion commented on issue #3871:
URL: https://github.com/apache/accumulo/issues/3871#issuecomment-1779109779

   > NoClassDefFoundError can be accompanied by serious state changes in the 
JVM. For example, a NoClassDefFoundError can occur because of an exception in a 
static initializer block while trying to load a class. One problem is that that 
static initializer can change some JVM-wide state before it fails, leading to 
an unknowable state. So, even though the class couldn't load, it doesn't mean 
the JVM is in a knowable good state. These errors are fatal because they can 
leave the JVM in a bad, often unknowably bad, state.
   
   Based on 
[this](https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-5.html#jvms-5.5)
 and its preceding sections, I"m not sure that this can happen. It appears that 
when loading a class the object hierarchy is loaded, resolved, and verified 
before any initialization happens.
   
   The problem with the `testClassLoad` method, if I remember correctly what it 
does, is that it reaches out to a random TabletServer to see if it can load a 
class. If a subset of the TabletServers are missing a jar, then this would only 
randomly test the condition, but would always terminate the TabletServer when 
the user scan attempts to scan a hosted Tablet. Your second bullet, checks 
during the setup of the iterator stack, might be a good compromise. If we added 
`LinkageError` to the catch statement 
[here](https://github.com/apache/accumulo/blob/2.1/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/IteratorConfigUtil.java#L229)
 for example.
   
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to