mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
Fix issues with notebook providers not appearing, or being waited on for too long during startup. (#17288)
This commit is contained in:
@@ -50,7 +50,7 @@ import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editor
|
|||||||
import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor';
|
import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor';
|
||||||
import { isINotebookInput } from 'sql/workbench/services/notebook/browser/interface';
|
import { isINotebookInput } from 'sql/workbench/services/notebook/browser/interface';
|
||||||
import { INotebookShowOptions } from 'sql/workbench/api/common/sqlExtHost.protocol';
|
import { INotebookShowOptions } from 'sql/workbench/api/common/sqlExtHost.protocol';
|
||||||
import { JUPYTER_PROVIDER_ID, NotebookLanguage } from 'sql/workbench/common/constants';
|
import { NotebookLanguage } from 'sql/workbench/common/constants';
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
import { SqlSerializationProvider } from 'sql/workbench/services/notebook/browser/sql/sqlSerializationProvider';
|
import { SqlSerializationProvider } from 'sql/workbench/services/notebook/browser/sql/sqlSerializationProvider';
|
||||||
|
|
||||||
@@ -305,25 +305,31 @@ export class NotebookService extends Disposable implements INotebookService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private handleNewProviderDescriptions(p: { id: string; registration: ProviderDescriptionRegistration }) {
|
private handleNewProviderDescriptions(p: { id: string; registration: ProviderDescriptionRegistration }) {
|
||||||
// Skip adding a Serialization descriptor for Jupyter, since we use the default notebook Serialization provider for jupyter
|
|
||||||
if (!this._serializationProviders.has(p.id) && p.id !== JUPYTER_PROVIDER_ID) {
|
|
||||||
this._serializationProviders.set(p.id, new SerializationProviderDescriptor(p.id));
|
|
||||||
}
|
|
||||||
if (!this._executeProviders.has(p.id)) {
|
|
||||||
this._executeProviders.set(p.id, new ExecuteProviderDescriptor(p.id));
|
|
||||||
}
|
|
||||||
let registration = p.registration;
|
let registration = p.registration;
|
||||||
if (registration.fileExtensions) {
|
if (registration.fileExtensions) {
|
||||||
if (Array.isArray(registration.fileExtensions)) {
|
let extensions = registration.fileExtensions;
|
||||||
for (let fileType of registration.fileExtensions) {
|
if (!this._serializationProviders.has(p.id)) {
|
||||||
|
// Only add a new provider descriptor if the provider
|
||||||
|
// supports file extensions beyond the default ipynb
|
||||||
|
let isNewFileType = (fileExt: string) => fileExt?.length > 0 && fileExt.toUpperCase() !== DEFAULT_NOTEBOOK_FILETYPE;
|
||||||
|
let addNewProvider = Array.isArray(extensions) ? extensions.some(ext => isNewFileType(ext)) : isNewFileType(extensions);
|
||||||
|
if (addNewProvider) {
|
||||||
|
this._serializationProviders.set(p.id, new SerializationProviderDescriptor(p.id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Array.isArray(extensions)) {
|
||||||
|
for (let fileType of extensions) {
|
||||||
this.addFileProvider(fileType, registration);
|
this.addFileProvider(fileType, registration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.addFileProvider(registration.fileExtensions, registration);
|
this.addFileProvider(extensions, registration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (registration.standardKernels) {
|
if (registration.standardKernels) {
|
||||||
|
if (!this._executeProviders.has(p.id)) {
|
||||||
|
this._executeProviders.set(p.id, new ExecuteProviderDescriptor(p.id));
|
||||||
|
}
|
||||||
this.addStandardKernels(registration);
|
this.addStandardKernels(registration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -625,27 +631,21 @@ export class NotebookService extends Disposable implements INotebookService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private waitOnSerializationProviderAvailability(providerDescriptor: SerializationProviderDescriptor, timeout?: number): Promise<ISerializationProvider | undefined> {
|
private waitOnSerializationProviderAvailability(providerDescriptor: SerializationProviderDescriptor, timeout?: number): Promise<ISerializationProvider | undefined> {
|
||||||
// Wait up to 10 seconds for the provider to be registered
|
// Wait up to 30 seconds for the provider to be registered
|
||||||
timeout = timeout ?? 10000;
|
timeout = timeout ?? 30000;
|
||||||
let promises: Promise<ISerializationProvider>[] = [
|
let promises: Promise<ISerializationProvider>[] = [
|
||||||
providerDescriptor.instanceReady,
|
providerDescriptor.instanceReady,
|
||||||
new Promise<ISerializationProvider>((resolve, reject) => setTimeout(() => {
|
new Promise<ISerializationProvider>((resolve, reject) => setTimeout(() => resolve(undefined), timeout))
|
||||||
this._serializationProviders.delete(providerDescriptor.providerId);
|
|
||||||
return resolve(undefined);
|
|
||||||
}, timeout))
|
|
||||||
];
|
];
|
||||||
return Promise.race(promises);
|
return Promise.race(promises);
|
||||||
}
|
}
|
||||||
|
|
||||||
private waitOnExecuteProviderAvailability(providerDescriptor: ExecuteProviderDescriptor, timeout?: number): Promise<IExecuteProvider | undefined> {
|
private waitOnExecuteProviderAvailability(providerDescriptor: ExecuteProviderDescriptor, timeout?: number): Promise<IExecuteProvider | undefined> {
|
||||||
// Wait up to 10 seconds for the provider to be registered
|
// Wait up to 30 seconds for the provider to be registered
|
||||||
timeout = timeout ?? 10000;
|
timeout = timeout ?? 30000;
|
||||||
let promises: Promise<IExecuteProvider>[] = [
|
let promises: Promise<IExecuteProvider>[] = [
|
||||||
providerDescriptor.instanceReady,
|
providerDescriptor.instanceReady,
|
||||||
new Promise<IExecuteProvider>((resolve, reject) => setTimeout(() => {
|
new Promise<IExecuteProvider>((resolve, reject) => setTimeout(() => resolve(undefined), timeout))
|
||||||
this._executeProviders.delete(providerDescriptor.providerId);
|
|
||||||
return resolve(undefined);
|
|
||||||
}, timeout))
|
|
||||||
];
|
];
|
||||||
return Promise.race(promises);
|
return Promise.race(promises);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user