Hi all,
I'm new to the community, but I have found, what I believe to be, a bug in the
cross-dc module's MirroringUpdateProcessor.ObjectSizeEstimator that causes a
NullPointerException during cross-DC replication when indexing documents
containing fields with null values. Before I log a Jira ticket, just wanted to
throw this out there...
Problem Description
When using Solr's cross-DC replication feature, indexing operations fail with a
NullPointerException in
MirroringUpdateProcessor.ObjectSizeEstimator.primitiveEstimate(). The error
occurs when a SolrInputDocument contains a field explicitly set to null.
Error Stack Trace
java.lang.NullPointerException
at
org.apache.solr.crossdc.update.processor.MirroringUpdateProcessor$ObjectSizeEstimator.primitiveEstimate(MirroringUpdateProcessor.java:XXX)
at
org.apache.solr.crossdc.update.processor.MirroringUpdateProcessor$ObjectSizeEstimator.estimate(MirroringUpdateProcessor.java:XXX)
Root Cause
The primitiveEstimate(Object obj, long def) method calls obj.getClass() without
first checking if obj is null. When a field value is null, this causes the NPE.
Proposed Fix
Add a null guard at the start of the primitiveEstimate method:
java
private static long primitiveEstimate(Object obj, long def) {
if (obj == null) return def;
Class<?> clazz = obj.getClass();
// ... rest of method
}
This ensures that when a field value is null, the method returns the default
size estimate instead of attempting to introspect the class type.
Test Case
I've added a regression test in MirroringUpdateProcessorTest.java:
java
@Test
public 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);
}
Files Changed
*
solr/modules/cross-dc/src/java/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessor.java
*
solr/modules/cross-dc/src/test/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessorTest.java
Solr Version
This issue affects the cross-dc module in the Solr codebase (version 9.x
branch).
Would someone from the Solr team be able to review this fix? I'm happy to
submit a pull request if this approach is acceptable.
Thank you for your time and consideration.
Best regards,
Aaron Dockter