Skip to content

[WIP] manage cluster capacity policy via KST #106

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 24 commits into
base: main
Choose a base branch
from

Conversation

ashleyvansp
Copy link

No description provided.

@Copilot Copilot AI review requested due to automatic review settings June 23, 2025 20:29
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces support for managing Kusto cluster capacity policies via KST by adding a new model, loader, and writer, and wiring them into the schema handler and database factory. It also updates JSON serialization to omit null values.

  • Define ClusterCapacityPolicy model with JSON serialization and script generation
  • Implement loader (ClusterCapacityPolicyLoader) and writer (ClusterCapacityPolicyWriter)
  • Wire capacity policy handling into KustoDatabaseHandlerFactory and KustoSchemaHandler

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
Parser/KustoWriter/ClusterCapacityPolicyWriter.cs Writes .alter-merge cluster policy capacity commands
Parser/KustoLoader/ClusterCapacityPolicyLoader.cs Loads existing cluster capacity policy via .show query
Parser/KustoDatabaseHandlerFactory.cs Adds ClusterCapacityPolicyLoader and writer to factory
Model/Clusters.cs Adds CapacityPolicy property to clusters config
Model/ClusterCapacityPolicy.cs Defines capacity policy model and script creation
KustoSchemaHandler.cs Refactors handler to include capacity policy writer
Helpers/Serialization.cs Ignores nulls in JSON serialization
Tests/DemoData/.../partial-cluster-policy.yml Adds partial policy sample for tests
Tests/DemoData/.../comprehensive-cluster-policy.yml Adds full policy sample for tests
KustoSchemaTools.Tests/ClusterCapacityPolicyTests.cs Tests capacity policy loading, serialization, and script
Comments suppressed due to low confidence (2)

KustoSchemaTools.Tests/ClusterCapacityPolicyTests.cs:1

  • Missing using Xunit; and using System.IO; directives, which are required for the [Fact] attribute and for Path/File usage in this test file.
using KustoSchemaTools.Helpers;

KustoSchemaTools/Parser/KustoLoader/ClusterCapacityPolicyLoader.cs:24

  • The deserialized capacityPolicy is not stored on the database model, so the existing policy won't be tracked for comparison. Consider assigning it to database.CapacityPolicy.
                    var capacityPolicy = JsonConvert.DeserializeObject<ClusterCapacityPolicy>(capacityPolicyData);

private IDatabaseHandler<T> CreateDatabaseHandlerWithCapacityPolicy(string clusterUrl, string databaseName, ClusterCapacityPolicy? capacityPolicy)
{
// Create a logger - in a real application this would come from DI
var loggerFactory = LoggerFactory.Create(builder => { });
Copy link
Preview

Copilot AI Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Instantiating a new LoggerFactory on each call is expensive; consider reusing a shared ILoggerFactory or injecting it once to reduce allocations.

Copilot uses AI. Check for mistakes.

// For now, we don't need to store it as we're only applying changes
}
}
catch (Exception)
Copy link
Preview

Copilot AI Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Catching a broad Exception without any logging may hide underlying issues during load; consider logging a warning with exception details.

Copilot uses AI. Check for mistakes.

Comment on lines 55 to 56
return new KustoDatabaseHandlerFactory<T>(logger)
.WithReader<KustoDatabasePrincipalLoader>()
Copy link
Preview

Copilot AI Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The reader/writer setup chain is duplicated between CreateDefault and CreateDatabaseHandlerWithCapacityPolicy; extract into a shared helper to adhere to DRY principles.

Suggested change
return new KustoDatabaseHandlerFactory<T>(logger)
.WithReader<KustoDatabasePrincipalLoader>()
var factory = new KustoDatabaseHandlerFactory<T>(logger);
factory.AddDefaultReadersAndWriters();
return factory.Create(cluster, database);
}
private void AddDefaultReadersAndWriters()
{
WithReader<KustoDatabasePrincipalLoader>()

Copilot uses AI. Check for mistakes.

var diagnostics = parsedScript.GetDiagnostics();
if (diagnostics.Any())
{
Console.WriteLine($"Generated script: {diagnostics[0]}");

Check warning

Code scanning / CodeQL

Use of default ToString() Warning

Default 'ToString()':
Diagnostic
inherits 'ToString()' from 'Object', and so is not suitable for printing.

Copilot Autofix

AI 3 days ago

To fix the issue, we need to ensure that the Diagnostic class (or its equivalent) overrides the ToString() method to provide a meaningful string representation of its contents. This could include details such as the diagnostic message, severity, and location. Since the Diagnostic class is not defined in the provided snippet, we will assume it is part of the Kusto.Language namespace or another imported library. If it is a custom class, we will need to locate and modify its definition.

If the Diagnostic class is part of an external library and cannot be modified directly, an alternative approach is to explicitly format the diagnostic information in the ToUpdateScript method before passing it to Console.WriteLine.


Suggested changeset 1
KustoSchemaTools/Model/ClusterCapacityPolicy.cs

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/KustoSchemaTools/Model/ClusterCapacityPolicy.cs b/KustoSchemaTools/Model/ClusterCapacityPolicy.cs
--- a/KustoSchemaTools/Model/ClusterCapacityPolicy.cs
+++ b/KustoSchemaTools/Model/ClusterCapacityPolicy.cs
@@ -79,3 +79,3 @@
             {
-                Console.WriteLine($"Generated script: {diagnostics[0]}");
+                Console.WriteLine($"Generated script: {diagnostics[0].Message} (Severity: {diagnostics[0].Severity}, Location: {diagnostics[0].Location})");
 
EOF
@@ -79,3 +79,3 @@
{
Console.WriteLine($"Generated script: {diagnostics[0]}");
Console.WriteLine($"Generated script: {diagnostics[0].Message} (Severity: {diagnostics[0].Severity}, Location: {diagnostics[0].Location})");

Copilot is powered by AI and may make mistakes. Always verify output.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant