Skip to content

Add configset name validation matching collection/core naming rules#36

Draft
Copilot wants to merge 8 commits intomainfrom
copilot/add-validation-for-configset-names
Draft

Add configset name validation matching collection/core naming rules#36
Copilot wants to merge 8 commits intomainfrom
copilot/add-validation-for-configset-names

Conversation

Copy link
Copy Markdown

Copilot AI commented Mar 29, 2026

The Configsets API (both v1 and v2) accepted arbitrary names including invalid characters (!, ", \) and hyphen-prefixed names, while the Admin UI already enforced collection-style naming rules. This inconsistency allowed creation of unusable configsets and potential path traversal via names like test/../other.

Changes

  • SolrIdentifierValidator — Added CONFIGSET to IdentifierType enum and validateConfigSetName() convenience method, applying the same pattern already used for collections/cores/shards (^(?!\-)[\\._A-Za-z0-9\\-]+$)

  • CloneConfigSet — Validate name before any other checks in cloneExistingConfigSet() (v2 CREATE)

  • UploadConfigSet — Validate name at entry of both uploadConfigSet() and uploadConfigSetFile() (v2 UPLOAD)

  • TestConfigSetsAPI — Added invalid-name assertions to testCreateErrors() and testUploadErrors() covering configset!, configset", -configset, and names with spaces

Invalid names now return HTTP 400:

Invalid configset: [configset!]. configset names must consist entirely of periods,
underscores, hyphens, and alphanumerics as well as not start with a hyphen.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • develocity.apache.org
    • Triggering command: /usr/lib/jvm/temurin-21-jdk-amd64/bin/java /usr/lib/jvm/temurin-21-jdk-amd64/bin/java -XX:ReservedCodeCacheSize=256m -XX:TieredStopAtLevel=1 -XX:+UseParallelGC -XX:ActiveProcessorCount=1 --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED (dns block)
  • metadata.google.internal
    • Triggering command: /usr/lib/jvm/temurin-21-jdk-amd64/bin/java /usr/lib/jvm/temurin-21-jdk-amd64/bin/java -Dcommon-solr.dir=/home/REDACTED/work/solr/solr/solr -Dgradle.lib.dir=/home/REDACTED/.gradle/wrapper/dists/gradle-8.10-bin/deqhafrv1ntovfmgh0nh3npr9/gradle-8.10/lib -Dgradle.user.home=/home/REDACTED/.gradle -Dgradle.worker.jar=/home/REDACTED/.gradle/caches/8.10/workerMain/gradle-worker.jar -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Djava.security.manager=default -Djava.security.policy=/home/REDACTED/work/solr/solr/gradle/testing/randomization/policies/solr-tests.policy -Djava.util.logging.config.file=/home/REDACTED/work/solr/solr/gradle/testing/defaults-tests/logging.properties -Djdk.map.althashing.threshold=0 -Djetty.insecurerandom=1 -Djetty.testMode=1 -Djunit4.childvm.count=1 -Djunit4.childvm.id=0 -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/solr/solr/solr/core/build/tmp/test/work -DtempDir=/home/REDACTED/work/solr/solr/build/tmp/tests-tmp -Dtests.LUCENE_VERSION=10.4.0 -Dtests.asserts=true -Dtests.codec=random (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


⚡ Quickly spin up Copilot coding agent tasks from anywhere on your macOS or Windows machine with Raycast.

Copilot AI and others added 2 commits March 29, 2026 14:21
- Add CONFIGSET to SolrIdentifierValidator.IdentifierType enum
- Add validateConfigSetName() method in SolrIdentifierValidator
- Validate configset name in CloneConfigSet.cloneExistingConfigSet()
- Validate configset name in UploadConfigSet.uploadConfigSet() and uploadConfigSetFile()
- Add tests for invalid configset names in TestConfigSetsAPI

Agent-Logs-Url: https://github.com/epugh/solr/sessions/0bc6a4dc-739c-4e58-b626-e30446c4864b

Co-authored-by: epugh <22395+epugh@users.noreply.github.com>
Copilot AI changed the title [WIP] Add validation for configset naming rules Add configset name validation matching collection/core naming rules Mar 29, 2026
Copilot AI requested a review from epugh March 29, 2026 14:30
dsmiley and others added 5 commits March 29, 2026 11:23
apache#4214)

SOLR-18150: Add SolrBackend abstraction for test/benchmark deployments

Created SolrBackend interface to abstract over different Solr deployment
types (embedded, remote, Jetty, MiniSolrCloudCluster) with a unified API
for collection/configSet management, diagnostics, and node URL access.
JettySolrRunner now manages a HttpJettySolrClient instance, get via getSolrClient.

This PR only introduces the abstraction; follow-on PRs will add callers
in benchmarks and tests.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants