Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jsapi Reconnects to Existing Session and Proceeds to Redefine Existing Exports #6133

Open
nbauernfeind opened this issue Sep 25, 2024 · 1 comment
Assignees
Labels
bug Something isn't working core Core development tasks grpc jsapi
Milestone

Comments

@nbauernfeind
Copy link
Member

nbauernfeind commented Sep 25, 2024

I've noticed this issue on main, but looks like it is also in DHE VPlus .345 k8s -- and therefore not new to the jsapi refactoring as I thought.

We're not sure how to reproduce this yet.

This is the version reproduced in DHE:

Internal Error '1e6d8b30-7a54-410e-a618-63bbbdb5cf7d' java.lang.IllegalStateException: export object can only be defined once
	at io.deephaven.server.session.SessionState$ExportObject.setWork(SessionState.java:688)
	at io.deephaven.server.session.SessionState$ExportBuilder.submit(SessionState.java:1502)
	at io.deephaven.server.util.GrpcServiceOverrideBuilder$BrowserStreamMethod.invokeOpen(GrpcServiceOverrideBuilder.java:247)
	at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182)
	at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35)
	at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23)
	at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40)
	at io.grpc.Contexts$ContextualizedServerCallListener.onHalfClose(Contexts.java:86)
	at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35)
	at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23)
	at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40)
	at io.deephaven.server.session.SessionServiceGrpcImpl$SessionServiceCallListener.lambda$onHalfClose$1(SessionServiceGrpcImpl.java:406)
	at io.deephaven.server.session.SessionServiceGrpcImpl.rpcWrapper(SessionServiceGrpcImpl.java:444)
	at io.deephaven.server.session.SessionServiceGrpcImpl$SessionServiceCallListener.onHalfClose(SessionServiceGrpcImpl.java:406)
	at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:351)
	at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:860)
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
	at io.grpc.internal.SerializeReentrantCallsDirectExecutor.execute(SerializeReentrantCallsDirectExecutor.java:49)
	at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener.halfClosed(ServerImpl.java:868)
	at io.grpc.internal.AbstractServerStream$TransportState.deframerClosed(AbstractServerStream.java:238)
	at io.grpc.internal.MessageDeframer.close(MessageDeframer.java:234)
	at io.grpc.internal.MessageDeframer.closeWhenComplete(MessageDeframer.java:192)
	at io.grpc.internal.AbstractStream$TransportState.closeDeframer(AbstractStream.java:201)
	at io.grpc.internal.AbstractServerStream$TransportState.inboundDataReceived(AbstractServerStream.java:265)
	at io.grpc.servlet.jakarta.ServletAdapter$GrpcReadListener.lambda$onAllDataRead$1(ServletAdapter.java:337)
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
	at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:31)
	at io.grpc.internal.SerializingExecutor.schedule(SerializingExecutor.java:102)
	at io.grpc.internal.SerializingExecutor.execute(SerializingExecutor.java:95)
	at io.grpc.servlet.jakarta.ServletServerStream$ServletTransportState.runOnTransportThread(ServletServerStream.java:144)
	at io.grpc.servlet.jakarta.ServletAdapter$GrpcReadListener.onAllDataRead(ServletAdapter.java:336)
	at org.eclipse.jetty.server.HttpInput.run(HttpInput.java:411)
	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1466)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:587)
	at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:461)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
	at java.base/java.lang.Thread.run(Thread.java:840)

This is the version I reproduced in DHC:

5-4af2-95f9-f158939f9f6b' java.lang.IllegalStateException: dependencies can only be set once on an exporta
ble object
        at io.deephaven.server.session.SessionState$ExportObject.setDependencies(SessionState.java:652)
        at io.deephaven.server.session.SessionState$ExportBuilder.require(SessionState.java:1423)
        at io.deephaven.server.table.ops.TableServiceGrpcImpl.oneShotOperationWrapper(TableServiceGrpcImpl.jav
a:662)
        at io.deephaven.server.table.ops.TableServiceGrpcImpl.applyPreviewColumns(TableServiceGrpcImpl.java:34
4)
        at io.deephaven.proto.backplane.grpc.TableServiceGrpc$MethodHandlers.invoke(TableServiceGrpc.java:3569
)
        at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.jav
