From 954df47ec95efba7071e7d64947bd28726538688 Mon Sep 17 00:00:00 2001 From: Justin M <63619224+JustinMDotNet@users.noreply.github.com> Date: Mon, 2 Nov 2020 15:35:37 -0800 Subject: [PATCH] 13159 Kusto Aria Fix (#1112) * 13159 Changed NodeValue in TreeNode to PrettyName instead of Name. In KustoDataSource, changed Exists to run different query for Aria. Changed GetClusterDiagnostics to return empty DiagnosticsInfo for Aria. Changed SetDatabaseMetadata to not includeSizeDetails for Aria connections. * 13159 Fixed unit test Refresh_Returns_Children --- .../DataSource/KustoDataSource.cs | 59 +++++++++++-------- .../ObjectExplorer/Nodes/TreeNode.cs | 2 +- .../DataSourceModel/ServerNodeTests.cs | 2 +- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/Microsoft.Kusto.ServiceLayer/DataSource/KustoDataSource.cs b/src/Microsoft.Kusto.ServiceLayer/DataSource/KustoDataSource.cs index 6366b3f8..95458e99 100644 --- a/src/Microsoft.Kusto.ServiceLayer/DataSource/KustoDataSource.cs +++ b/src/Microsoft.Kusto.ServiceLayer/DataSource/KustoDataSource.cs @@ -118,10 +118,16 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource { try { - CancellationTokenSource source = new CancellationTokenSource(); - CancellationToken token = source.Token; + var source = new CancellationTokenSource(); - var count = await ExecuteScalarQueryAsync(".show databases | count", token); + if (ClusterName.Contains(AriaProxyURL, StringComparison.OrdinalIgnoreCase)) + { + + var result = await ExecuteScalarQueryAsync(".show databases | take 1 | project DatabaseName", source.Token); + return !string.IsNullOrWhiteSpace(result); + } + + var count = await ExecuteScalarQueryAsync(".show databases | count", source.Token); return count >= 0; } catch @@ -136,21 +142,25 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource private DiagnosticsInfo GetClusterDiagnostics() { - CancellationTokenSource source = new CancellationTokenSource(); - CancellationToken token = source.Token; - DiagnosticsInfo clusterDiagnostics = new DiagnosticsInfo(); + if (ClusterName.Contains(AriaProxyURL, StringComparison.CurrentCultureIgnoreCase)) + { + return new DiagnosticsInfo(); + } + + var source = new CancellationTokenSource(); + var clusterDiagnostics = new DiagnosticsInfo(); var query = ".show diagnostics | extend Passed= (IsHealthy) and not(IsScaleOutRequired) | extend Summary = strcat('Cluster is ', iif(Passed, '', 'NOT'), 'healthy.'),Details=pack('MachinesTotal', MachinesTotal, 'DiskCacheCapacity', round(ClusterDataCapacityFactor,1)) | project Action = 'Cluster Diagnostics', Category='Info', Summary, Details;"; - using (var reader = _kustoClient.ExecuteQuery(query, token)) + using (var reader = _kustoClient.ExecuteQuery(query, source.Token)) + { + while (reader.Read()) { - while(reader.Read()) - { - var details = JsonConvert.DeserializeObject>(reader["Details"].ToString()); - clusterDiagnostics.Options["summary"] = reader["Summary"].ToString(); - clusterDiagnostics.Options["machinesTotal"] = details["MachinesTotal"].ToString(); - clusterDiagnostics.Options["diskCacheCapacity"] = details["DiskCacheCapacity"].ToString() + "%"; - } + var details = JsonConvert.DeserializeObject>(reader["Details"].ToString()); + clusterDiagnostics.Options["summary"] = reader["Summary"].ToString(); + clusterDiagnostics.Options["machinesTotal"] = details["MachinesTotal"].ToString(); + clusterDiagnostics.Options["diskCacheCapacity"] = details["DiskCacheCapacity"].ToString() + "%"; } + } return clusterDiagnostics; } @@ -163,22 +173,25 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource SetDatabaseMetadata(includeSizeDetails); } - return _databaseMetadata; + return _databaseMetadata.OrderBy(x => x.PrettyName); } private void SetDatabaseMetadata(bool includeSizeDetails) { + if (ClusterName.Contains(AriaProxyURL, StringComparison.CurrentCultureIgnoreCase)) + { + includeSizeDetails = false; + } + CancellationTokenSource source = new CancellationTokenSource(); CancellationToken token = source.Token; // Getting database names when we are connected to a specific database should not happen. ValidationUtils.IsNotNull(DatabaseName, nameof(DatabaseName)); - var query = ".show databases" + (this.ClusterName.IndexOf(AriaProxyURL, StringComparison.CurrentCultureIgnoreCase) == -1 ? " | project DatabaseName, PrettyName" : ""); - - if (includeSizeDetails == true){ - query = ".show cluster extents | summarize sum(OriginalSize) by tostring(DatabaseName)"; - } + var query = includeSizeDetails + ? ".show cluster extents | summarize sum(OriginalSize) by tostring(DatabaseName)" + : ".show databases | project DatabaseName, PrettyName"; using (var reader = _kustoClient.ExecuteQuery(query, token)) { @@ -189,10 +202,10 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource ClusterName = this.ClusterName, MetadataType = DataSourceMetadataType.Database, MetadataTypeName = DataSourceMetadataType.Database.ToString(), - SizeInMB = includeSizeDetails == true ? row["sum_OriginalSize"].ToString() : null, + SizeInMB = includeSizeDetails ? row["sum_OriginalSize"].ToString() : "", Name = row["DatabaseName"].ToString(), - PrettyName = includeSizeDetails == true ? row["DatabaseName"].ToString(): (String.IsNullOrEmpty(row["PrettyName"]?.ToString()) ? row["DatabaseName"].ToString() : row["PrettyName"].ToString()), - Urn = $"{this.ClusterName}.{row["DatabaseName"].ToString()}" + PrettyName = includeSizeDetails ? row["DatabaseName"].ToString(): (string.IsNullOrEmpty(row["PrettyName"]?.ToString()) ? row["DatabaseName"].ToString() : row["PrettyName"].ToString()), + Urn = $"{ClusterName}.{row["DatabaseName"]}" }) .Materialize() .OrderBy(row => row.Name, StringComparer.Ordinal); // case-sensitive diff --git a/src/Microsoft.Kusto.ServiceLayer/ObjectExplorer/Nodes/TreeNode.cs b/src/Microsoft.Kusto.ServiceLayer/ObjectExplorer/Nodes/TreeNode.cs index 86d2a09f..8ffacbab 100644 --- a/src/Microsoft.Kusto.ServiceLayer/ObjectExplorer/Nodes/TreeNode.cs +++ b/src/Microsoft.Kusto.ServiceLayer/ObjectExplorer/Nodes/TreeNode.cs @@ -51,7 +51,7 @@ namespace Microsoft.Kusto.ServiceLayer.ObjectExplorer.Nodes { DataSource = dataSource; ObjectMetadata = objectMetadata; - NodeValue = objectMetadata.Name; + NodeValue = objectMetadata.PrettyName; } private object buildingMetadataLock = new object(); diff --git a/test/Microsoft.Kusto.ServiceLayer.UnitTests/ObjectExplorer/DataSourceModel/ServerNodeTests.cs b/test/Microsoft.Kusto.ServiceLayer.UnitTests/ObjectExplorer/DataSourceModel/ServerNodeTests.cs index 4407226f..f70f97ae 100644 --- a/test/Microsoft.Kusto.ServiceLayer.UnitTests/ObjectExplorer/DataSourceModel/ServerNodeTests.cs +++ b/test/Microsoft.Kusto.ServiceLayer.UnitTests/ObjectExplorer/DataSourceModel/ServerNodeTests.cs @@ -154,7 +154,7 @@ namespace Microsoft.Kusto.ServiceLayer.UnitTests.ObjectExplorer.DataSourceModel Assert.AreEqual(childMetadata.MetadataTypeName, child.NodeType); Assert.AreEqual(NodeTypes.Database, child.NodeTypeId); - Assert.AreEqual(childMetadata.Name, child.NodeValue); + Assert.AreEqual(childMetadata.PrettyName, child.NodeValue); } } } \ No newline at end of file