add configuration for STS parallel message processing (#19279)

* add configuration for parallel processing

* update setting description

* vbump sts

* enable feature for dev by default
This commit is contained in:
Alan Ren
2022-05-06 15:08:00 -07:00
committed by GitHub
parent 5f48e4a28d
commit 23b347662a
5 changed files with 33 additions and 5 deletions

View File

@@ -8,7 +8,7 @@ import { ServerOptions, TransportKind } from 'vscode-languageclient';
import * as Constants from './constants';
import * as vscode from 'vscode';
import * as path from 'path';
import { getCommonLaunchArgsAndCleanupOldLogFiles, getOrDownloadServer } from './utils';
import { getCommonLaunchArgsAndCleanupOldLogFiles, getOrDownloadServer, getParallelMessageProcessingConfig } from './utils';
import { Telemetry, LanguageClientErrorHandler } from './telemetry';
import { SqlOpsDataClient, ClientOptions } from 'dataprotocol-client';
import { TelemetryFeature, AgentServicesFeature, SerializationFeature, AccountFeature, SqlAssessmentServicesFeature, ProfilerFeature, TableDesignerFeature, ExecutionPlanServiceFeature } from './features';
@@ -45,7 +45,7 @@ export class SqlToolsServer {
const serverPath = await this.download(context);
this.installDirectory = path.dirname(serverPath);
const installationComplete = Date.now();
let serverOptions = generateServerOptions(context.extensionContext.logPath, serverPath);
let serverOptions = await generateServerOptions(context.extensionContext.logPath, serverPath);
let clientOptions = getClientOptions(context);
this.client = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions);
const processStart = Date.now();
@@ -104,8 +104,12 @@ export class SqlToolsServer {
}
}
function generateServerOptions(logPath: string, executablePath: string): ServerOptions {
async function generateServerOptions(logPath: string, executablePath: string): Promise<ServerOptions> {
const launchArgs = getCommonLaunchArgsAndCleanupOldLogFiles(logPath, 'sqltools.log', executablePath);
const enableAsyncMessageProcessing = await getParallelMessageProcessingConfig();
if (enableAsyncMessageProcessing) {
launchArgs.push('--parallel-message-processing');
}
return { command: executablePath, args: launchArgs, transport: TransportKind.stdio };
}

View File

@@ -20,6 +20,7 @@ const configLogRetentionMinutes = 'logRetentionMinutes';
const configLogFilesRemovalLimit = 'logFilesRemovalLimit';
const extensionConfigSectionName = 'mssql';
const configLogDebugInfo = 'logDebugInfo';
const parallelMessageProcessingConfig = 'parallelMessageProcessing';
/**
*
@@ -92,6 +93,18 @@ export function getConfigTracingLevel(): string {
}
}
export async function getParallelMessageProcessingConfig(): Promise<boolean> {
const config = getConfiguration();
if (!config) {
return false;
}
const quality = await getProductQuality();
const setting = config.inspect(parallelMessageProcessingConfig);
// For dev environment, we want to enable the feature by default unless it is set explicitely.
// Note: the quality property is not set for dev environment, we can use this to determine whether it is dev environment.
return (quality === undefined && setting.globalValue === undefined && setting.workspaceValue === undefined) ? true : config[parallelMessageProcessingConfig];
}
export function getLogFileName(prefix: string, pid: number): string {
return `${prefix}_${pid}.log`;
}
@@ -352,3 +365,8 @@ export async function getOrDownloadServer(config: IConfig, handleServerEvent?: (
return serverdownloader.getOrDownloadServer();
}
async function getProductQuality(): Promise<string> {
const content = await fs.readFile(path.join(vscode.env.appRoot, 'product.json'));
return JSON.parse(content?.toString())?.quality;
}