This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new 812408433c6 SOLR-18350: Live schema changes could disrupt requests in 
progress (#4817)
812408433c6 is described below

commit 812408433c661cf61c9b6d2784787304e39907bf
Author: NextBrickINC.com <[email protected]>
AuthorDate: Thu Aug 27 21:41:36 2026 -0700

    SOLR-18350: Live schema changes could disrupt requests in progress (#4817)
    
    At least theoretically.
    
    Co-authored-by: rayshrey <[email protected]>
---
 changelog/unreleased/solr-18350-stable-schema.yml  |  8 +++++
 .../src/java/org/apache/solr/core/SolrCore.java    |  9 +++++-
 .../org/apache/solr/handler/SchemaHandler.java     | 34 +++++++++-------------
 .../handler/component/RealTimeGetComponent.java    | 16 +++++-----
 .../java/org/apache/solr/request/SimpleFacets.java |  2 +-
 .../solr/search/PayloadCheckQParserPlugin.java     |  2 +-
 .../solr/search/PayloadScoreQParserPlugin.java     |  4 +--
 .../org/apache/solr/search/ValueSourceParser.java  |  2 +-
 .../org/apache/solr/search/vector/KnnQParser.java  |  2 +-
 .../search/vector/VectorSimilarityQParser.java     |  2 +-
 .../processor/ContentHashVersionProcessor.java     |  2 +-
 .../DocBasedVersionConstraintsProcessor.java       |  6 ++--
 .../update/processor/TolerantUpdateProcessor.java  |  2 +-
 .../processor/ContentHashVersionProcessorTest.java |  2 +-
 .../search/TextToVectorQParserPlugin.java          |  3 +-
 .../DocumentEnrichmentUpdateProcessorFactory.java  |  6 ++--
 .../TextToVectorUpdateProcessorFactory.java        |  6 ++--
 17 files changed, 56 insertions(+), 52 deletions(-)

diff --git a/changelog/unreleased/solr-18350-stable-schema.yml 
b/changelog/unreleased/solr-18350-stable-schema.yml
new file mode 100644
index 00000000000..c496b588399
--- /dev/null
+++ b/changelog/unreleased/solr-18350-stable-schema.yml
@@ -0,0 +1,8 @@
+title: Keep request processing and searches on a stable schema snapshot when 
the schema changes concurrently
+type: fixed
+authors:
+  - name: Shrey Narayan
+    nick: NextbrickInc
+links:
+  - name: SOLR-18350
+    url: https://issues.apache.org/jira/browse/SOLR-18350
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java 
b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index c9efc7c98a5..7a5b6995a26 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -335,7 +335,14 @@ public class SolrCore implements SolrInfoBean, Closeable {
   }
 
   /**
-   * @return the latest snapshot of the schema used by this core instance.
+   * Returns the latest snapshot of the schema used by this core instance.
+   *
+   * <p>Request processing code should normally use {@link 
SolrQueryRequest#getSchema()} so that the
+   * schema remains stable for the lifetime of the request. Code operating on 
a {@link
+   * SolrIndexSearcher} should normally use {@link 
SolrIndexSearcher#getSchema()} so that the schema
+   * matches the searcher.
+   *
+   * @return the latest schema snapshot
    * @see #setLatestSchema
    */
   public IndexSchema getLatestSchema() {
diff --git a/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java 
b/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
index bf2ef121c31..8bc108c59c6 100644
--- a/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
@@ -151,42 +151,38 @@ public class SchemaHandler extends RequestHandlerBase
         case "/schema":
           {
             V2ApiUtils.squashIntoSolrResponseWithoutHeader(
-                rsp, new GetSchema(req.getCore(), 
req.getCore().getLatestSchema()).getSchemaInfo());
+                rsp, new GetSchema(req.getCore(), 
req.getSchema()).getSchemaInfo());
             break;
           }
         case "/schema/version":
           {
             V2ApiUtils.squashIntoSolrResponseWithoutHeader(
-                rsp,
-                new GetSchema(req.getCore(), 
req.getCore().getLatestSchema()).getSchemaVersion());
+                rsp, new GetSchema(req.getCore(), 
req.getSchema()).getSchemaVersion());
             break;
           }
         case "/schema/uniquekey":
           {
             V2ApiUtils.squashIntoSolrResponseWithoutHeader(
-                rsp,
-                new GetSchema(req.getCore(), 
req.getCore().getLatestSchema()).getSchemaUniqueKey());
+                rsp, new GetSchema(req.getCore(), 
req.getSchema()).getSchemaUniqueKey());
             break;
           }
         case "/schema/similarity":
           {
             V2ApiUtils.squashIntoSolrResponseWithoutHeader(
-                rsp,
-                new GetSchema(req.getCore(), req.getCore().getLatestSchema())
-                    .getSchemaSimilarity());
+                rsp, new GetSchema(req.getCore(), 
req.getSchema()).getSchemaSimilarity());
             break;
           }
         case "/schema/name":
           {
             V2ApiUtils.squashIntoSolrResponseWithoutHeader(
-                rsp, new GetSchema(req.getCore(), 
req.getCore().getLatestSchema()).getSchemaName());
+                rsp, new GetSchema(req.getCore(), 
req.getSchema()).getSchemaName());
             break;
           }
         case "/schema/zkversion":
           {
             V2ApiUtils.squashIntoSolrResponseWithoutHeader(
                 rsp,
-                new GetSchema(req.getCore(), req.getCore().getLatestSchema())
+                new GetSchema(req.getCore(), req.getSchema())
                     
.getSchemaZkVersion(req.getParams().getInt("refreshIfBelowVersion", -1)));
             break;
           }
@@ -208,22 +204,19 @@ public class SchemaHandler extends RequestHandlerBase
                     if (parts.size() > 2) {
                       V2ApiUtils.squashIntoSolrResponseWithoutHeader(
                           rsp,
-                          new GetSchemaField(req.getCore().getLatestSchema(), 
req.getParams())
+                          new GetSchemaField(req.getSchema(), req.getParams())
                               .getFieldInfo(parts.get(2)));
                     } else {
                       V2ApiUtils.squashIntoSolrResponseWithoutHeader(
                           rsp,
-                          new GetSchemaField(req.getCore().getLatestSchema(), 
req.getParams())
-                              .listSchemaFields());
+                          new GetSchemaField(req.getSchema(), 
req.getParams()).listSchemaFields());
                     }
                     return;
                   }
                 case "copyfields":
                   {
                     V2ApiUtils.squashIntoSolrResponseWithoutHeader(
-                        rsp,
-                        new GetSchemaField(req.getCore().getLatestSchema(), 
req.getParams())
-                            .listCopyFields());
+                        rsp, new GetSchemaField(req.getSchema(), 
req.getParams()).listCopyFields());
                     return;
                   }
                 case "dynamicfields":
@@ -231,13 +224,12 @@ public class SchemaHandler extends RequestHandlerBase
                     if (parts.size() > 2) {
                       V2ApiUtils.squashIntoSolrResponseWithoutHeader(
                           rsp,
-                          new GetSchemaField(req.getCore().getLatestSchema(), 
req.getParams())
+                          new GetSchemaField(req.getSchema(), req.getParams())
                               .getDynamicFieldInfo(parts.get(2)));
                     } else {
                       V2ApiUtils.squashIntoSolrResponseWithoutHeader(
                           rsp,
-                          new GetSchemaField(req.getCore().getLatestSchema(), 
req.getParams())
-                              .listDynamicFields());
+                          new GetSchemaField(req.getSchema(), 
req.getParams()).listDynamicFields());
                     }
                     return;
                   }
@@ -246,12 +238,12 @@ public class SchemaHandler extends RequestHandlerBase
                     if (parts.size() > 2) {
                       V2ApiUtils.squashIntoSolrResponseWithoutHeader(
                           rsp,
-                          new GetSchemaField(req.getCore().getLatestSchema(), 
req.getParams())
+                          new GetSchemaField(req.getSchema(), req.getParams())
                               .getFieldTypeInfo(parts.get(2)));
                     } else {
                       V2ApiUtils.squashIntoSolrResponseWithoutHeader(
                           rsp,
-                          new GetSchemaField(req.getCore().getLatestSchema(), 
req.getParams())
+                          new GetSchemaField(req.getSchema(), req.getParams())
                               .listSchemaFieldTypes());
                     }
                     return;
diff --git 
a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
 
