mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-13 17:23:02 -05:00
Update memory settings and implement ServerPrototype (#2126)
This commit is contained in:
@@ -12946,6 +12946,11 @@ namespace Microsoft.SqlTools.ServiceLayer
|
|||||||
return Keys.GetString(Keys.ServiceNotFound, serviceName);
|
return Keys.GetString(Keys.ServiceNotFound, serviceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string PropertyNotInitialized(string propertyName)
|
||||||
|
{
|
||||||
|
return Keys.GetString(Keys.PropertyNotInitialized, propertyName);
|
||||||
|
}
|
||||||
|
|
||||||
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
public class Keys
|
public class Keys
|
||||||
{
|
{
|
||||||
@@ -17898,6 +17903,9 @@ namespace Microsoft.SqlTools.ServiceLayer
|
|||||||
public const string HyperscaleAzureEdition = "HyperscaleAzureEdition";
|
public const string HyperscaleAzureEdition = "HyperscaleAzureEdition";
|
||||||
|
|
||||||
|
|
||||||
|
public const string PropertyNotInitialized = "PropertyNotInitialized";
|
||||||
|
|
||||||
|
|
||||||
private Keys()
|
private Keys()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|||||||
@@ -6802,4 +6802,9 @@ The Query Processor estimates that implementing the following index could improv
|
|||||||
<value>Hyperscale</value>
|
<value>Hyperscale</value>
|
||||||
<comment></comment>
|
<comment></comment>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="PropertyNotInitialized" xml:space="preserve">
|
||||||
|
<value>Property '{0}' was set before initialization.</value>
|
||||||
|
<comment>.
|
||||||
|
Parameters: 0 - propertyName (string) </comment>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -2814,4 +2814,10 @@ DataWarehouseAzureEdition = DataWarehouse
|
|||||||
GeneralPurposeAzureEdition = General Purpose
|
GeneralPurposeAzureEdition = General Purpose
|
||||||
BusinessCriticalAzureEdition = Business Critical
|
BusinessCriticalAzureEdition = Business Critical
|
||||||
ErrorInvalidEdition = Edition value is not valid
|
ErrorInvalidEdition = Edition value is not valid
|
||||||
HyperscaleAzureEdition = Hyperscale
|
HyperscaleAzureEdition = Hyperscale
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# Server Properties
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
PropertyNotInitialized(string propertyName) = Property '{0}' was set before initialization.
|
||||||
@@ -8321,6 +8321,12 @@ The Query Processor estimates that implementing the following index could improv
|
|||||||
<target state="new">None</target>
|
<target state="new">None</target>
|
||||||
<note></note>
|
<note></note>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="PropertyNotInitialized">
|
||||||
|
<source>Property '{0}' was set before initialization.</source>
|
||||||
|
<target state="new">Property '{0}' was set before initialization.</target>
|
||||||
|
<note>.
|
||||||
|
Parameters: 0 - propertyName (string) </note>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="TableDesignerCreateTablePermissionDenied">
|
<trans-unit id="TableDesignerCreateTablePermissionDenied">
|
||||||
<source>CREATE TABLE permission denied in database '{0}'.</source>
|
<source>CREATE TABLE permission denied in database '{0}'.</source>
|
||||||
<target state="new">CREATE TABLE permission denied in database '{0}'.</target>
|
<target state="new">CREATE TABLE permission denied in database '{0}'.</target>
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) Microsoft. All rights reserved.
|
||||||
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
using Microsoft.SqlTools.ServiceLayer.Management;
|
||||||
|
|
||||||
|
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
||||||
|
{
|
||||||
|
internal class ServerActions : ManagementActionBase
|
||||||
|
{
|
||||||
|
#region Variables
|
||||||
|
private ServerPrototype serverData;
|
||||||
|
private ConfigAction configAction;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
public ServerActions(
|
||||||
|
CDataContainer context,
|
||||||
|
ServerPrototype server,
|
||||||
|
ConfigAction configAction)
|
||||||
|
{
|
||||||
|
this.DataContainer = context;
|
||||||
|
this.serverData = server;
|
||||||
|
this.configAction = configAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// called on background thread by the framework to execute the action
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="node"></param>
|
||||||
|
public override void OnRunNow(object sender)
|
||||||
|
{
|
||||||
|
this.serverData.SendDataToServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,971 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) Microsoft. All rights reserved.
|
||||||
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||||
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.SqlServer.Management.Smo;
|
||||||
|
using Microsoft.SqlTools.ServiceLayer.Management;
|
||||||
|
using Microsoft.SqlServer.Management.Common;
|
||||||
|
using Microsoft.SqlTools.ServiceLayer.ServerConfigurations;
|
||||||
|
using Microsoft.SqlTools.Utility;
|
||||||
|
|
||||||
|
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
||||||
|
{
|
||||||
|
internal class ServerPrototype
|
||||||
|
{
|
||||||
|
#region Members
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// data container member that contains data specific information like
|
||||||
|
/// connection infor, SMO server object or an AMO server object as well
|
||||||
|
/// as a hash table where one can manipulate custom data
|
||||||
|
/// </summary>
|
||||||
|
private CDataContainer dataContainer;
|
||||||
|
private ServerConnection sqlConnection;
|
||||||
|
private ServerConfigService configService;
|
||||||
|
|
||||||
|
|
||||||
|
private ServerPrototypeData currentState;
|
||||||
|
private ServerPrototypeData originalState;
|
||||||
|
|
||||||
|
private ConfigProperty serverMinMemoryProperty;
|
||||||
|
private ConfigProperty serverMaxMemoryProperty;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Trace support
|
||||||
|
private const string componentName = "Server";
|
||||||
|
|
||||||
|
public string ComponentName
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return componentName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.ServerName;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.ServerName = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Product
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.Product;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.Product = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string OperatingSystem
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.OperatingSystem;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.OperatingSystem = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Version
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.Version;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.Version = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Language
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.Language;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.Language = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Platform
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.Platform;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.Platform = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MemoryInMB
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.MemoryInMB;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.MemoryInMB = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Processors
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.Processors;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.Processors = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string RootDirectory
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.RootDirectory;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.RootDirectory = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ServerCollation
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.ServerCollation;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.ServerCollation = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsClustered
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.IsClustered;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.IsClustered = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsHadrEnabled
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.IsHadrEnabled;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.IsHadrEnabled = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsXTPSupported
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.IsXTPSupported;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.IsXTPSupported = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPolyBaseInstalled
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.IsPolyBaseInstalled;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.IsPolyBaseInstalled = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public string HardwareGeneration
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.HardwareGeneration;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.HardwareGeneration = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ServiceTier
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.ServiceTier;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.ServiceTier = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int StorageSpaceUsageInMB
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.StorageSpaceUsageInMB;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.StorageSpaceUsageInMB = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int ReservedStorageSizeMB
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.ReservedStorageSizeMB;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.ReservedStorageSizeMB = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MaxServerMemory
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.MaxMemory;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.MaxMemory = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MinServerMemory
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.currentState.MinMemory;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this.currentState.MinMemory = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region Constructors / Dispose
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ServerPrototype for editing an existing server
|
||||||
|
/// </summary>
|
||||||
|
public ServerPrototype(CDataContainer context)
|
||||||
|
{
|
||||||
|
this.dataContainer = context;
|
||||||
|
this.sqlConnection = context.ServerConnection;
|
||||||
|
this.configService = new ServerConfigService();
|
||||||
|
this.currentState = new ServerPrototypeData(context, context.Server, this.configService);
|
||||||
|
this.originalState = (ServerPrototypeData)this.currentState.Clone();
|
||||||
|
this.serverMaxMemoryProperty = this.configService.GetServerSmoConfig(context.Server, this.configService.MaxServerMemoryPropertyNumber);
|
||||||
|
this.serverMinMemoryProperty = this.configService.GetServerSmoConfig(context.Server, this.configService.MinServerMemoryPropertyNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Implementation: SendDataToServer()
|
||||||
|
/// <summary>
|
||||||
|
/// SendDataToServer
|
||||||
|
///
|
||||||
|
/// here we talk with server via smo and do the actual data changing
|
||||||
|
/// </summary>
|
||||||
|
public void SendDataToServer()
|
||||||
|
{
|
||||||
|
if (this.dataContainer.Server != null)
|
||||||
|
{
|
||||||
|
Microsoft.SqlServer.Management.Smo.Server server = this.dataContainer.Server;
|
||||||
|
bool changesMade = false;
|
||||||
|
|
||||||
|
changesMade = UpdateMemoryValues(this.dataContainer.Server);
|
||||||
|
|
||||||
|
if (changesMade)
|
||||||
|
{
|
||||||
|
server.Configuration.Alter(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UpdateMemoryValues(Microsoft.SqlServer.Management.Smo.Server server)
|
||||||
|
{
|
||||||
|
bool changesMade = false;
|
||||||
|
|
||||||
|
if (this.currentState.MinMemory != this.originalState.MinMemory)
|
||||||
|
{
|
||||||
|
changesMade = true;
|
||||||
|
ConfigProperty serverConfig = this.configService.GetServerSmoConfig(server, this.configService.MinServerMemoryPropertyNumber);
|
||||||
|
serverConfig.ConfigValue = this.currentState.MinMemory;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.currentState.MaxMemory != this.originalState.MaxMemory)
|
||||||
|
{
|
||||||
|
changesMade = true;
|
||||||
|
ConfigProperty serverConfig = this.configService.GetServerSmoConfig(server, this.configService.MaxServerMemoryPropertyNumber);
|
||||||
|
serverConfig.ConfigValue = this.currentState.MaxMemory;
|
||||||
|
}
|
||||||
|
return changesMade;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public void ApplyInfoToPrototype(ServerInfo serverInfo)
|
||||||
|
{
|
||||||
|
this.Name = serverInfo.Name;
|
||||||
|
this.Language = serverInfo.Language;
|
||||||
|
this.MemoryInMB = serverInfo.MemoryInMB;
|
||||||
|
this.OperatingSystem = serverInfo.OperatingSystem;
|
||||||
|
this.Platform = serverInfo.Platform;
|
||||||
|
this.Version = serverInfo.Version;
|
||||||
|
this.Processors = serverInfo.Processors;
|
||||||
|
this.Version = serverInfo.Version;
|
||||||
|
this.IsClustered = serverInfo.IsClustered;
|
||||||
|
this.IsHadrEnabled = serverInfo.IsHadrEnabled;
|
||||||
|
this.IsPolyBaseInstalled = serverInfo.IsPolyBaseInstalled;
|
||||||
|
this.IsXTPSupported = (bool)(serverInfo.IsXTPSupported);
|
||||||
|
this.Product = serverInfo.Product;
|
||||||
|
this.ReservedStorageSizeMB = (int)(serverInfo.ReservedStorageSizeMB);
|
||||||
|
this.RootDirectory = serverInfo.RootDirectory;
|
||||||
|
this.ServerCollation = serverInfo.ServerCollation;
|
||||||
|
this.ServiceTier = serverInfo.ServiceTier;
|
||||||
|
this.StorageSpaceUsageInMB = (int)(serverInfo.StorageSpaceUsageInMB);
|
||||||
|
this.MaxServerMemory = serverInfo.MaxServerMemory;
|
||||||
|
this.MinServerMemory = serverInfo.MinServerMemory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Private class encapsulating the data that is changed by the UI.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Isolating this data allows for an easy implementation of Reset() and
|
||||||
|
/// simplifies difference detection when committing changes to the server.
|
||||||
|
/// </remarks>
|
||||||
|
private class ServerPrototypeData : ICloneable
|
||||||
|
{
|
||||||
|
#region data members
|
||||||
|
private string serverName = string.Empty;
|
||||||
|
private string hardwareGeneration = String.Empty;
|
||||||
|
private string language = String.Empty;
|
||||||
|
private int memoryInMB = 0;
|
||||||
|
private string operatingSystem = String.Empty;
|
||||||
|
private string platform = String.Empty;
|
||||||
|
private int processors = 0;
|
||||||
|
private bool isClustered = false;
|
||||||
|
private bool isHadrEnabled = false;
|
||||||
|
private bool isPolyBaseInstalled = false;
|
||||||
|
private bool isXTPSupported = false;
|
||||||
|
private string product = String.Empty;
|
||||||
|
private string rootDirectory = String.Empty;
|
||||||
|
private string serverCollation = String.Empty;
|
||||||
|
private string version = String.Empty;
|
||||||
|
private string serviceTier = String.Empty;
|
||||||
|
private int reservedStorageSizeMB = 0;
|
||||||
|
private int storageSpaceUsageInMB = 0;
|
||||||
|
private int minMemory = 0;
|
||||||
|
private int maxMemory = 0;
|
||||||
|
|
||||||
|
private bool initialized = false;
|
||||||
|
private Server server;
|
||||||
|
private CDataContainer context;
|
||||||
|
private ServerConfigService configService;
|
||||||
|
private bool isYukonOrLater = false;
|
||||||
|
|
||||||
|
ConfigProperty serverMaxMemoryProperty;
|
||||||
|
ConfigProperty serverMinMemoryProperty;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
|
||||||
|
// General properties
|
||||||
|
|
||||||
|
|
||||||
|
public string ServerName
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.serverName;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("ServerName"));
|
||||||
|
}
|
||||||
|
this.serverName = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string HardwareGeneration
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.hardwareGeneration;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("HardwareGeneration"));
|
||||||
|
}
|
||||||
|
this.hardwareGeneration = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Language
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.language;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("Language"));
|
||||||
|
}
|
||||||
|
this.language = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MemoryInMB
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.memoryInMB;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("MemoryInMB"));
|
||||||
|
}
|
||||||
|
this.memoryInMB = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string OperatingSystem
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.operatingSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("OperatingSystem"));
|
||||||
|
}
|
||||||
|
this.operatingSystem = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Platform
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("Platform"));
|
||||||
|
}
|
||||||
|
this.platform = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Processors
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.processors;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("Processors"));
|
||||||
|
}
|
||||||
|
this.processors = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsClustered
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.isClustered;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("IsClustered"));
|
||||||
|
}
|
||||||
|
this.isClustered = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsHadrEnabled
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.isHadrEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("IsHadrEnabled"));
|
||||||
|
}
|
||||||
|
this.isHadrEnabled = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPolyBaseInstalled
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.isPolyBaseInstalled;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("IsPolyBaseInstalled"));
|
||||||
|
}
|
||||||
|
this.isPolyBaseInstalled = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsXTPSupported
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.isXTPSupported;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("IsXTPSupported"));
|
||||||
|
}
|
||||||
|
this.isXTPSupported = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public string Product
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.product;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("Product"));
|
||||||
|
}
|
||||||
|
this.product = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string RootDirectory
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.rootDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("RootDirectory"));
|
||||||
|
}
|
||||||
|
this.rootDirectory = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ServerCollation
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.serverCollation;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("ServerCollation"));
|
||||||
|
}
|
||||||
|
this.serverCollation = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Version
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.version;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("Version"));
|
||||||
|
}
|
||||||
|
this.version = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ServiceTier
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.serviceTier;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("ServiceTier"));
|
||||||
|
}
|
||||||
|
this.serviceTier = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int StorageSpaceUsageInMB
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.storageSpaceUsageInMB;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("StorageSpaceUsageInMB"));
|
||||||
|
}
|
||||||
|
this.storageSpaceUsageInMB = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int ReservedStorageSizeMB
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.reservedStorageSizeMB;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("ReservedStorageSizeMB"));
|
||||||
|
}
|
||||||
|
this.reservedStorageSizeMB = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int MinMemory
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.minMemory;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("MinMemory"));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.minMemory = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MaxMemory
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!this.initialized)
|
||||||
|
{
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.maxMemory;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (this.initialized)
|
||||||
|
{
|
||||||
|
Logger.Error(SR.PropertyNotInitialized("MaxMemory"));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.maxMemory = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Microsoft.SqlServer.Management.Smo.Server Server
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.server;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsYukonOrLater
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.isYukonOrLater;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// private default constructor - used by Clone()
|
||||||
|
/// </summary>
|
||||||
|
private ServerPrototypeData()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// constructor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context">The context in which we are modifying an existing server</param>
|
||||||
|
/// <param name="server">The server we are modifying</param>
|
||||||
|
public ServerPrototypeData(CDataContainer context, Server server, ServerConfigService service)
|
||||||
|
{
|
||||||
|
this.server = context.Server;
|
||||||
|
this.context = context;
|
||||||
|
this.configService = service;
|
||||||
|
this.isYukonOrLater = (this.server.Information.Version.Major >= 9);
|
||||||
|
this.serverMaxMemoryProperty = this.configService.GetServerSmoConfig(server, this.configService.MaxServerMemoryPropertyNumber);
|
||||||
|
this.serverMinMemoryProperty = this.configService.GetServerSmoConfig(server, this.configService.MinServerMemoryPropertyNumber);
|
||||||
|
LoadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a clone of this ServerRolePrototypeData object
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The clone ServerRolePrototypeData object</returns>
|
||||||
|
public object Clone()
|
||||||
|
{
|
||||||
|
ServerPrototypeData result = new ServerPrototypeData();
|
||||||
|
result.serverName = this.serverName;
|
||||||
|
result.initialized = this.initialized;
|
||||||
|
result.hardwareGeneration = this.hardwareGeneration;
|
||||||
|
result.language = this.language;
|
||||||
|
result.memoryInMB = this.memoryInMB;
|
||||||
|
result.operatingSystem = this.operatingSystem;
|
||||||
|
result.platform = this.platform;
|
||||||
|
result.processors = this.processors;
|
||||||
|
result.isClustered = this.isClustered;
|
||||||
|
result.isHadrEnabled = this.isHadrEnabled;
|
||||||
|
result.isPolyBaseInstalled = this.isPolyBaseInstalled;
|
||||||
|
result.isXTPSupported = this.isXTPSupported;
|
||||||
|
result.product = this.product;
|
||||||
|
result.reservedStorageSizeMB = this.reservedStorageSizeMB;
|
||||||
|
result.rootDirectory = this.rootDirectory;
|
||||||
|
result.serverCollation = this.serverCollation;
|
||||||
|
result.serviceTier = this.serviceTier;
|
||||||
|
result.storageSpaceUsageInMB = this.storageSpaceUsageInMB;
|
||||||
|
result.version = this.version;
|
||||||
|
result.maxMemory = this.maxMemory;
|
||||||
|
result.minMemory = this.minMemory;
|
||||||
|
result.server = this.server;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadData()
|
||||||
|
{
|
||||||
|
this.initialized = true;
|
||||||
|
this.serverName = server.Name;
|
||||||
|
this.hardwareGeneration = server.HardwareGeneration;
|
||||||
|
this.language = server.Language;
|
||||||
|
this.memoryInMB = server.PhysicalMemory;
|
||||||
|
this.operatingSystem = server.HostDistribution;
|
||||||
|
this.platform = server.HostPlatform;
|
||||||
|
this.processors = server.Processors;
|
||||||
|
this.isClustered = server.IsClustered;
|
||||||
|
this.isHadrEnabled = server.IsHadrEnabled;
|
||||||
|
this.isPolyBaseInstalled = server.IsPolyBaseInstalled;
|
||||||
|
this.isXTPSupported = server.IsXTPSupported;
|
||||||
|
this.product = server.Product;
|
||||||
|
this.rootDirectory = server.RootDirectory;
|
||||||
|
this.serverCollation = server.Collation;
|
||||||
|
this.version = server.VersionString;
|
||||||
|
this.reservedStorageSizeMB = server.ReservedStorageSizeMB;
|
||||||
|
this.serviceTier = server.ServiceTier;
|
||||||
|
this.storageSpaceUsageInMB = server.UsedStorageSizeMB;
|
||||||
|
this.maxMemory = serverMaxMemoryProperty.ConfigValue;
|
||||||
|
this.minMemory = serverMinMemoryProperty.ConfigValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,13 +5,11 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.SqlServer.Management.Common;
|
|
||||||
using Microsoft.SqlServer.Management.Smo;
|
|
||||||
using Microsoft.SqlTools.ServiceLayer.Connection;
|
using Microsoft.SqlTools.ServiceLayer.Connection;
|
||||||
|
using Microsoft.SqlTools.ServiceLayer.Management;
|
||||||
using Microsoft.SqlTools.ServiceLayer.ObjectManagement.Contracts;
|
using Microsoft.SqlTools.ServiceLayer.ObjectManagement.Contracts;
|
||||||
using Microsoft.SqlTools.ServiceLayer.ObjectManagement.ObjectTypes.Server;
|
using Microsoft.SqlTools.ServiceLayer.ObjectManagement.ObjectTypes.Server;
|
||||||
using Microsoft.SqlTools.ServiceLayer.ServerConfigurations;
|
using Microsoft.SqlTools.ServiceLayer.ServerConfigurations;
|
||||||
using Microsoft.SqlTools.ServiceLayer.Utility;
|
|
||||||
|
|
||||||
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
||||||
{
|
{
|
||||||
@@ -22,7 +20,6 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
{
|
{
|
||||||
private ServerViewInfo serverViewInfo = new ServerViewInfo();
|
private ServerViewInfo serverViewInfo = new ServerViewInfo();
|
||||||
private ServerConfigService configService = new ServerConfigService();
|
private ServerConfigService configService = new ServerConfigService();
|
||||||
private Server server = null;
|
|
||||||
|
|
||||||
public ServerHandler(ConnectionService connectionService) : base(connectionService)
|
public ServerHandler(ConnectionService connectionService) : base(connectionService)
|
||||||
{
|
{
|
||||||
@@ -36,60 +33,78 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
public override Task<InitializeViewResult> InitializeObjectView(InitializeViewRequestParams requestParams)
|
public override Task<InitializeViewResult> InitializeObjectView(InitializeViewRequestParams requestParams)
|
||||||
{
|
{
|
||||||
ConnectionInfo connInfo = this.GetConnectionInfo(requestParams.ConnectionUri);
|
ConnectionInfo connInfo = this.GetConnectionInfo(requestParams.ConnectionUri);
|
||||||
ServerConnection serverConnection = ConnectionService.OpenServerConnection(connInfo, ObjectManagementService.ApplicationName);
|
|
||||||
|
|
||||||
using (var context = new ServerViewContext(requestParams, serverConnection))
|
using (var context = new ServerViewContext(requestParams, ConnectionService.OpenServerConnection(connInfo, ObjectManagementService.ApplicationName)))
|
||||||
{
|
{
|
||||||
this.server = new Server(context.Connection);
|
CDataContainer dataContainer = CDataContainer.CreateDataContainer(connInfo, databaseExists: true);
|
||||||
if (this.server != null)
|
|
||||||
|
ServerPrototype prototype = new ServerPrototype(dataContainer);
|
||||||
|
|
||||||
|
if (prototype != null)
|
||||||
{
|
{
|
||||||
this.serverViewInfo.ObjectInfo = new ServerInfo()
|
this.serverViewInfo.ObjectInfo = new ServerInfo()
|
||||||
{
|
{
|
||||||
Name = server.Name,
|
Name = prototype.Name,
|
||||||
HardwareGeneration = server.HardwareGeneration,
|
HardwareGeneration = prototype.HardwareGeneration,
|
||||||
Language = server.Language,
|
Language = prototype.Language,
|
||||||
MemoryInMB = server.PhysicalMemory,
|
MemoryInMB = prototype.MemoryInMB,
|
||||||
OperatingSystem = server.HostDistribution,
|
OperatingSystem = prototype.OperatingSystem,
|
||||||
Platform = server.HostPlatform,
|
Platform = prototype.Platform,
|
||||||
Processors = server.Processors,
|
Processors = prototype.Processors,
|
||||||
IsClustered = server.IsClustered,
|
IsClustered = prototype.IsClustered,
|
||||||
IsHadrEnabled = server.IsHadrEnabled,
|
IsHadrEnabled = prototype.IsHadrEnabled,
|
||||||
IsPolyBaseInstalled = server.IsPolyBaseInstalled,
|
IsPolyBaseInstalled = prototype.IsPolyBaseInstalled,
|
||||||
IsXTPSupported = server.IsXTPSupported,
|
IsXTPSupported = prototype.IsXTPSupported,
|
||||||
Product = server.Product,
|
Product = prototype.Product,
|
||||||
ReservedStorageSizeMB = server.ReservedStorageSizeMB,
|
ReservedStorageSizeMB = prototype.ReservedStorageSizeMB,
|
||||||
RootDirectory = server.RootDirectory,
|
RootDirectory = prototype.RootDirectory,
|
||||||
ServerCollation = server.Collation,
|
ServerCollation = prototype.ServerCollation,
|
||||||
ServiceTier = server.ServiceTier,
|
ServiceTier = prototype.ServiceTier,
|
||||||
StorageSpaceUsageInGB = (int)ByteConverter.ConvertMbtoGb(server.UsedStorageSizeMB),
|
StorageSpaceUsageInMB = prototype.StorageSpaceUsageInMB,
|
||||||
Version = server.Version.ToString(),
|
Version = prototype.Version,
|
||||||
MinServerMemory = GetServerMinMemory(),
|
MinServerMemory = prototype.MinServerMemory,
|
||||||
MaxServerMemory = GetServerMaxMemory()
|
MaxServerMemory = prototype.MaxServerMemory
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.FromResult(new InitializeViewResult { ViewInfo = this.serverViewInfo, Context = context });
|
return Task.FromResult(new InitializeViewResult { ViewInfo = this.serverViewInfo, Context = context });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task Save(ServerViewContext context, ServerInfo serverInfo)
|
public override Task Save(ServerViewContext context, ServerInfo obj)
|
||||||
{
|
{
|
||||||
throw new NotSupportedException("ServerHandler does not support Save method");
|
UpdateServerProperties(context.Parameters, obj);
|
||||||
}
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
public override Task<string> Script(ServerViewContext context, ServerInfo obj)
|
public override Task<string> Script(ServerViewContext context, ServerInfo obj)
|
||||||
{
|
{
|
||||||
throw new NotSupportedException("ServerHandler does not support Script method");
|
throw new NotSupportedException("ServerHandler does not support Script method");
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GetServerMaxMemory()
|
private void UpdateServerProperties(InitializeViewRequestParams viewParams, ServerInfo serverInfo)
|
||||||
|
{
|
||||||
|
if (viewParams != null)
|
||||||
{
|
{
|
||||||
return configService.GetServerSmoConfig(server, configService.MaxServerMemoryPropertyNumber).ConfigValue;
|
ConnectionInfo connInfo = this.GetConnectionInfo(viewParams.ConnectionUri);
|
||||||
}
|
CDataContainer dataContainer = CDataContainer.CreateDataContainer(connInfo);
|
||||||
|
|
||||||
private int GetServerMinMemory()
|
ServerPrototype prototype = new ServerPrototype(dataContainer);
|
||||||
{
|
prototype.ApplyInfoToPrototype(serverInfo);
|
||||||
return configService.GetServerSmoConfig(server, configService.MinServerMemoryPropertyNumber).ConfigValue;
|
ConfigureServer(dataContainer, ConfigAction.Update, RunType.RunNow, prototype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ConfigureServer(CDataContainer dataContainer, ConfigAction configAction, RunType runType, ServerPrototype prototype)
|
||||||
|
{
|
||||||
|
using (var actions = new ServerActions(dataContainer, prototype, configAction))
|
||||||
|
{
|
||||||
|
var executionHandler = new ExecutonHandler(actions);
|
||||||
|
executionHandler.RunNow(runType, this);
|
||||||
|
if (executionHandler.ExecutionResult == ExecutionMode.Failure)
|
||||||
|
{
|
||||||
|
throw executionHandler.ExecutionFailureException;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
public string RootDirectory { get; set; }
|
public string RootDirectory { get; set; }
|
||||||
public string ServerCollation { get; set; }
|
public string ServerCollation { get; set; }
|
||||||
public string? ServiceTier { get; set; }
|
public string? ServiceTier { get; set; }
|
||||||
public int? StorageSpaceUsageInGB { get; set; }
|
public int? StorageSpaceUsageInMB { get; set; }
|
||||||
public string Version { get; set; }
|
public string Version { get; set; }
|
||||||
public int MaxServerMemory { get; set; }
|
public int MaxServerMemory { get; set; }
|
||||||
public int MinServerMemory { get; set; }
|
public int MinServerMemory { get; set; }
|
||||||
|
|||||||
@@ -9,11 +9,13 @@ using Microsoft.SqlServer.Management.Common;
|
|||||||
using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility;
|
using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility;
|
||||||
using Microsoft.SqlTools.ServiceLayer.ObjectManagement;
|
using Microsoft.SqlTools.ServiceLayer.ObjectManagement;
|
||||||
using Microsoft.SqlTools.ServiceLayer.Connection;
|
using Microsoft.SqlTools.ServiceLayer.Connection;
|
||||||
using Microsoft.SqlServer.Management.Smo;
|
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using Microsoft.SqlTools.ServiceLayer.Test.Common;
|
using Microsoft.SqlTools.ServiceLayer.Test.Common;
|
||||||
|
|
||||||
|
using Server = Microsoft.SqlServer.Management.Smo.Server;
|
||||||
|
using Microsoft.SqlTools.ServiceLayer.ServerConfigurations;
|
||||||
|
|
||||||
namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -47,5 +49,59 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
|||||||
Assert.That(((ServerInfo)result.ViewInfo.ObjectInfo).IsPolyBaseInstalled, Is.Not.Null, $"Server isPolyBaseInstalled property should not be null");
|
Assert.That(((ServerInfo)result.ViewInfo.ObjectInfo).IsPolyBaseInstalled, Is.Not.Null, $"Server isPolyBaseInstalled property should not be null");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test SetMemoryProperties for Sql Server
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public async Task SetMemoryProperties()
|
||||||
|
{
|
||||||
|
var connectionResult = await LiveConnectionHelper.InitLiveConnectionInfoAsync("master", serverType: TestServerType.OnPrem);
|
||||||
|
using (SqlConnection sqlConn = ConnectionService.OpenSqlConnection(connectionResult.ConnectionInfo))
|
||||||
|
{
|
||||||
|
var server = new Server(new ServerConnection(sqlConn));
|
||||||
|
var serverHandler = new ServerHandler(ConnectionService.Instance);
|
||||||
|
var serverConfig = new ServerConfigService();
|
||||||
|
|
||||||
|
var requestParams = ObjectManagementTestUtils.GetInitializeViewRequestParams(connectionResult.ConnectionInfo.OwnerUri, "master", true, SqlObjectType.Server, "", "");
|
||||||
|
var result = (ServerInfo)(await serverHandler.InitializeObjectView(requestParams)).ViewInfo.ObjectInfo;
|
||||||
|
ServerInfo serverInfo = new ServerInfo()
|
||||||
|
{
|
||||||
|
Name = result.Name,
|
||||||
|
HardwareGeneration = result.HardwareGeneration,
|
||||||
|
Language = result.Language,
|
||||||
|
MemoryInMB = result.MemoryInMB,
|
||||||
|
OperatingSystem = result.OperatingSystem,
|
||||||
|
Platform = result.Platform,
|
||||||
|
Processors = result.Processors,
|
||||||
|
IsClustered = result.IsClustered,
|
||||||
|
IsHadrEnabled = result.IsHadrEnabled,
|
||||||
|
IsPolyBaseInstalled = result.IsPolyBaseInstalled,
|
||||||
|
IsXTPSupported = result.IsXTPSupported,
|
||||||
|
Product = result.Product,
|
||||||
|
ReservedStorageSizeMB = result.ReservedStorageSizeMB,
|
||||||
|
RootDirectory = result.RootDirectory,
|
||||||
|
ServerCollation = result.ServerCollation,
|
||||||
|
ServiceTier = result.ServiceTier,
|
||||||
|
StorageSpaceUsageInMB = result.StorageSpaceUsageInMB,
|
||||||
|
Version = result.Version,
|
||||||
|
MinServerMemory = result.MinServerMemory,
|
||||||
|
MaxServerMemory = result.MaxServerMemory
|
||||||
|
};
|
||||||
|
|
||||||
|
// Change memory settings
|
||||||
|
serverInfo.MinServerMemory = 10;
|
||||||
|
serverInfo.MaxServerMemory = 500;
|
||||||
|
|
||||||
|
Assert.AreNotEqual(result.MinServerMemory, serverInfo.MinServerMemory, "Server property should not be equal after update");
|
||||||
|
Assert.AreNotEqual(result.MaxServerMemory, serverInfo.MaxServerMemory, "Server property should not be equal after update");
|
||||||
|
|
||||||
|
await ObjectManagementTestUtils.SaveObject(requestParams, serverInfo);
|
||||||
|
result = (ServerInfo)(await serverHandler.InitializeObjectView(requestParams)).ViewInfo.ObjectInfo;
|
||||||
|
Assert.IsNotNull(result);
|
||||||
|
Assert.AreEqual(result.MinServerMemory, serverInfo.MinServerMemory, "Server property should not be different after update");
|
||||||
|
Assert.AreEqual(result.MaxServerMemory, serverInfo.MaxServerMemory, "Server property should not be different after update");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user