a:182)
        at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35
)
        at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23)
        at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServe
rCallListener.java:40)
        at io.deephaven.server.session.SessionServiceGrpcImpl$SessionServiceCallListener.lambda$onHalfClose$1(
SessionServiceGrpcImpl.java:437)
        at io.deephaven.server.session.SessionServiceGrpcImpl.rpcWrapper(SessionServiceGrpcImpl.java:481)
        at io.deephaven.server.session.SessionServiceGrpcImpl$SessionServiceCallListener.onHalfClose(SessionSe
rviceGrpcImpl.java:437)
        at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:351)
        at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(Se
rverImpl.java:860)
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
        at io.grpc.internal.SerializeReentrantCallsDirectExecutor.execute(SerializeReentrantCallsDirectExecuto
r.java:49)
        at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener.halfClosed(ServerImpl.java:
868)
        at io.grpc.internal.AbstractServerStream$TransportState.deframerClosed(AbstractServerStream.java:238)
        at io.grpc.internal.MessageDeframer.close(MessageDeframer.java:234)
        at io.grpc.internal.MessageDeframer.closeWhenComplete(MessageDeframer.java:192)
        at io.grpc.internal.AbstractStream$TransportState.closeDeframer(AbstractStream.java:201)
        at io.grpc.internal.AbstractServerStream$TransportState.inboundDataReceived(AbstractServerStream.java:
265)
        at io.grpc.servlet.jakarta.ServletAdapter$GrpcReadListener.lambda$onAllDataRead$1(ServletAdapter.java:
337)
        at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
        at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:31)
        at io.grpc.internal.SerializingExecutor.schedule(SerializingExecutor.java:102)
        at io.grpc.internal.SerializingExecutor.execute(SerializingExecutor.java:95)
        at io.grpc.servlet.jakarta.ServletServerStream$ServletTransportState.runOnTransportThread(ServletServe
rStream.java:144)
        at io.grpc.servlet.jakarta.ServletAdapter$GrpcReadListener.onAllDataRead(ServletAdapter.java:336)
        at org.eclipse.jetty.server.HttpInput.run(HttpInput.java:411)
        at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1466)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:587)
        at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:461)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.
java:421)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrat
egy.java:390)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrate
gy.java:277)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.
java:193)
        at org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:208)
        at org.eclipse.jetty.http2.HTTP2Connection.onFillable(HTTP2Connection.java:155)
        at org.eclipse.jetty.http2.HTTP2Connection$FillableCallback.succeeded(HTTP2Connection.java:450)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
        at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.
java:421)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrat
egy.java:390)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrate
gy.java:277)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java
:199)
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java
:411)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
        at java.base/java.lang.Thread.run(Thread.java:832)

Screenshot 2024-09-23 at 6 16 07 PM
2024-09-23-181814_support_logs (1).zip
dhvn.log

@nbauernfeind nbauernfeind added bug Something isn't working jsapi grpc core Core development tasks labels Sep 25, 2024
@nbauernfeind nbauernfeind added this to the 0.37.0 milestone Sep 25, 2024
@rcaudy rcaudy modified the milestones: 0.37.0, 0.38.0 Sep 26, 2024
@niloc132 niloc132 modified the milestones: 0.38.0, 0.37.0 Oct 16, 2024
@niloc132
Copy link
Member

Bender and I aren't sure how this is happening, but we do agree that the existing "save the refresh token for reuse" wiring should go away, so we're going to start by removing that on both sides and then see if we can still reproduce the bug.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working core Core development tasks grpc jsapi
Projects
None yet
Development

No branches or pull requests

3 participants