[ML] Add null checks for C++ log handler (#62238)
It has been observed that if the normalizer process fails to connect to the JVM then this causes a null pointer exception as the JVM tries to close the native process object. The accessors and close methods of the native process class that access the C++ log handler should not assume that it connected correctly.
This commit is contained in:
parent
c88f4174ec
commit
d8288526d9
|
@ -197,10 +197,12 @@ public abstract class AbstractNativeProcess implements NativeProcess {
|
||||||
logTailFuture.get(5, TimeUnit.SECONDS);
|
logTailFuture.get(5, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cppLogHandler().seenFatalError()) {
|
if (cppLogHandler() != null) {
|
||||||
throw ExceptionsHelper.serverError(cppLogHandler().getErrors());
|
if (cppLogHandler().seenFatalError()) {
|
||||||
|
throw ExceptionsHelper.serverError(cppLogHandler().getErrors());
|
||||||
|
}
|
||||||
|
LOGGER.debug("[{}] {} process exited", jobId, getName());
|
||||||
}
|
}
|
||||||
LOGGER.debug("[{}] {} process exited", jobId, getName());
|
|
||||||
} catch (ExecutionException | TimeoutException e) {
|
} catch (ExecutionException | TimeoutException e) {
|
||||||
LOGGER.warn(new ParameterizedMessage("[{}] Exception closing the running {} process", jobId, getName()), e);
|
LOGGER.warn(new ParameterizedMessage("[{}] Exception closing the running {} process", jobId, getName()), e);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
|
@ -268,18 +270,20 @@ public abstract class AbstractNativeProcess implements NativeProcess {
|
||||||
@Override
|
@Override
|
||||||
public boolean isProcessAlive() {
|
public boolean isProcessAlive() {
|
||||||
// Sanity check: make sure the process hasn't terminated already
|
// Sanity check: make sure the process hasn't terminated already
|
||||||
return cppLogHandler().hasLogStreamEnded() == false;
|
return cppLogHandler() != null && cppLogHandler().hasLogStreamEnded() == false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isProcessAliveAfterWaiting() {
|
public boolean isProcessAliveAfterWaiting() {
|
||||||
cppLogHandler().waitForLogStreamClose(Duration.ofMillis(45));
|
if (cppLogHandler() != null) {
|
||||||
|
cppLogHandler().waitForLogStreamClose(Duration.ofMillis(45));
|
||||||
|
}
|
||||||
return isProcessAlive();
|
return isProcessAlive();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String readError() {
|
public String readError() {
|
||||||
return cppLogHandler().getErrors();
|
return (cppLogHandler() == null) ? "" : cppLogHandler().getErrors();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String jobId() {
|
protected String jobId() {
|
||||||
|
|
Loading…
Reference in New Issue