From 9b5978d11dfdf6d537376a5abc53558c96767d0a Mon Sep 17 00:00:00 2001 From: Nathaniel Bauernfeind Date: Sat, 12 Aug 2023 10:43:51 -0600 Subject: [PATCH 1/2] Log User-Friendly Error When AutoComplete is not Available --- .../console/ConsoleServiceGrpcImpl.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java b/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java index 3fec26cab7b..78ef27eb2a5 100644 --- a/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java +++ b/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java @@ -7,6 +7,7 @@ import com.google.rpc.Code; import io.deephaven.base.LockFreeArrayQueue; import io.deephaven.configuration.Configuration; +import io.deephaven.engine.context.QueryScope; import io.deephaven.engine.table.Table; import io.deephaven.engine.table.impl.perf.QueryPerformanceNugget; import io.deephaven.engine.table.impl.perf.QueryPerformanceRecorder; @@ -61,8 +62,10 @@ public class ConsoleServiceGrpcImpl extends ConsoleServiceGrpc.ConsoleServiceImp public static final boolean REMOTE_CONSOLE_DISABLED = Configuration.getInstance().getBooleanWithDefault("deephaven.console.disable", false); + private static final String DISABLE_AUTOCOMPLETE_FLAG = "deephaven.console.autocomplete.disable"; public static final boolean AUTOCOMPLETE_DISABLED = - Configuration.getInstance().getBooleanWithDefault("deephaven.console.autocomplete.disable", false); + Configuration.getInstance().getBooleanWithDefault(DISABLE_AUTOCOMPLETE_FLAG, false); + public static final boolean QUIET_AUTOCOMPLETE_ERRORS = Configuration.getInstance().getBooleanWithDefault("deephaven.console.autocomplete.quiet", true); @@ -75,6 +78,8 @@ public class ConsoleServiceGrpcImpl extends ConsoleServiceGrpc.ConsoleServiceImp public static final int SUBSCRIBE_TO_LOGS_BUFFER_SIZE = Configuration.getInstance().getIntegerWithDefault(SUBSCRIBE_TO_LOGS_BUFFER_SIZE_PROP, 32768); + private static final AtomicBoolean ALREADY_WARNED_ABOUT_NO_AUTOCOMPLETE = new AtomicBoolean(); + private final TicketRouter ticketRouter; private final SessionService sessionService; private final Provider scriptSessionProvider; @@ -296,7 +301,7 @@ public void bindTableToVariable( public StreamObserver autoCompleteStream( @NotNull final StreamObserver responseObserver) { final SessionState session = sessionService.getCurrentSession(); - if (AUTOCOMPLETE_DISABLED) { + if (AUTOCOMPLETE_DISABLED || ALREADY_WARNED_ABOUT_NO_AUTOCOMPLETE.get()) { return new NoopAutoCompleteObserver(session, responseObserver); } if (PythonDeephavenSession.SCRIPT_TYPE.equals(scriptSessionProvider.get().scriptType())) { @@ -307,7 +312,15 @@ public StreamObserver autoCompleteStream( "from deephaven_internal.auto_completer import jedi_settings ; jedi_settings.set_scope(globals())"); settings[0] = (PyObject) scriptSession.getVariable("jedi_settings"); } catch (Exception err) { - log.error().append("Error trying to enable jedi autocomplete").append(err).endl(); + if (err instanceof QueryScope.MissingVariableException) { + if (!ALREADY_WARNED_ABOUT_NO_AUTOCOMPLETE.getAndSet(true)) { + log.error().append("Autocomplete package not found; disabling autocomplete.").endl(); + log.error().append("Add the jvm flag '-D").append(DISABLE_AUTOCOMPLETE_FLAG) + .append("=true' to disable this message.").endl(); + } + } else { + log.error().append("Error trying to enable jedi autocomplete").append(err).endl(); + } } boolean canJedi = settings[0] != null && settings[0].call("can_jedi").getBooleanValue(); log.info().append(canJedi ? "Using jedi for python autocomplete" From e9a13da63e94d8dbcc57822aa93226106188c57f Mon Sep 17 00:00:00 2001 From: Nathaniel Bauernfeind Date: Tue, 9 Jan 2024 16:33:04 -0700 Subject: [PATCH 2/2] Devin's feedback --- .../server/console/ConsoleServiceGrpcImpl.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java b/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java index 78ef27eb2a5..864d1c1ad51 100644 --- a/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java +++ b/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java @@ -312,14 +312,12 @@ public StreamObserver autoCompleteStream( "from deephaven_internal.auto_completer import jedi_settings ; jedi_settings.set_scope(globals())"); settings[0] = (PyObject) scriptSession.getVariable("jedi_settings"); } catch (Exception err) { - if (err instanceof QueryScope.MissingVariableException) { - if (!ALREADY_WARNED_ABOUT_NO_AUTOCOMPLETE.getAndSet(true)) { - log.error().append("Autocomplete package not found; disabling autocomplete.").endl(); - log.error().append("Add the jvm flag '-D").append(DISABLE_AUTOCOMPLETE_FLAG) - .append("=true' to disable this message.").endl(); - } - } else { - log.error().append("Error trying to enable jedi autocomplete").append(err).endl(); + if (!ALREADY_WARNED_ABOUT_NO_AUTOCOMPLETE.getAndSet(true)) { + log.error().append("Autocomplete package not found; disabling autocomplete.").endl(); + log.error().append("Do you need to install the autocomplete package?").endl(); + log.error().append(" pip install deephaven-core[autocomplete]==").endl(); + log.error().append("Add the jvm flag '-D").append(DISABLE_AUTOCOMPLETE_FLAG) + .append("=true' to disable this message.").endl(); } } boolean canJedi = settings[0] != null && settings[0].call("can_jedi").getBooleanValue();