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 private link access context * Some refactor and add changes for ONE_LAKE_UPLOAD test * Fix uploader using DFS * Add additional test context for failures * Add error details * Add some info on ClientDetails --------- Co-authored-by: Tanmaya Panda <tanmayapanda@microsoft.com>
* * Refactor to add GZIP Compression * Add a simple streaming sample * Fix issue with compression on Streaming data ingest * Fix copilot review comments * Fix imports * Add assertions --------- Co-authored-by: Tanmaya Panda <tanmayapanda@microsoft.com>
* Remove lints
* * Make signatures consistent for all sources
* Reformat code * Add alias for tests
* Added Unit tests for coverage * Rebase changes base branch * Reformat tests --------- Co-authored-by: ag-ramachandran <ramacg@microsoft.com>
* * Fix review comments - Make the IngestRequestProperties optional * * Fix review comments - Make sure some of the validations like passing IngestionReference and mapping cannot be passed together * * Fix review comments - Make sure some of the validations like passing IngestionReference and mapping cannot be passed together * Add tests for QueuedIngest with inline mapping * * Fix breaking changes to IngestRequestProperties * * Add tests for IngestRequestProperties being optional * * Remove baseName parameter * * Fix review comments * * Fix review comments * * Fix review comments * * Fix review comments
* 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
Outdated
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
Outdated
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#
* addressed review comments * addressed review comments * simplified container selection logic and added tests
* added CachingTokenCredential for concurrent azcli token handling * simplified token generation and access
* Apply formatter and add documentation * * Reformat files
Initial work on the IngestV2 API