Fix bug disconnecting during stuck OE operation (#2773)

This commit is contained in:
Matt Irvine
2018-10-08 15:42:13 -07:00
committed by GitHub
parent 0bd179c6ca
commit 4b79ecc3d9
3 changed files with 50 additions and 10 deletions

View File

@@ -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({