b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
index e08fe5d3ee4..d251a7bfe4d 100644
--- 
a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
+++ 
b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
@@ -218,7 +218,7 @@ public class RealTimeGetComponent extends SearchComponent {
     }
 
     final SolrCore core = req.getCore();
-    SchemaField idField = core.getLatestSchema().getUniqueKeyField();
+    SchemaField idField = req.getSchema().getUniqueKeyField();
     FieldType fieldType = idField.getType();
 
     SolrDocumentList docList = new SolrDocumentList();
@@ -275,9 +275,7 @@ public class RealTimeGetComponent extends SearchComponent {
 
                 SolrDocument doc;
                 if (oper == UpdateLog.ADD) {
-                  doc =
-                      toSolrDoc(
-                          (SolrInputDocument) entry.get(entry.size() - 1), 
core.getLatestSchema());
+                  doc = toSolrDoc((SolrInputDocument) entry.get(entry.size() - 
1), req.getSchema());
                   // toSolrDoc filtered copy-field targets already
                   if (transformer != null) {
                     transformer.transform(doc, -1, DocIterationInfo.NONE); // 
unknown docID
@@ -351,7 +349,7 @@ public class RealTimeGetComponent extends SearchComponent {
         SolrDocumentFetcher docFetcher = 
searcherInfo.getSearcher().getDocFetcher();
         Document luceneDocument =
             docFetcher.doc(docid, rsp.getReturnFields().getLuceneFieldNames());
-        SolrDocument doc = toSolrDoc(luceneDocument, core.getLatestSchema());
+        SolrDocument doc = toSolrDoc(luceneDocument, 
searcherInfo.getSearcher().getSchema());
         if (reuseDvIters == null) {
           reuseDvIters = new 
DocValuesIteratorCache(searcherInfo.getSearcher());
         }
@@ -562,7 +560,7 @@ public class RealTimeGetComponent extends SearchComponent {
     try {
       // now fetch last document from index, and merge partialDoc on top of it
       SolrIndexSearcher searcher = searcherHolder.get();
-      SchemaField idField = core.getLatestSchema().getUniqueKeyField();
+      SchemaField idField = searcher.getSchema().getUniqueKeyField();
       Term idTerm = new Term(idField.getName(), idBytes);
 
       int docid = searcher.getFirstMatch(idTerm);
@@ -784,12 +782,12 @@ public class RealTimeGetComponent extends SearchComponent 
{
         int docId =
             searcher.getFirstMatch(
                 new Term(
-                    core.getLatestSchema().getUniqueKeyField().getName(),
+                    searcher.getSchema().getUniqueKeyField().getName(),
                     resolveStrategy == Resolution.ROOT_WITH_CHILDREN ? 
rootIdBytes : idBytes));
         if (docId < 0) return null;
 
         if (resolveStrategy == Resolution.ROOT_WITH_CHILDREN
-            && core.getLatestSchema().isUsableForChildDocs()) {
+            && searcher.getSchema().isUsableForChildDocs()) {
           // check that this doc is in fact a root document as a prevention 
measure
           if (!hasRootTerm(searcher, rootIdBytes)) {
             throw new SolrException(
@@ -800,7 +798,7 @@ public class RealTimeGetComponent extends SearchComponent {
 
         SolrDocument solrDoc =
             fetchSolrDoc(searcher, docId, makeReturnFields(core, 
onlyTheseFields, resolveStrategy));
-        sid = toSolrInputDocument(solrDoc, core.getLatestSchema()); // filters 
copy-field targets
+        sid = toSolrInputDocument(solrDoc, searcher.getSchema()); // filters 
copy-field targets
         // the assertions above furthermore guarantee the result corresponds 
to idBytes
       } finally {
         searcherHolder.decref();
diff --git a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java 
b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
index 92bb0dc2e60..284cfb45f2b 100644
--- a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
@@ -1318,7 +1318,7 @@ public class SimpleFacets {
       final ParsedParams parsed = parseParams(FacetParams.FACET_INTERVAL, 
field);
       String[] intervalStrs =
           parsed.required.getFieldParams(parsed.facetValue, 
FacetParams.FACET_INTERVAL_SET);
-      SchemaField schemaField = 
searcher.getCore().getLatestSchema().getField(parsed.facetValue);
+      SchemaField schemaField = 
searcher.getSchema().getField(parsed.facetValue);
       if (parsed.params.getBool(GroupParams.GROUP_FACET, false)) {
         throw new SolrException(
             SolrException.ErrorCode.BAD_REQUEST,
diff --git 
a/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java 
b/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java
index fb802a52d56..e5c59090188 100644
--- a/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java
@@ -77,7 +77,7 @@ public class PayloadCheckQParserPlugin extends QParserPlugin {
           throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
"'payloads' not specified");
         }
 
-        FieldType ft = req.getCore().getLatestSchema().getFieldType(field);
+        FieldType ft = req.getSchema().getFieldType(field);
         Analyzer analyzer = ft.getQueryAnalyzer();
         SpanQuery query = null;
         try {
diff --git 
a/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java 
b/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java
index c26853933cb..89566fdc8f7 100644
--- a/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java
@@ -69,7 +69,7 @@ public class PayloadScoreQParserPlugin extends QParserPlugin {
           throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "query 
string missing");
         }
 
-        FieldType ft = req.getCore().getLatestSchema().getFieldType(field);
+        FieldType ft = req.getSchema().getFieldType(field);
         Analyzer analyzer = ft.getQueryAnalyzer();
         SpanQuery query;
         try {
@@ -87,7 +87,7 @@ public class PayloadScoreQParserPlugin extends QParserPlugin {
         PayloadFunction payloadFunction = 
PayloadUtils.getPayloadFunction(func);
         if (payloadFunction == null) throw new SyntaxError("Unknown payload 
function: " + func);
 
-        PayloadDecoder payloadDecoder = 
req.getCore().getLatestSchema().getPayloadDecoder(field);
+        PayloadDecoder payloadDecoder = 
req.getSchema().getPayloadDecoder(field);
         return new PayloadScoreQuery(query, payloadFunction, payloadDecoder, 
includeSpanScore);
       }
     };
diff --git a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java 
b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
index ba71d147fc5..619bdc2b8ee 100644
--- a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
+++ b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
@@ -870,7 +870,7 @@ public abstract class ValueSourceParser implements 
NamedListInitializedPlugin {
                   SolrException.ErrorCode.BAD_REQUEST, "Invalid payload 
function: " + func);
             }
 
-            IndexSchema schema = fp.getReq().getCore().getLatestSchema();
+            IndexSchema schema = fp.getReq().getSchema();
             PayloadDecoder decoder = schema.getPayloadDecoder(tinfo.field);
 
             if (decoder == null) {
diff --git a/solr/core/src/java/org/apache/solr/search/vector/KnnQParser.java 
b/solr/core/src/java/org/apache/solr/search/vector/KnnQParser.java
index d376bfa5a40..eb533582769 100644
--- a/solr/core/src/java/org/apache/solr/search/vector/KnnQParser.java
+++ b/solr/core/src/java/org/apache/solr/search/vector/KnnQParser.java
@@ -117,7 +117,7 @@ public class KnnQParser extends AbstractVectorQParserBase {
   @Override
   public Query parse() throws SyntaxError {
     final String vectorField = getFieldName();
-    final SchemaField schemaField = 
req.getCore().getLatestSchema().getField(getFieldName());
+    final SchemaField schemaField = req.getSchema().getField(getFieldName());
     final DenseVectorField denseVectorType = getCheckedFieldType(schemaField);
 
     if 
(DenseVectorField.FLAT_ALGORITHM.equals(denseVectorType.getKnnAlgorithm())) {
diff --git 
a/solr/core/src/java/org/apache/solr/search/vector/VectorSimilarityQParser.java 
b/solr/core/src/java/org/apache/solr/search/vector/VectorSimilarityQParser.java
index a88d1dfb306..17279d2d1a5 100644
--- 
a/solr/core/src/java/org/apache/solr/search/vector/VectorSimilarityQParser.java
+++ 
b/solr/core/src/java/org/apache/solr/search/vector/VectorSimilarityQParser.java
@@ -44,7 +44,7 @@ public class VectorSimilarityQParser extends 
AbstractVectorQParserBase {
   @Override
   public Query parse() throws SyntaxError {
     final String fieldName = getFieldName();
-    final SchemaField schemaField = 
req.getCore().getLatestSchema().getField(fieldName);
+    final SchemaField schemaField = req.getSchema().getField(fieldName);
     final DenseVectorField denseVectorType = getCheckedFieldType(schemaField);
 
     if 
(DenseVectorField.FLAT_ALGORITHM.equals(denseVectorType.getKnnAlgorithm())) {
diff --git 
a/solr/core/src/java/org/apache/solr/update/processor/ContentHashVersionProcessor.java
 
b/solr/core/src/java/org/apache/solr/update/processor/ContentHashVersionProcessor.java
index ec59596ab8a..8063b59a824 100644
--- 
a/solr/core/src/java/org/apache/solr/update/processor/ContentHashVersionProcessor.java
+++ 
b/solr/core/src/java/org/apache/solr/update/processor/ContentHashVersionProcessor.java
@@ -78,7 +78,7 @@ public class ContentHashVersionProcessor extends 
UpdateRequestProcessor {
     super(next);
     this.core = req.getCore();
 
-    IndexSchema schema = core.getLatestSchema();
+    IndexSchema schema = req.getSchema();
     this.hashField = schema.getField(hashFieldName);
     this.dropSameDocuments = dropSameDocuments;
     this.rsp = rsp;
diff --git 
a/solr/core/src/java/org/apache/solr/update/processor/DocBasedVersionConstraintsProcessor.java
 
b/solr/core/src/java/org/apache/solr/update/processor/DocBasedVersionConstraintsProcessor.java
index 48ecc0f7eed..cbec1472649 100644
--- 
a/solr/core/src/java/org/apache/solr/update/processor/DocBasedVersionConstraintsProcessor.java
+++ 
b/solr/core/src/java/org/apache/solr/update/processor/DocBasedVersionConstraintsProcessor.java
@@ -86,7 +86,7 @@ public class DocBasedVersionConstraintsProcessor extends 
UpdateRequestProcessor
     this.supportMissingVersionOnOldDocs = supportMissingVersionOnOldDocs;
     this.core = req.getCore();
     this.versionFieldNames = versionFields.toArray(EMPTY_STR_ARR);
-    IndexSchema schema = core.getLatestSchema();
+    IndexSchema schema = req.getSchema();
     userVersionFields = new SchemaField[versionFieldNames.length];
     for (int i = 0; i < versionFieldNames.length; i++) {
       userVersionFields[i] = schema.getField(versionFieldNames[i]);
@@ -469,7 +469,7 @@ public class DocBasedVersionConstraintsProcessor extends 
UpdateRequestProcessor
 
       SolrInputDocument newDoc =
           createTombstoneDocument(
-              core.getLatestSchema(),
+              cmd.getReq().getSchema(),
               cmd.getId(),
               versionFieldNames,
               deleteParamValues,
@@ -500,7 +500,7 @@ public class DocBasedVersionConstraintsProcessor extends 
UpdateRequestProcessor
 
         SolrInputDocument newDoc =
             createTombstoneDocument(
-                core.getLatestSchema(),
+                cmd.getReq().getSchema(),
                 cmd.getId(),
                 versionFieldNames,
                 deleteParamValues,
diff --git 
a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
 
b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
index 1ee9592bb5d..d79df5cc848 100644
--- 
a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
+++ 
b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
@@ -129,7 +129,7 @@ public class TolerantUpdateProcessor extends 
UpdateRequestProcessor {
     assert !DistribPhase.FROMLEADER.equals(distribPhase);
 
     this.zkController = this.req.getCoreContainer().getZkController();
-    this.uniqueKeyField = 
this.req.getCore().getLatestSchema().getUniqueKeyField();
+    this.uniqueKeyField = this.req.getSchema().getUniqueKeyField();
     assert null != uniqueKeyField : "Factory didn't enforce uniqueKey field?";
   }
 
diff --git 
a/solr/core/src/test/org/apache/solr/update/processor/ContentHashVersionProcessorTest.java
 
b/solr/core/src/test/org/apache/solr/update/processor/ContentHashVersionProcessorTest.java
index 4a3764ed6a7..65cf6287fc2 100644
--- 
a/solr/core/src/test/org/apache/solr/update/processor/ContentHashVersionProcessorTest.java
+++ 
b/solr/core/src/test/org/apache/solr/update/processor/ContentHashVersionProcessorTest.java
@@ -96,8 +96,8 @@ public class ContentHashVersionProcessorTest extends 
UpdateProcessorTestBase {
     final IndexSchema indexSchema = mock(IndexSchema.class);
     when(indexSchema.getField("_hash_")).thenReturn(new SchemaField("_hash_", 
new BinaryField()));
 
-    when(solrCore.getLatestSchema()).thenReturn(indexSchema);
     when(req.getCore()).thenReturn(solrCore);
+    when(req.getSchema()).thenReturn(indexSchema);
     return new ContentHashVersionProcessor(
         ContentHashVersionProcessorFactory.buildFieldMatcher(includedFields),
         ContentHashVersionProcessorFactory.buildFieldMatcher(excludedFields),
diff --git 
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/search/TextToVectorQParserPlugin.java
 
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/search/TextToVectorQParserPlugin.java
index 01d7b0c0554..1ca96d57e2c 100644
--- 
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/search/TextToVectorQParserPlugin.java
+++ 
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/search/TextToVectorQParserPlugin.java
@@ -78,8 +78,7 @@ public class TextToVectorQParserPlugin extends QParserPlugin
 
     private void checkVectorEncoding() {
       final VectorEncoding vectorEncoding =
-          
getCheckedFieldType(req.getCore().getLatestSchema().getField(getFieldName()))
-              .getVectorEncoding();
+          
getCheckedFieldType(req.getSchema().getField(getFieldName())).getVectorEncoding();
 
       if (vectorEncoding != VectorEncoding.FLOAT32) {
         throw new SolrException(
diff --git 
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/DocumentEnrichmentUpdateProcessorFactory.java
 
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/DocumentEnrichmentUpdateProcessorFactory.java
index c1c514b4de7..f1f554f2ab4 100644
--- 
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/DocumentEnrichmentUpdateProcessorFactory.java
+++ 
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/DocumentEnrichmentUpdateProcessorFactory.java
@@ -185,16 +185,16 @@ public class DocumentEnrichmentUpdateProcessorFactory 
extends UpdateRequestProce
   @Override
   public UpdateRequestProcessor getInstance(
       SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor 
next) {
-    IndexSchema latestSchema = req.getCore().getLatestSchema();
+    IndexSchema requestSchema = req.getSchema();
 
     for (String fieldName : inputFields) {
-      if (!latestSchema.isDynamicField(fieldName) && 
!latestSchema.hasExplicitField(fieldName)) {
+      if (!requestSchema.isDynamicField(fieldName) && 
!requestSchema.hasExplicitField(fieldName)) {
         throw new SolrException(
             SolrException.ErrorCode.SERVER_ERROR, "undefined field: \"" + 
fieldName + "\"");
       }
     }
 
-    final SchemaField outputFieldSchema = latestSchema.getField(outputField);
+    final SchemaField outputFieldSchema = requestSchema.getField(outputField);
 
     ResponseFormat responseFormat = getJsonSchema(outputFieldSchema);
     boolean multiValued = outputFieldSchema.multiValued();
diff --git 
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactory.java
 
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactory.java
index 68f2e17e85a..dc03f677a13 100644
--- 
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactory.java
+++ 
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactory.java
@@ -94,14 +94,14 @@ public class TextToVectorUpdateProcessorFactory extends 
UpdateRequestProcessorFa
   @Override
   public UpdateRequestProcessor getInstance(
       SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor 
next) {
-    IndexSchema latestSchema = req.getCore().getLatestSchema();
+    IndexSchema requestSchema = req.getSchema();
 
-    if (!latestSchema.isDynamicField(inputField) && 
!latestSchema.hasExplicitField(inputField)) {
+    if (!requestSchema.isDynamicField(inputField) && 
!requestSchema.hasExplicitField(inputField)) {
       throw new SolrException(
           SolrException.ErrorCode.SERVER_ERROR, "undefined field: \"" + 
inputField + "\"");
     }
 
-    final SchemaField outputFieldSchema = latestSchema.getField(outputField);
+    final SchemaField outputFieldSchema = requestSchema.getField(outputField);
     assertIsDenseVectorField(outputFieldSchema);
 
     TextToVectorModelStore modelStore = 
TextToVectorModelStore.getManagedModelStore(req.getCore());

Reply via email to