mirror of https://github.com/apache/lucene.git
SOLR-8866: UpdateLog now throws an error if it can't serialize a field value
(cherry picked from commit a22099a
)
This commit is contained in:
parent
c33e8b1e21
commit
4ee908eb80
|
@ -63,6 +63,9 @@ Other Changes
|
|||
|
||||
* SOLR-8860: Remove back-compat handling of router format made in SOLR-4221 in 4.5.0. (shalin)
|
||||
|
||||
* SOLR-8866: UpdateLog will now throw an exception if it doesn't know how to serialize a value.
|
||||
(David Smiley)
|
||||
|
||||
================== 6.0.0 ==================
|
||||
|
||||
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
|
||||
|
|
|
@ -95,7 +95,9 @@ public class TransactionLog implements Closeable {
|
|||
codec.writeByteArray(br.bytes, br.offset, br.length);
|
||||
return null;
|
||||
}
|
||||
return o;
|
||||
// Fallback: we have no idea how to serialize this. Be noisy to prevent insidious bugs
|
||||
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
|
||||
"TransactionLog doesn't know how to serialize " + o.getClass() + "; try implementing ObjectResolver?");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -18,9 +18,11 @@ package org.apache.solr.update;
|
|||
|
||||
import org.apache.solr.SolrTestCaseJ4;
|
||||
import org.apache.solr.common.SolrException;
|
||||
import org.apache.solr.common.SolrInputDocument;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
public class TestUpdate extends SolrTestCaseJ4 {
|
||||
|
@ -243,4 +245,23 @@ public class TestUpdate extends SolrTestCaseJ4 {
|
|||
|
||||
}
|
||||
|
||||
@Test // SOLR-8866
|
||||
public void testUpdateLogThrowsForUnknownTypes() throws IOException {
|
||||
SolrInputDocument doc = new SolrInputDocument();
|
||||
doc.addField("id", "444");
|
||||
doc.addField("text", new Object());//Object shouldn't be serialized later...
|
||||
|
||||
AddUpdateCommand cmd = new AddUpdateCommand(req());
|
||||
cmd.solrDoc = doc;
|
||||
try {
|
||||
h.getCore().getUpdateHandler().addDoc(cmd); // should throw
|
||||
} catch (SolrException e) {
|
||||
if (e.getMessage().contains("serialize")) {
|
||||
return;//passed test
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -207,7 +207,9 @@ public class JavaBinCodec {
|
|||
if (writeKnownType(tmpVal)) return;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to do *something*.
|
||||
// note: if the user of this codec doesn't want this (e.g. UpdateLog) it can supply an ObjectResolver that does
|
||||
// something else like throw an exception.
|
||||
writeVal(val.getClass().getName() + ':' + val.toString());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue