Aaron Dockter created SOLR-18239:
------------------------------------

             Summary: `ObjectSizeEstimator.primitiveEstimate()` calls 
`obj.getClass()` without checking if `obj` is null
                 Key: SOLR-18239
                 URL: https://issues.apache.org/jira/browse/SOLR-18239
             Project: Solr
          Issue Type: Bug
          Components: CrossDC
    Affects Versions: 9.10.1
         Environment: Using the CrossDC manager, fields that were not a problem 
without the CrossDC manager enabled are causing this failure.
            Reporter: Aaron Dockter


h2. Issue

Apache Solr cross-DC replication was failing with {{NullPointerException}} in 
the {{MirroringUpdateProcessor}} when indexing documents containing fields with 
null values. The error occurred in {{ObjectSizeEstimator.primitiveEstimate()}} 
which called {{obj.getClass()}} without checking if {{obj}} was null.
h2. Root Cause

{{MirroringUpdateProcessor.ObjectSizeEstimator.primitiveEstimate(Object obj, 
long def)}} did not check for null before calling {{{}obj.getClass(){}}}. When 
a {{SolrInputDocument}} contained a field with a null value, the size estimator 
would crash during cross-DC mirroring.
h2. Resolution Fix

Added a null guard at the start of the {{primitiveEstimate}} method:

 

{{private static long primitiveEstimate(Object obj, long def) {    if (obj == 
null) return def;
    Class<?> clazz = obj.getClass();
    ...
}}}

This ensures that when a field value is null, the method returns the default 
size estimate instead of attempting to introspect the class type.
h2. Tests to Add

Added a regression test in {{MirroringUpdateProcessorTest.java}} to verify the 
fix:

 

{{@Testpublic void testObjectSizeEstimatorWithNullFieldValue() {    
SolrInputDocument doc = new SolrInputDocument();
    doc.addField("id", "test");
    doc.addField("nullField", null);    long size = 
MirroringUpdateProcessor.ObjectSizeEstimator.estimate(doc);
    assertTrue("size should be non-negative", size >= 0);
}}}

This test creates a {{SolrInputDocument}} with a field explicitly set to 
{{null}} and verifies that {{ObjectSizeEstimator.estimate()}} completes 
successfully without throwing a {{{}NullPointerException{}}}.
h2. Files Requiring Changes (Solr cross-dc module)
 * 
{{solr/solr/modules/cross-dc/src/java/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessor.java}}
 — Added null guard in {{primitiveEstimate()}}
 * 
{{solr/solr/modules/cross-dc/src/test/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessorTest.java}}
 — Added regression test {{testObjectSizeEstimatorWithNullFieldValue()}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to