[ 
https://issues.apache.org/jira/browse/SOLR-18239?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18081277#comment-18081277
 ] 

ASF subversion and git services commented on SOLR-18239:
--------------------------------------------------------

Commit 386a247fdd45cf45b385e5df59e8f633c52b32ef in solr's branch 
refs/heads/branch_10x from Jalaz Kumar
[ https://gitbox.apache.org/repos/asf?p=solr.git;h=386a247fdd4 ]

SOLR-18239: Fixed NPE during size estimator calculations (#4427)

Co-authored-by: Eric Pugh <[email protected]>

> `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
>            Priority: Minor
>              Labels: pull-request-available
>          Time Spent: 2h 10m
>  Remaining Estimate: 0h
>
> 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