Skip to content

Commit ee6c53f

Browse files
committed
Also fix a related issue where racing view changes can log an err
1 parent e841462 commit ee6c53f

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

web/client-api/src/main/java/io/deephaven/web/client/api/tree/JsTreeTable.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import elemental2.core.JsArray;
1111
import elemental2.core.JsObject;
1212
import elemental2.core.Uint8Array;
13+
import elemental2.dom.AbortController;
1314
import elemental2.dom.DomGlobal;
1415
import elemental2.promise.IThenable;
1516
import elemental2.promise.Promise;
@@ -18,6 +19,7 @@
1819
import io.deephaven.javascript.proto.dhinternal.io.deephaven_core.proto.hierarchicaltable_pb.HierarchicalTableSourceExportRequest;
1920
import io.deephaven.javascript.proto.dhinternal.io.deephaven_core.proto.hierarchicaltable_pb.HierarchicalTableViewKeyTableDescriptor;
2021
import io.deephaven.javascript.proto.dhinternal.io.deephaven_core.proto.hierarchicaltable_pb.HierarchicalTableViewRequest;
22+
import io.deephaven.javascript.proto.dhinternal.io.deephaven_core.proto.hierarchicaltable_pb_service.UnaryResponse;
2123
import io.deephaven.javascript.proto.dhinternal.io.deephaven_core.proto.table_pb.Condition;
2224
import io.deephaven.javascript.proto.dhinternal.io.deephaven_core.proto.table_pb.ExportedTableCreationResponse;
2325
import io.deephaven.javascript.proto.dhinternal.io.deephaven_core.proto.table_pb.SortDescriptor;
@@ -354,24 +356,34 @@ private TicketAndPromise<ClientTableState> makeView(TicketAndPromise<?> prevTick
354356
}
355357
Ticket ticket = connection.getConfig().newTicket();
356358
Promise<JsTable> keyTable = makeKeyTable();
359+
AbortController controller = new AbortController();
360+
357361
viewTicket = new TicketAndPromise<>(ticket, Callbacks.grpcUnaryPromise(c -> {
358362
HierarchicalTableViewRequest viewRequest = new HierarchicalTableViewRequest();
359363
viewRequest.setHierarchicalTableId(prevTicket.ticket());
360364
viewRequest.setResultViewId(ticket);
361365
keyTable.then(t -> {
366+
if (controller.signal.aborted) {
367+
return Promise.resolve(controller.signal.reason);
368+
}
362369
if (keyTableData[0].length > 0) {
363370
HierarchicalTableViewKeyTableDescriptor expansions = new HierarchicalTableViewKeyTableDescriptor();
364371
expansions.setKeyTableId(t.getHandle().makeTicket());
365372
expansions.setKeyTableActionColumn(actionCol.getName());
366373
viewRequest.setExpansions(expansions);
367374
}
368-
connection.hierarchicalTableServiceClient().view(viewRequest, connection.metadata(), c::apply);
375+
UnaryResponse viewCreationCall =
376+
connection.hierarchicalTableServiceClient().view(viewRequest, connection.metadata(), c::apply);
377+
controller.signal.addEventListener("abort", e -> viewCreationCall.cancel());
369378
return null;
370379
}, error -> {
371380
c.apply(error, null);
372381
return null;
373382
});
374383
}).then(result -> {
384+
if (controller.signal.aborted) {
385+
return Promise.reject(controller.signal.reason);
386+
}
375387
ClientTableState state = new ClientTableState(connection,
376388
new TableTicket(viewTicket.ticket().getTicket_asU8()), (callback, newState, metadata) -> {
377389
callback.apply("fail, trees dont reconnect like this", null);
@@ -389,6 +401,7 @@ private TicketAndPromise<ClientTableState> makeView(TicketAndPromise<?> prevTick
389401
@Override
390402
public void release() {
391403
super.release();
404+
controller.abort();
392405
then(state -> {
393406
state.unretain(JsTreeTable.this);
394407
return null;

0 commit comments

Comments
 (0)