Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR introduces the initial work on the IngestV2 API, implementing a new Kotlin-based ingestion service alongside the existing Java implementation. The major change is upgrading the project from Java 8 to Java 11 and updating various dependencies to support the new ingest-v2 module.
- Project upgraded from Java 8 to Java 11 with dependency version updates
- New ingest-v2 module written in Kotlin with modern async capabilities
- Centralized dependency management moved to root POM for consistency
Reviewed Changes
Copilot reviewed 29 out of 29 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| pom.xml | Upgraded Java version, updated dependencies, added ingest-v2 module, centralized dependency management |
| ingest/pom.xml | Removed duplicate dependency management, cleaned up version specifications |
| data/pom.xml | Removed duplicate dependency management, cleaned up version specifications |
| ingest-v2/pom.xml | Complete new module configuration with Kotlin, Ktor, and OpenAPI generation |
| ingest-v2/src/main/resources/openapi.yaml | OpenAPI specification for the new ingest REST API |
| ingest-v2/src/main/kotlin/... | Core Kotlin implementation files for authentication, retry policies, data sources, and API clients |
| ingest-v2/src/test/kotlin/... | Unit tests for retry policies and configuration API |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
...main/kotlin/com/microsoft/azure/kusto/ingest/v2/common/auth/AzCliTokenCredentialsProvider.kt
Outdated
Show resolved
Hide resolved
ingest-v2/src/main/kotlin/com/microsoft/azure/kusto/ingest/v2/source/BlobSource.kt
Outdated
Show resolved
Hide resolved
ingest-v2/src/main/kotlin/com/microsoft/azure/kusto/ingest/v2/source/LocalSource.kt
Outdated
Show resolved
Hide resolved
ingest-v2/src/main/kotlin/com/microsoft/azure/kusto/ingest/v2/common/utils/PathUtils.kt
Outdated
Show resolved
Hide resolved
* added code for wellknown kusto endpoints * addressed review comments
* fixed review comments --------- Co-authored-by: ag-ramachandran <ramacg@microsoft.com>
* * Fix method signature for uploads * * Minor edit to ConfigurationCache to determine refresh interval logic * * Additional tests for preferred upload combinations * * Reformat tests * Add tests for duration
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 110 out of 116 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
...t-v2/src/main/kotlin/com/microsoft/azure/kusto/ingest/v2/builders/BaseIngestClientBuilder.kt
Show resolved
Hide resolved
| @@ -0,0 +1,119 @@ | |||
| // Copyright (c) Microsoft Corporation. | |||
| // Licensed under the MIT License. | |||
| package com.microsoft.azure.kusto.ingest.v2.auth.endpoints | |||
There was a problem hiding this comment.
I don't like that we have to duplicate these entire classes.
I know we discussed before dependencies on the data package, but at this point we need to reconsider if it leaves us with this much duplicate code.
...t-v2/src/main/kotlin/com/microsoft/azure/kusto/ingest/v2/builders/BaseIngestClientBuilder.kt
Show resolved
Hide resolved
|
|
||
| protected abstract fun self(): T | ||
|
|
||
| fun withAuthentication(credential: TokenCredential): T { |
There was a problem hiding this comment.
In .net, we have withNoAuthentication, here you don't, and instead throw an error if it's not called.
Either it should be part of the main ctor, or should work like c#
| } | ||
|
|
||
| companion object { | ||
| protected fun normalizeAndCheckEngineUrl(clusterUrl: String): String { |
There was a problem hiding this comment.
These methods are wrong.
See the java getIngestionEndpoint, we have more rules there for special urls. It's also more efficient without constantly building regexes.
Another reason I think to depend on kusto-data.
| * sent directly to the Data Management service. | ||
| */ | ||
| @JvmName("ingestAsync") | ||
| fun ingestAsyncJava( |
There was a problem hiding this comment.
So all of these methods are not part of the interface?
So if someone uses the interface the can't use it in java?
| * Atomic counter for round-robin container selection. Increments on each | ||
| * upload to distribute load evenly across containers. | ||
| */ | ||
| private val containerIndexCounter = AtomicInteger(0) |
There was a problem hiding this comment.
Maybe I'm missing something, but that's not what we want -
This has a counter per uploader.
Here, if uploader A and uploader B (sharing the same configurationcache) upload, they will both use storage 0 first.
The state should be a part of the specific list inside configuration cache - so uploader A will use storage 0, and uploader B will use storage 1. See how we do it in c#
Initial work on the IngestV2 API