reverse merge#155
Open
deepthi912 wants to merge 747 commits into
Open
Conversation
…llLeafStagesEmpty tests longer (#18619)
…SHOW CREATE / DROP (#18544) Adds Pinot-native SQL DDL for managing materialized views end to end, served through the same POST /sql/ddl endpoint as plain-table DDL. Supported statements: CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]name [(<column list>)] [REFRESH EVERY 'period'] PROPERTIES ('timeColumnName' = 't', 'bucketTimePeriod' = '1d', ...) AS <Pinot SELECT> SHOW MATERIALIZED VIEWS [FROM db] SHOW CREATE MATERIALIZED VIEW [db.]name DROP MATERIALIZED VIEW [IF EXISTS] [db.]name CREATE MATERIALIZED VIEW supports two forms: - Explicit column list: every column is declared in the DDL. - Inferred column list: the column list is omitted and the storage schema is derived from the AS <SELECT>. Data type comes from Calcite's validated row type; the time column is pinned to canonical TIMESTAMP with `1:MILLISECONDS:TIMESTAMP` format; recognised aggregations from MaterializedViewAggregationCatalog use the catalog's storage type (load-bearing BYTES override for raw-sketch aggregations). Both forms produce identical materialized-view storage from the data plane's perspective. SHOW CREATE MATERIALIZED VIEW always renders the canonical form with an explicit column list, so the round-trip through DDL is stable in either case. Validation: - The MV analyzer (pinot-materialized-view) rejects malformed task knobs (bucketTimePeriod, bufferTimePeriod, maxNumRecordsPerSegment, maxTasksPerBatch, stalenessThresholdMs) at CREATE time. - The MV consistency manager's reverse-index rebuild skips orphan definition znodes whose TableConfig is missing or non-MV, with a WARN log — preventing ghost MVs after a partial DROP. - DROP TABLE / DROP MATERIALIZED VIEW restore task schedules when deleteTable rejects the drop (e.g. blocked by a dependent MV). - CREATE MATERIALIZED VIEW IF NOT EXISTS race-catch paths verify isMaterializedView() before returning 200; a concurrent plain OFFLINE create surfaces as 409, not a silent success. - The HTTP-header database is threaded into the compile context so the inferer resolves source-table references under the operator's intended database. - POST /sql/ddl no longer wraps RuntimeException as 400 — programmer errors propagate to JAX-RS as 500 so monitoring fires. Signed-off-by: Hongkun Xu <xuhongkun666@163.com> Co-authored-by: Xiang Fu <xiangfu@startree.ai> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…termittent clean install failures (#18623)
--------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [Query Resource Isolation] Use Reflection for Custom Class registration (#70) * Interface * Interface framework * Interface framework * QRI minor improvements (#73) * Fix canAdmitQuery (#84) * [Query Resource Isolation] Misc fixes and additions (#83) * startup budget * startup * Integ test * review comments * Fix canAdmitQuery * review comments on debug api * QRI Metrics for Broker/Server (#91) * workload metric * review comments * Add Getter in WorkloadBudgetManager (#93) * getter * getter * [Query Resource Isolation] Refresh workload budget for tables/tenant (#95) * Qri refresh API * refresh on broker and server update * Fix null workload (#100) * Support External HTTPS Port in InstanceConfig for SSL-Terminated Controllers (#101) * https port * empty * [QRI] Optimize Query Workload Propagation with Batching and Deduplication (#111) * Qri refresh API * refresh on broker and server update * review comments * Optimize QRI refresh messaging * http direct instance call * executor * async request * Executor * remove executor * assign instance * async client improvements * workload propagation client * review comments 2 * Async (#115) * Move workload config fetch to background thread to avoid blocking main-thread during startup (#124) * fix blocking * fix blocking * metrics * Admin Port for broker (#138) * admin port * admin port * Style fix
The /tables/{name}/pauseStatus endpoint returned only a boolean pauseFlag
with no information about which topics were individually paused via the
topic-level pause API. This change surfaces the list of inactive topic
indices already stored in PauseState so callers can see per-topic pause
state without inspecting ZooKeeper directly.
Changes:
- PauseStatusDetails: add indexOfInactiveTopics field with proper
@JsonProperty binding in @JsonCreator for correct round-trip
serialization; return List.copyOf to avoid aliasing PauseState internals;
annotate getter @nullable since the field is omitted when empty
- PinotLLCRealtimeSegmentManager.getPauseStatusDetails: pass
pauseState.getIndexOfInactiveTopics() through to PauseStatusDetails,
removing the TODO comment
- Tests: add round-trip JSON test and getPauseStatusDetails unit test
covering the inactive-topics code path
Co-authored-by: wolfkill <27876473+wolfkill@users.noreply.github.com>
Co-authored-by: wolfkill <27876473+wolfkill@users.noreply.github.com>
Co-authored-by: wolfkill <27876473+wolfkill@users.noreply.github.com>
Co-authored-by: wolfkill <27876473+wolfkill@users.noreply.github.com>
* Fix MinionSubTaskHighWaitTime alert to self-resolve using gauge Replace ControllerTimer.SUBTASK_WAITING_TIME (histogram) with a new MAX_SUBTASK_WAIT_TIME_MS gauge in TaskMetricsEmitter. The timer's _Max stat retains its peak value across emission cycles and does not decay when the queue drains, causing the alert to stay firing after all subtasks have finished. The new gauge is written every cycle with the current max wait time across waiting subtasks for each (table, taskType) pair, defaulting to 0 when no subtasks are waiting, so the alert self-resolves on the next emit cycle. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * Remove unused SUBTASK_WAITING_TIME timer — replaced by MAX_SUBTASK_WAIT_TIME_MS gauge Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * Replace SUBTASK_RUNNING_TIME timer with MAX_SUBTASK_RUNNING_TIME_MS gauge Timer histograms retain peak _Max values across emit cycles and never decay, preventing alerts from self-resolving. Replace with a per-table gauge that writes the current max running time each cycle (0 when no running subtasks), matching the same approach used for MAX_SUBTASK_WAIT_TIME_MS. Also removes the now-unused SUBTASK_RUNNING_TIME ControllerTimer entry and its imports from TaskMetricsEmitter. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ndler (#18639) Adds a MaterializedViewDdlHandler extension point so CREATE MATERIALIZED VIEW can target an alternative engine / minion task type. The default handler targets the single-stage engine (re-compiles the AS-clause as a single-stage Pinot query, rejecting JOIN / multi-source, routes under MaterializedViewTask); a downstream distribution can register an MSE handler that accepts joins and stamps its own task type. The handler — installed via DdlCompiler.setMaterializedViewDdlHandler — owns engine-specific verification (validateDefinedQuery) and whether projection schema inference is allowed (supportsSchemaInference). DdlCompiler fails fast with a clear message if a handler returns a null/unstamped task type. MaterializedViewPropertyRouter.apply gains a taskType-parameterized overload, and the "MV's own task type" matching is generalized from the hard-coded MaterializedViewTask to that task type so task.<taskType>.* knobs route correctly (and are not dropped) for custom task types. Documents the extension-point contract: a handler stamping a non-built-in task type owns that type's complete runtime including definition-metadata persistence and consistency tracking. The built-in controller-side MV machinery (MaterializedViewDefinitionMetadata persistence + MaterializedViewConsistencyManager) keys on MaterializedViewTask and now intentionally and explicitly skips MVs stamped with a different task type (logged at INFO, not WARN), leaving freshness/consistency to the owning task type. Behavior is unchanged when no alternative handler is registered. All pinot-sql-ddl tests pass. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* adding new configs in controllercong * adding constructors for cron expression acceptance * adding constructors for cron expression acceptance * adding quartz scheduler for cron job scheduling * fixing issues * fixing tests * fixing tests * unit tests for cron changes * removing unnecessary comments * fixing issues * fixing issues * fixing issues * fixing minor issues * fixing minor issues * fixing minor issues * improving code quality * resolving comments * fixing checkstyle violations * Delete pinot-controller/src/main/java/org/apache/pinot/controller/cursors/ResponseStoreCleaner.java * addressing comments * resolving comments * addressing comments * addressing comments * resolving comments * resolving comments * fixing failing CI
…18502) Step toward removing the long-deprecated TimeFieldSpec (#2756). 1. Formal deprecation - Add the @deprecated annotation to TimeFieldSpec (it had only Javadoc @deprecated before) and to Schema#getTimeFieldSpec so the compiler and IDE actually warn on call sites. - Narrow @SuppressWarnings("deprecation") on internal SPI bridges that intentionally keep handling TimeFieldSpec for backward-compat JSON deserialization (FieldSpec @JsonSubTypes, Schema#addField, the _timeFieldSpec field, getSpecForTimeColumn, convertToDateTimeFieldSpec) so the SPI module stays warning-clean. 2. Block new TimeFieldSpec schema creation - Reject schemas with fieldType=TIME in the REST-driven overload SchemaUtils.validate(schema, tableConfigs, isIgnoreCase). POST, PUT, and /schemas/validate all uniformly reject and point users at DateTimeFieldSpec and #2756. - The check is deliberately NOT placed in the single-arg SchemaUtils.validate(schema) used by server-side schema loading (RealtimeTableDataManager, TableConfigsRestletResource, SchemaValidator) so existing legacy schemas in ZK keep loading. - Migrate the shared integration-test schema fixtures (On_Time_*, test_null_handling, upsert_upload_segment_test, dedupIngestionTestSchema, kinesis/airlineStats_data_reduced) from TimeFieldSpec to DateTimeFieldSpec. Rolling-upgrade note: during a mixed-version controller deployment, newer controllers reject schemas containing TimeFieldSpec via the REST API while older controllers still accept them. Existing schemas in ZK and segment generation continue to work on both versions. A follow-up PR will add a controller rewrite step to migrate the remaining legacy schemas in ZK automatically. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
… assignment (#18645) Subclasses can already customize multi-stage worker selection by overriding getCandidateServers / getCandidateServersForReplicatedLeaf, but the per-worker segment assignment is finalized internally with no extension point. This adds two protected no-op hooks invoked once the assignment is built: filterLeafStageSegments (from updateContextForLeafStage, covering the non-partitioned, partitioned and logical-table paths) and filterReplicatedLeafStageSegments (from setSegmentsForReplicatedLeafFragment). A subclass can rewrite DispatchablePlanMetadata's worker/replicated segment maps via the existing setters. Both default to no-ops, so behavior is unchanged.
Bumps [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) from 4.1.0 to 4.2.0. - [Release notes](https://github.com/typetools/checker-framework/releases) - [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md) - [Commits](typetools/checker-framework@checker-framework-4.1.0...checker-framework-4.2.0) --- updated-dependencies: - dependency-name: org.checkerframework:checker-qual dependency-version: 4.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps software.amazon.awssdk:bom from 2.44.14 to 2.46.0. --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.46.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [org.jline:jline](https://github.com/jline/jline3) from 4.1.2 to 4.1.3. - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@4.1.2...4.1.3) --- updated-dependencies: - dependency-name: org.jline:jline dependency-version: 4.1.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [com.nimbusds:nimbus-jose-jwt](https://bitbucket.org/connect2id/nimbus-jose-jwt) from 10.9 to 10.9.1. - [Changelog](https://bitbucket.org/connect2id/nimbus-jose-jwt/src/master/CHANGELOG.txt) - [Commits](https://bitbucket.org/connect2id/nimbus-jose-jwt/branches/compare/10.9.1..10.9) --- updated-dependencies: - dependency-name: com.nimbusds:nimbus-jose-jwt dependency-version: 10.9.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…mplementations (#18640) * Move partial-upsert resolveComparisonTies from base wrapper into subclasses The base addOrReplaceSegment wrapper in BasePartitionUpsertMetadataManager existed only to call resolveComparisonTies for partial-upsert before delegating to the subclass-specific doAddOrReplaceSegment. This made the abstract doAddOrReplaceSegment signature redundant with its only caller. Inline the wrapper: callers now invoke doAddOrReplaceSegment directly, and the resolveComparisonTies call moves into ConcurrentMapPartitionUpsertMetadataManager and ConcurrentMapPartitionUpsertMetadataManagerForConsistentDeletes (the only two non-abstract subclasses). Removes one virtual call per segment add/replace and eliminates a layer of indirection. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Fix Checkstyle line-length violation in BasePartitionUpsertMetadataManager Line 661 was 121 chars; wrap argument list so each line stays ≤120. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rebased onto master; resolves review feedback on #18869: markdown javadoc + UuidKey extracted to its own class + dropped per-value null checks and the defensive byte[] copy in UuidUtils; UUID placed right after its stored type BYTES in the enum/switches and dropped the fragile ordinal-append hack; removed the FieldSpec default-null defensive copy; restored fromUUIDBytes null-on-exception (back-compat); PinotDataType STRING->UUID now trims; added UUID version/timestamp/generator tests. Part 1/8 of splitting #18140 (logical UUID type).
Bumps software.amazon.awssdk:bom from 2.46.20 to 2.46.21. --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.46.21 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps `log4j.version` from 2.26.0 to 2.26.1. Updates `org.apache.logging.log4j:log4j-bom` from 2.26.0 to 2.26.1 - [Release notes](https://github.com/apache/logging-log4j2/releases) - [Changelog](https://github.com/apache/logging-log4j2/blob/2.x/RELEASE-NOTES.adoc) - [Commits](apache/logging-log4j2@rel/2.26.0...rel/2.26.1) Updates `org.apache.logging.log4j:log4j-1.2-api` from 2.26.0 to 2.26.1 --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-bom dependency-version: 2.26.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.apache.logging.log4j:log4j-1.2-api dependency-version: 2.26.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…18842) mergeDataTablesOnly reused getIndexedTable, which unconditionally called indexedTable.finish(true, true). For a GROUP BY query with an OBJECT-typed intermediate aggregate (DISTINCTCOUNT, DISTINCTCOUNTHLL, etc.), that storeFinalResult=true call: - mutated DataSchema._columnDataTypes from OBJECT to the final-result type in place (IndexedTable.java:170-174), and - replaced each row's value with extractFinalResult(value) (Set → Integer for DISTINCTCOUNT) at IndexedTable.java:195. The subsequent buildIntermediateDataTable read DataSchema's cached _storedColumnDataTypes — populated earlier from the pre-finalize OBJECT schema and never invalidated by finish — so the OBJECT branch fired and handed the now-Integer value into BaseDistinctAggregateAggregationFunction.serializeIntermediateResult(Set), which threw ClassCastException. Fix: move finish() out of getIndexedTable and let each caller pick the right mode. reduceResult keeps finish(true, true) (downstream consumers expect final scalars). mergeDataTablesOnly calls finish(true, false) so aggregate values stay as intermediates and round-trip through buildIntermediateDataTable correctly. Adds a testGroupByDistinctCountObjectRoundTrip regression: server emits intermediate OBJECT-encoded Sets, merge produces a re-injectable intermediate DataTable, and reducing that intermediate matches a direct reduce of the same servers.
#18927) Establish a consistent internal/external representation for the UUID type: - PinotDataType: java.util.UUID is the external form and byte[] the internal form. UUID.convert / UUID_ARRAY.convert return UUID / UUID[], while toInternal returns byte[] / byte[][]. UUID.convert delegates to sourceType.toUUID, and every single-value type now defines toUUID so an unsupported conversion (e.g. INT -> UUID) throws a descriptive "Cannot convert value from INT to UUID" instead of a confusing "There is no single-value type" error. The JSON->UUID parsing moves into JSON.toUUID. Removes the now-unused toUuidBytesArray. - FieldSpec.DataType: UUID values are represented uniformly as byte[], matching the BYTES stored type. equals / hashCode / compare / toString drop the toBytesValue helper and operate on byte[] directly. Adds enum-level Javadoc documenting the in-memory value representation per type. - UuidUtils.toBytes(String) accepts the dashless 32-char hex form in addition to the canonical string, so byte[] default null values (stringified as raw hex) round-trip back through FieldSpec.getDefaultNullValue.
* Fix realtime segment cleanup after ERROR transition * Scope stale stop-consumed mitigation
* Add peer download fallback to PredownloadScheduler When a segment download from deep storage fails in the predownload container, fall back to downloading from peer servers if peer download is enabled. This improves predownload reliability when deep storage is temporarily unavailable or experiencing issues. Changes: - Accept peerDownloadEnabled flag in PredownloadScheduler constructor - Extract deep store download logic into downloadFromDeepStore() - Add downloadFromPeers() method that discovers ONLINE peer servers via ExternalView and downloads the segment from a shuffled peer list - Add getPeerServerURIs() to PredownloadZKClient to discover peers without requiring HelixManager - Add tests for peer download fallback and ZK peer discovery Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Read peerDownloadEnabled from properties instead of constructor parameter The upstream StartServer now sets pinot.server.peer.download.enabled in properties, so the constructor no longer needs the boolean parameter. This simplifies the API and keeps configuration in one place. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Address review comments: sanitize peer download scheme and fix Javadoc 1. Sanitize _peerDownloadScheme similar to BaseTableDataManager: lowercase the value and validate it's http or https. 2. Remove "excluding the current instance" from getPeerServerURIs Javadoc — predownload runs before server starts, so the current instance is never in ExternalView. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add peer download and deep store metrics for predownload - PREDOWNLOAD_DEEPSTORE_DOWNLOAD_COUNT: deep store success counter - PREDOWNLOAD_PEER_SEGMENT_DOWNLOAD_COUNT: peer download success counter - PREDOWNLOAD_PEER_SEGMENT_DOWNLOAD_FAILURE_COUNT: peer download failure counter with segment name as key for per-segment tracking - PEER_DOWNLOAD_SPEED: gauge for peer download speed (MB/s) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add tests for peer download and deep store metrics - testDeepStoreSuccessEmitsDeepStoreMetric: verifies deepStoreSegmentDownloaded() is called on deep store success, peer metrics not called - testPeerDownloadSuccessEmitsPeerMetrics: verifies peerSegmentDownloaded(true) and segmentDownloaded(true) both called on peer fallback success - testPeerDownloadFailureEmitsSegmentLevelMetric: verifies peerSegmentDownloaded(false, segmentName) called with segment name on failure Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add streaming-untar support for peer download in predownload When streaming download-untar is enabled and the segment is not encrypted, peer download now uses the streaming path (fetchAndStreamUntarToLocal) instead of download-then-untar, matching the existing deep store behavior. Framework changes: - Add fetchUntarSegmentToLocalStreamed(segmentName, uriSupplier, dest, rateLimit) to SegmentFetcher interface, BaseSegmentFetcher (with retry), and HttpSegmentFetcher - Add corresponding SegmentFetcherFactory.fetchAndStreamUntarToLocal overload Tests added for HttpSegmentFetcher, SegmentFetcherFactory, and PredownloadScheduler streaming peer fallback path. * Address review comments: metric naming, config constant, guard refactor - Rename PEER_DOWNLOAD_SPEED to PEER_DOWNLOAD_SPEED_MBPS with unit "mbps" - Remove segmentName from failure metric to avoid high cardinality - Move hardcoded "pinot.server.peer.download.enabled" to CommonConstants.Server.CONFIG_OF_PEER_DOWNLOAD_ENABLED - Move peer download enabled/scheme guard into downloadFromPeers - On peer download failure, throw the original deep store exception --------- Co-authored-by: psinghnegi <psinghnegi@uber.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Initialize ServerMetrics in PredownloadScheduler for predownload container The PredownloadScheduler runs in a separate predownload container that starts before the main Pinot server. Previously, it only initialized PredownloadMetrics but did not set up the ServerMetrics registry. This caused PredownloadMetrics (which internally depends on ServerMetrics) to silently fall back to the NOOP metrics instance, resulting in no server-level metrics being emitted from the predownload container. This change initializes ServerMetrics via PinotMetricUtils in the initializeMetricsReporter() method. The initialization is wrapped in a try-catch so that if the underlying metrics factory cannot be created (e.g., because a vendor-specific metrics client is not yet available in the predownload lifecycle), the predownload process continues with the default NOOP ServerMetrics rather than crashing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add tests for ServerMetrics initialization in PredownloadScheduler Three test cases covering the initializeMetricsReporter() change: 1. testInitializeMetricsReporterRegistersServerMetrics - verifies that ServerMetrics is properly initialized and registered when the metrics factory is available 2. testInitializeMetricsReporterFallsBackOnFailure - verifies that when PinotMetricUtils throws (e.g., vendor metrics client not ready), the scheduler continues with the NOOP ServerMetrics instance instead of crashing 3. testInitializeMetricsReporterAlwaysCreatesPredownloadMetrics - verifies that PredownloadMetrics is always created and registered regardless of whether ServerMetrics initialization succeeds or fails Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Address review comments: narrow catch to Exception, log register result - Changed catch(Throwable) to catch(Exception) to avoid swallowing JVM-level Errors like OutOfMemoryError - Check ServerMetrics.register() return value and log success or error if an instance was already registered * Extract shared ServerMetricsInitUtils for ServerMetrics construction/registration Deduplicates ServerMetrics construction + registration logic between BaseServerStarter (real server) and PredownloadScheduler (predownload container). Registration failure now throws IllegalStateException from the shared method; PredownloadScheduler's existing try/catch keeps predownload's graceful-degradation behavior unchanged. * Trigger CI re-run * Make ServerMetrics registration idempotent to fix integration tests ServerMetricsInitUtils.initServerMetrics() previously threw IllegalStateException when ServerMetrics was already registered. This broke integration tests where multiple servers start in the same JVM via ClusterTest.startOneServer, causing 38 test failures. Now returns the existing instance instead of throwing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: psinghnegi <psinghnegi@uber.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bumps software.amazon.awssdk:bom from 2.46.21 to 2.47.0. --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.47.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…h getValueType() (#18918)
…#18896) The updateSchema endpoint in PinotSchemaRestletResource was catching SchemaBackwardIncompatibleException but only returning a generic message ("Only allow adding new columns") without including the actual reason from the exception. This made it difficult for users to understand why their schema update was rejected. Now the error response includes e.getMessage() which contains detailed incompatibility information (missing columns, incompatible field types, primary key changes, and fix suggestions).
The 4-argument splitPart overload previously allocated a full String[] via StringUtils.splitByWholeSeparator on every call, even when only a single element was needed. This is wasteful in hot query paths where splitPart is invoked per-row. Replace the array-based implementation with index-based forward scanning that extracts only the requested field without materializing all split parts. The new implementation: - Skips leading separators - Collapses consecutive separators (matching splitByWholeSeparator semantics) - Handles trailing separators (producing one empty trailing token) - For positive indices: single forward scan, O(index) work - For negative indices: two passes (count then extract) but still no String[] allocation Falls back to the array-based path only for null/empty delimiters (whitespace splitting) where the rules are complex. All existing unit tests (172 cases including randomized fuzz) pass unchanged, confirming behavioral equivalence.
…InSegmentFile=true) (#18930)
Bumps software.amazon.awssdk:bom from 2.47.0 to 2.47.1. --- updated-dependencies: - dependency-name: software.amazon.awssdk:bom dependency-version: 2.47.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [com.google.cloud:libraries-bom](https://github.com/googleapis/google-cloud-java) from 26.84.0 to 26.85.0. - [Release notes](https://github.com/googleapis/google-cloud-java/releases) - [Changelog](https://github.com/googleapis/google-cloud-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/google-cloud-java/commits/libraries-bom/v26.85.0) --- updated-dependencies: - dependency-name: com.google.cloud:libraries-bom dependency-version: 26.85.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [com.fasterxml.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom) from 2.22.0 to 2.22.1. - [Commits](FasterXML/jackson-bom@jackson-bom-2.22.0...jackson-bom-2.22.1) --- updated-dependencies: - dependency-name: com.fasterxml.jackson:jackson-bom dependency-version: 2.22.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…(and fix routing-filter construction bugs it surfaces) (#18941)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.