From 3a96501e2f1a1254b8c594afa198c0f59d50d8cb Mon Sep 17 00:00:00 2001 From: Devin Smith Date: Wed, 7 Dec 2022 13:27:03 -0800 Subject: [PATCH 1/9] Fix ServiceAuthWiring logging of full method name (#3165) --- .../io/deephaven/auth/ServiceAuthWiring.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/authorization/src/main/java/io/deephaven/auth/ServiceAuthWiring.java b/authorization/src/main/java/io/deephaven/auth/ServiceAuthWiring.java index 2534f56cf80..a498b1b08ff 100644 --- a/authorization/src/main/java/io/deephaven/auth/ServiceAuthWiring.java +++ b/authorization/src/main/java/io/deephaven/auth/ServiceAuthWiring.java @@ -57,8 +57,7 @@ class AuthorizingServerCallHandler implements ServerCallHandler messageReceivedCallback; private final boolean mustHaveRequest; - private final String serviceName; - private final String methodName; + private final String fullMethodName; public AuthorizingServerCallHandler( final ServerCallHandler delegate, @@ -69,9 +68,7 @@ public AuthorizingServerCallHandler( this.callStartedCallback = callStartedCallback; this.messageReceivedCallback = messageReceivedCallback; mustHaveRequest = method.getMethodDescriptor().getType().clientSendsOneMessage(); - serviceName = method.getMethodDescriptor().getServiceName(); - methodName = method.getMethodDescriptor().getFullMethodName(); - + fullMethodName = method.getMethodDescriptor().getFullMethodName(); // validate that we have handlers for the methods we will try to invoke if (!mustHaveRequest) { Assert.neqNull(callStartedCallback, "callStartedCallback"); @@ -116,20 +113,16 @@ private boolean validateAuth( Status.Code status = sre.getStatus().getCode(); switch (status) { case UNAUTHENTICATED: - log.info().append(serviceName).append(".").append(methodName) - .append(": request unauthenticated").endl(); + log.info().append(fullMethodName).append(": request unauthenticated").endl(); break; case PERMISSION_DENIED: - log.info().append(serviceName).append(".").append(methodName) - .append(": request unauthorized").endl(); + log.info().append(fullMethodName).append(": request unauthorized").endl(); break; case RESOURCE_EXHAUSTED: - log.info().append(serviceName).append(".").append(methodName) - .append(": request throttled").endl(); + log.info().append(fullMethodName).append(": request throttled").endl(); break; default: - log.error().append(serviceName).append(".").append(methodName) - .append(": authorization failed: ").append(err).endl(); + log.error().append(fullMethodName).append(": authorization failed: ").append(err).endl(); } quietlyCloseCall(call, sre.getStatus(), sre.getTrailers()); From 110aecadd68b80509bdca960f62d08722ade844e Mon Sep 17 00:00:00 2001 From: Jianfeng Mao <4297243+jmao-denver@users.noreply.github.com> Date: Wed, 7 Dec 2022 16:39:31 -0700 Subject: [PATCH 2/9] Always set the vectorizable attr of PyCW (#3166) --- .../io/deephaven/engine/table/impl/lang/QueryLanguageParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/lang/QueryLanguageParser.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/lang/QueryLanguageParser.java index 61f5bd77e93..1cc52bdb631 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/lang/QueryLanguageParser.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/lang/QueryLanguageParser.java @@ -1861,6 +1861,7 @@ private void prepareVectorization(MethodCallExpr n, Expression[] expressions, Py if (pyCallableWrapper.isVectorized()) { throw ex; } + pyCallableWrapper.setVectorizable(false); if (log.isDebugEnabled()) { log.debug().append("Python function call ").append(n.toString()).append(" is not auto-vectorizable:") .append(ex.getMessage()).endl(); From e5cc40fb523a5df587080d18610afdc7ff24038f Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Thu, 8 Dec 2022 14:47:44 -0600 Subject: [PATCH 3/9] Safely close autocomplete streams on the server to avoid logspam (#3169) Fixes #3162 --- .../io/deephaven/server/console/ConsoleServiceGrpcImpl.java | 4 +--- .../server/console/completer/JavaAutoCompleteObserver.java | 4 +--- .../server/console/completer/PythonAutoCompleteObserver.java | 4 +--- 3 files changed, 3 insertions(+), 9 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 50df007da38..d6393c7bc5c 100644 --- a/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java +++ b/server/src/main/java/io/deephaven/server/console/ConsoleServiceGrpcImpl.java @@ -302,9 +302,7 @@ public void onError(Throwable t) { @Override public void onCompleted() { // just hang up too, browser will reconnect if interested - synchronized (responseObserver) { - responseObserver.onCompleted(); - } + safelyExecuteLocked(responseObserver, responseObserver::onCompleted); } } diff --git a/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java b/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java index 831f583e2f9..8cb4933f849 100644 --- a/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java +++ b/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java @@ -167,8 +167,6 @@ public void onError(Throwable t) { @Override public void onCompleted() { // just hang up too, browser will reconnect if interested - synchronized (responseObserver) { - responseObserver.onCompleted(); - } + safelyExecuteLocked(responseObserver, responseObserver::onCompleted); } } diff --git a/server/src/main/java/io/deephaven/server/console/completer/PythonAutoCompleteObserver.java b/server/src/main/java/io/deephaven/server/console/completer/PythonAutoCompleteObserver.java index e779418ab37..99068db893a 100644 --- a/server/src/main/java/io/deephaven/server/console/completer/PythonAutoCompleteObserver.java +++ b/server/src/main/java/io/deephaven/server/console/completer/PythonAutoCompleteObserver.java @@ -232,8 +232,6 @@ public void onError(Throwable t) { @Override public void onCompleted() { // just hang up too, browser will reconnect if interested - synchronized (responseObserver) { - responseObserver.onCompleted(); - } + safelyExecuteLocked(responseObserver, responseObserver::onCompleted); } } From fe8ce03871da11704d905f8f22cb6980bd75b43a Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Fri, 9 Dec 2022 14:07:51 -0600 Subject: [PATCH 4/9] Associate java autocomplete data with the session, rather than stream (#3173) This fixes a regression introduced in #3032 where state was tracked per-stream only, which meant that when the client cleaned up temporarily unused streams, that state would be lost the next time the user started typing again. --- .../console/completer/JavaAutoCompleteObserver.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java b/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java index 8cb4933f849..c6adce044a6 100644 --- a/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java +++ b/server/src/main/java/io/deephaven/server/console/completer/JavaAutoCompleteObserver.java @@ -20,7 +20,9 @@ import io.grpc.stub.StreamObserver; import java.util.Collection; +import java.util.Collections; import java.util.Map; +import java.util.WeakHashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -34,11 +36,12 @@ public class JavaAutoCompleteObserver extends SessionCloseableObserver { private static final Logger log = LoggerFactory.getLogger(JavaAutoCompleteObserver.class); - private final CompletionParser parser; + /** Track parsers by their session state, to ensure each session has its own, singleton, parser */ + private static final Map parsers = Collections.synchronizedMap(new WeakHashMap<>()); - private final Map parsers = new ConcurrentHashMap<>(); + private final CompletionParser parser; - private CompletionParser ensureParserForSession(SessionState session) { + private static CompletionParser ensureParserForSession(SessionState session) { return parsers.computeIfAbsent(session, s -> { CompletionParser parser = new CompletionParser(); s.addOnCloseCallback(() -> { @@ -166,7 +169,7 @@ public void onError(Throwable t) { @Override public void onCompleted() { - // just hang up too, browser will reconnect if interested + // just hang up too, browser will reconnect if interested, and we'll maintain state if the session isn't gc'd safelyExecuteLocked(responseObserver, responseObserver::onCompleted); } } From bac41e1cce2c855db84efda0e8bf10c7e92b950c Mon Sep 17 00:00:00 2001 From: Ryan Caudy Date: Sat, 10 Dec 2022 17:13:36 -0500 Subject: [PATCH 5/9] Correct handling for checkInitiateOperation propagation to parallel jobs, fixing parallel partitioned transform (#3179) --- .../select/analyzers/SelectColumnLayer.java | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/analyzers/SelectColumnLayer.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/analyzers/SelectColumnLayer.java index a9a12b0942f..7227c38f7ec 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/analyzers/SelectColumnLayer.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/analyzers/SelectColumnLayer.java @@ -41,7 +41,7 @@ final public class SelectColumnLayer extends SelectOrViewColumnLayer { /** * The same reference as super.columnSource, but as a WritableColumnSource and maybe reinterpretted */ - private final WritableColumnSource writableSource; + private final WritableColumnSource writableSource; /** * The execution context the select column layer was constructed in @@ -70,12 +70,12 @@ final public class SelectColumnLayer extends SelectOrViewColumnLayer { private ChunkSource.WithPrev chunkSource; SelectColumnLayer(RowSet parentRowSet, SelectAndViewAnalyzer inner, String name, SelectColumn sc, - WritableColumnSource ws, WritableColumnSource underlying, + WritableColumnSource ws, WritableColumnSource underlying, String[] deps, ModifiedColumnSet mcsBuilder, boolean isRedirected, boolean flattenedResult, boolean alreadyFlattenedSources) { super(inner, name, sc, ws, underlying, deps, mcsBuilder); this.parentRowSet = parentRowSet; - this.writableSource = (WritableColumnSource) ReinterpretUtils.maybeConvertToPrimitive(ws); + this.writableSource = (WritableColumnSource) ReinterpretUtils.maybeConvertToPrimitive(ws); this.isRedirected = isRedirected; this.executionContext = ExecutionContext.getContextToRecord(); @@ -139,6 +139,11 @@ public void onAllRequiredColumnsCompleted() { // If we have shifts, that makes everything nasty; so we do not want to deal with it final boolean hasShifts = upstream.shifted().nonempty(); + final boolean checkTableOperations = + UpdateGraphProcessor.DEFAULT.getCheckTableOperations() + && !UpdateGraphProcessor.DEFAULT.sharedLock().isHeldByCurrentThread() + && !UpdateGraphProcessor.DEFAULT.exclusiveLock().isHeldByCurrentThread(); + if (canParallelizeThisColumn && jobScheduler.threadCount() > 1 && !hasShifts && ((resultTypeIsTable && totalSize > 0) || totalSize > QueryTable.MINIMUM_PARALLEL_SELECT_ROWS)) { @@ -180,12 +185,14 @@ public void onAllRequiredColumnsCompleted() { jobScheduler.submit( executionContext, () -> prepareParallelUpdate(jobScheduler, upstream, toClear, helper, - liveResultOwner, onCompletion, this::onError, updates), + liveResultOwner, onCompletion, this::onError, updates, + checkTableOperations), SelectColumnLayer.this, this::onError); } else { jobScheduler.submit( executionContext, - () -> doSerialApplyUpdate(upstream, toClear, helper, liveResultOwner, onCompletion), + () -> doSerialApplyUpdate(upstream, toClear, helper, liveResultOwner, onCompletion, + checkTableOperations), SelectColumnLayer.this, this::onError); } } @@ -195,17 +202,13 @@ public void onAllRequiredColumnsCompleted() { private void prepareParallelUpdate(final JobScheduler jobScheduler, final TableUpdate upstream, final RowSet toClear, final UpdateHelper helper, @Nullable final LivenessNode liveResultOwner, final SelectLayerCompletionHandler onCompletion, final Consumer onError, - final List splitUpdates) { + final List splitUpdates, final boolean checkTableOperations) { // we have to do removal and previous initialization before we can do any of the actual filling in multiple // threads to avoid concurrency problems with our destination column sources doEnsureCapacity(); prepareSourcesForParallelPopulation(upstream); - final boolean checkTableOperations = - UpdateGraphProcessor.DEFAULT.getCheckTableOperations() - && !UpdateGraphProcessor.DEFAULT.sharedLock().isHeldByCurrentThread() - && !UpdateGraphProcessor.DEFAULT.exclusiveLock().isHeldByCurrentThread(); final AtomicInteger divisions = new AtomicInteger(splitUpdates.size()); long destinationOffset = 0; @@ -226,11 +229,16 @@ private void prepareParallelUpdate(final JobScheduler jobScheduler, final TableU } private void doSerialApplyUpdate(final TableUpdate upstream, final RowSet toClear, final UpdateHelper helper, - @Nullable final LivenessNode liveResultOwner, final SelectLayerCompletionHandler onCompletion) { + @Nullable final LivenessNode liveResultOwner, final SelectLayerCompletionHandler onCompletion, + final boolean checkTableOperations) { doEnsureCapacity(); - SystemicObjectTracker.executeSystemically(isSystemic, - () -> doApplyUpdate(upstream, helper, liveResultOwner, 0)); - + final boolean oldCheck = UpdateGraphProcessor.DEFAULT.setCheckTableOperations(checkTableOperations); + try { + SystemicObjectTracker.executeSystemically(isSystemic, + () -> doApplyUpdate(upstream, helper, liveResultOwner, 0)); + } finally { + UpdateGraphProcessor.DEFAULT.setCheckTableOperations(oldCheck); + } if (!isRedirected) { clearObjectsAtThisLevel(toClear); } From a3e4ccd8f201620996dea3e85ee1e6f9539b216b Mon Sep 17 00:00:00 2001 From: Ryan Caudy Date: Sun, 11 Dec 2022 16:14:47 -0500 Subject: [PATCH 6/9] SelectColumnLayer to parallelization fixes (#3181) * SelectColumnLayer to only allow cross-column parallelization if its SelectColumn is stateless * Change SelectColumnLayer to test the reinterpreted writable source, rather than the input, for WritableSourceWithPrepareForParallelPopulation.supportsParallelPopulation --- .../table/impl/select/analyzers/SelectColumnLayer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/analyzers/SelectColumnLayer.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/analyzers/SelectColumnLayer.java index 7227c38f7ec..79adfb55261 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/select/analyzers/SelectColumnLayer.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/select/analyzers/SelectColumnLayer.java @@ -88,7 +88,8 @@ final public class SelectColumnLayer extends SelectOrViewColumnLayer { // We can only parallelize this column if we are not redirected, our destination provides ensure previous, and // the select column is stateless canParallelizeThisColumn = !isRedirected - && WritableSourceWithPrepareForParallelPopulation.supportsParallelPopulation(ws) && sc.isStateless(); + && WritableSourceWithPrepareForParallelPopulation.supportsParallelPopulation(writableSource) + && sc.isStateless(); // If we were created on a systemic thread, we want to be sure to make sure that any updates are also // applied systemically. @@ -576,6 +577,6 @@ public LogOutput append(LogOutput logOutput) { @Override public boolean allowCrossColumnParallelization() { - return inner.allowCrossColumnParallelization(); + return selectColumn.isStateless() && inner.allowCrossColumnParallelization(); } } From 17033c023f3cb7838c678f0e67aaf0fa1ff0f296 Mon Sep 17 00:00:00 2001 From: Devin Smith Date: Mon, 12 Dec 2022 10:17:42 -0800 Subject: [PATCH 7/9] Fix jedi SAFE mode (#3176) Fixes #3177 --- .../deephaven_internal/auto_completer/_completer.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/py/server/deephaven_internal/auto_completer/_completer.py b/py/server/deephaven_internal/auto_completer/_completer.py index 32d1f5304c2..485be4233e5 100644 --- a/py/server/deephaven_internal/auto_completer/_completer.py +++ b/py/server/deephaven_internal/auto_completer/_completer.py @@ -79,11 +79,15 @@ def do_completion( # run jedi txt = self.get_doc(uri) - # The Script completer is static analysis only, so we should actually be feeding it a whole document at once. - completer = Script if self.__mode == Mode.SAFE else Interpreter + completer = ( + # The Script completer is static analysis only, so we should actually be feeding it a whole document at once. + Script(txt) + if self.__mode == Mode.SAFE + else Interpreter(txt, [self.__scope]) + ) + completions = completer.complete(line, col) - completions = completer(txt, [self.__scope]).complete(line, col) # for now, a simple sorting based on number of preceding _ # we may want to apply additional sorting to each list before combining results: list = [] From 8682cadccb7b2800a2e17179edec1d98406da4f2 Mon Sep 17 00:00:00 2001 From: Nate Bauernfeind Date: Mon, 12 Dec 2022 15:10:17 -0700 Subject: [PATCH 8/9] Fix incorrect Table casts of PartitionTables in PartitionedTableService (#3183) --- .../PartitionedTableServiceGrpcImpl.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/server/src/main/java/io/deephaven/server/partitionedtable/PartitionedTableServiceGrpcImpl.java b/server/src/main/java/io/deephaven/server/partitionedtable/PartitionedTableServiceGrpcImpl.java index 660792eb627..3f52dbaa7b4 100644 --- a/server/src/main/java/io/deephaven/server/partitionedtable/PartitionedTableServiceGrpcImpl.java +++ b/server/src/main/java/io/deephaven/server/partitionedtable/PartitionedTableServiceGrpcImpl.java @@ -14,8 +14,10 @@ import io.deephaven.proto.backplane.grpc.PartitionByRequest; import io.deephaven.proto.backplane.grpc.PartitionByResponse; import io.deephaven.proto.backplane.grpc.PartitionedTableServiceGrpc; +import io.deephaven.server.auth.AuthorizationProvider; import io.deephaven.server.session.SessionService; import io.deephaven.server.session.SessionState; +import io.deephaven.server.session.TicketResolverBase; import io.deephaven.server.session.TicketRouter; import io.grpc.stub.StreamObserver; @@ -34,17 +36,20 @@ public class PartitionedTableServiceGrpcImpl extends PartitionedTableServiceGrpc private final SessionService sessionService; private final UpdateGraphProcessor updateGraphProcessor; private final PartitionedTableServiceContextualAuthWiring authWiring; + private final TicketResolverBase.AuthTransformation authorizationTransformation; @Inject public PartitionedTableServiceGrpcImpl( TicketRouter ticketRouter, SessionService sessionService, UpdateGraphProcessor updateGraphProcessor, + AuthorizationProvider authorizationProvider, PartitionedTableServiceContextualAuthWiring authWiring) { this.ticketRouter = ticketRouter; this.sessionService = sessionService; this.updateGraphProcessor = updateGraphProcessor; this.authWiring = authWiring; + this.authorizationTransformation = authorizationProvider.getTicketTransformation(); } @Override @@ -86,16 +91,19 @@ public void merge(MergeRequest request, StreamObserver { authWiring.checkPermissionMerge(session.getAuthContext(), request, - Collections.singletonList((Table) partitionedTable.get())); - final Table merged; + Collections.singletonList(partitionedTable.get().table())); + Table merged; if (partitionedTable.get().table().isRefreshing()) { merged = updateGraphProcessor.sharedLock() .computeLocked(partitionedTable.get()::merge); } else { merged = partitionedTable.get().merge(); } + merged = authorizationTransformation.transform(merged); + final ExportedTableCreationResponse response = + buildTableCreationResponse(request.getResultId(), merged); safelyExecute(() -> { - responseObserver.onNext(buildTableCreationResponse(request.getResultId(), merged)); + responseObserver.onNext(response); responseObserver.onCompleted(); }); return merged; @@ -118,10 +126,10 @@ public void getTable(GetTableRequest request, StreamObserver { - authWiring.checkPermissionGetTable(session.getAuthContext(), request, - List.of((Table) partitionedTable.get(), keys.get())); - final Table table; + Table table; Table keyTable = keys.get(); + authWiring.checkPermissionGetTable(session.getAuthContext(), request, + List.of(partitionedTable.get().table(), keyTable)); if (!keyTable.isRefreshing()) { long keyTableSize = keyTable.size(); if (keyTableSize != 1) { @@ -159,8 +167,11 @@ public void getTable(GetTableRequest request, StreamObserver { - responseObserver.onNext(buildTableCreationResponse(request.getResultId(), table)); + responseObserver.onNext(response); responseObserver.onCompleted(); }); return table; From 72ef0bc9df66c35ed2c404efc20026105b1c6b58 Mon Sep 17 00:00:00 2001 From: Devin Smith Date: Mon, 12 Dec 2022 14:17:26 -0800 Subject: [PATCH 9/9] Bump to 0.19.1 hotfix --- .../src/main/groovy/io.deephaven.common-conventions.gradle | 2 +- py/client/README.md | 2 +- py/client/pydeephaven/__init__.py | 2 +- py/client/setup.py | 2 +- py/embedded-server/deephaven_server/__init__.py | 2 +- py/server/deephaven/__init__.py | 2 +- server/jetty-app/README.md | 6 +++--- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/buildSrc/src/main/groovy/io.deephaven.common-conventions.gradle b/buildSrc/src/main/groovy/io.deephaven.common-conventions.gradle index efad1b1b6c6..5f040498f1e 100644 --- a/buildSrc/src/main/groovy/io.deephaven.common-conventions.gradle +++ b/buildSrc/src/main/groovy/io.deephaven.common-conventions.gradle @@ -5,7 +5,7 @@ plugins { } group = 'io.deephaven' -version = '0.19.0' +version = '0.19.1' if (!name.startsWith('deephaven-')) { archivesBaseName = "deephaven-${name}" diff --git a/py/client/README.md b/py/client/README.md index fe080722434..c332d87ce26 100644 --- a/py/client/README.md +++ b/py/client/README.md @@ -35,7 +35,7 @@ $ python3 -m examples.demo_asof_join ``` ## Install ``` shell -$ pip3 install dist/pydeephaven-0.19.0-py3-none-any.whl +$ pip3 install dist/pydeephaven-0.19.1-py3-none-any.whl ``` ## Quick start diff --git a/py/client/pydeephaven/__init__.py b/py/client/pydeephaven/__init__.py index 3d006d66215..347e6d45537 100644 --- a/py/client/pydeephaven/__init__.py +++ b/py/client/pydeephaven/__init__.py @@ -30,4 +30,4 @@ from .constants import SortDirection, MatchRule from .query import Query -__version__ = "0.19.0" +__version__ = "0.19.1" diff --git a/py/client/setup.py b/py/client/setup.py index d0b056721f7..a7f2fc4293e 100644 --- a/py/client/setup.py +++ b/py/client/setup.py @@ -12,7 +12,7 @@ setup( name='pydeephaven', - version='0.19.0', + version='0.19.1', description='The Deephaven Python Client', long_description=README, long_description_content_type="text/markdown", diff --git a/py/embedded-server/deephaven_server/__init__.py b/py/embedded-server/deephaven_server/__init__.py index 5dc421a4431..903f67acfba 100644 --- a/py/embedded-server/deephaven_server/__init__.py +++ b/py/embedded-server/deephaven_server/__init__.py @@ -1,7 +1,7 @@ # # Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending # -__version__ = "0.19.0" +__version__ = "0.19.1" from .start_jvm import DEFAULT_JVM_PROPERTIES, DEFAULT_JVM_ARGS, start_jvm from .server import Server diff --git a/py/server/deephaven/__init__.py b/py/server/deephaven/__init__.py index 43ef0beab9d..a774f558e29 100644 --- a/py/server/deephaven/__init__.py +++ b/py/server/deephaven/__init__.py @@ -7,7 +7,7 @@ """ -__version__ = "0.19.0" +__version__ = "0.19.1" from deephaven_internal import jvm try: diff --git a/server/jetty-app/README.md b/server/jetty-app/README.md index f90a3b573de..16fb21218f7 100644 --- a/server/jetty-app/README.md +++ b/server/jetty-app/README.md @@ -24,17 +24,17 @@ be sure to first set `PYTHON_CONFIGURE_OPTS="--enabled-shared"`. ```shell $ python -m pip install --upgrade pip # First upgrade pip $ pip install wheel - $ export DEEPHAVEN_VERSION=0.19.0 # this should match the current version of your git repo + $ export DEEPHAVEN_VERSION=0.19.1 # this should match the current version of your git repo $ cd py/jpy $ export JAVA_HOME=/path/to/your/java/home # Customize this to fit your computer $ python setup.py bdist_wheel - $ pip install dist/deephaven_jpy-0.19.0-cp39-cp39-linux_x86_64.whl # This will vary by version/platform + $ pip install dist/deephaven_jpy-0.19.1-cp39-cp39-linux_x86_64.whl # This will vary by version/platform $ cd - $ cd Integrations/python $ python setup.py bdist_wheel - $ pip install dist/deephaven-0.19.0-py2.py3-none-any.whl + $ pip install dist/deephaven-0.19.1-py2.py3-none-any.whl $ cd - ```