mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-20 09:35:38 -05:00
Fix bug disconnecting during stuck OE operation (#2773)
This commit is contained in:
@@ -53,7 +53,7 @@ export interface IObjectExplorerService {
|
||||
|
||||
updateObjectExplorerNodes(connectionProfile: IConnectionProfile): Promise<void>;
|
||||
|
||||
deleteObjectExplorerNode(connection: IConnectionProfile): void;
|
||||
deleteObjectExplorerNode(connection: IConnectionProfile): Thenable<void>;
|
||||
|
||||
onUpdateObjectExplorerNodes: Event<ObjectExplorerNodeEventArgs>;
|
||||
|
||||
@@ -142,16 +142,17 @@ export class ObjectExplorerService implements IObjectExplorerService {
|
||||
});
|
||||
}
|
||||
|
||||
public deleteObjectExplorerNode(connection: IConnectionProfile): void {
|
||||
public deleteObjectExplorerNode(connection: IConnectionProfile): Thenable<void> {
|
||||
let self = this;
|
||||
var connectionUri = connection.id;
|
||||
var nodeTree = this._activeObjectExplorerNodes[connectionUri];
|
||||
if (nodeTree) {
|
||||
self.closeSession(connection.providerName, nodeTree.getSession()).then(() => {
|
||||
return self.closeSession(connection.providerName, nodeTree.getSession()).then(() => {
|
||||
delete self._activeObjectExplorerNodes[connectionUri];
|
||||
delete self._sessions[nodeTree.getSession().sessionId];
|
||||
});
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -328,6 +329,21 @@ export class ObjectExplorerService implements IObjectExplorerService {
|
||||
}
|
||||
|
||||
public closeSession(providerId: string, session: sqlops.ObjectExplorerSession): Thenable<sqlops.ObjectExplorerCloseSessionResponse> {
|
||||
// Complete any requests that are still open for the session
|
||||
let sessionStatus = this._sessions[session.sessionId];
|
||||
if (sessionStatus && sessionStatus.nodes) {
|
||||
Object.entries(sessionStatus.nodes).forEach(([nodePath, nodeStatus]: [string, NodeStatus]) => {
|
||||
if (nodeStatus.expandEmitter) {
|
||||
nodeStatus.expandEmitter.fire({
|
||||
sessionId: session.sessionId,
|
||||
nodes: [],
|
||||
nodePath: nodePath,
|
||||
errorMessage: undefined
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
let provider = this._providers[providerId];
|
||||
if (provider) {
|
||||
return provider.closeSession({
|
||||
|
||||
Reference in New Issue
Block a user