[
https://issues.apache.org/jira/browse/SOLR-18239?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18081047#comment-18081047
]
Jalaz Kumar commented on SOLR-18239:
------------------------------------
[~dsmiley] Can this Jira be assigned to me?
> `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: 1h
> 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]