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-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 ==================
|
================== 6.0.0 ==================
|
||||||
|
|
||||||
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
|
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);
|
codec.writeByteArray(br.bytes, br.offset, br.length);
|
||||||
return null;
|
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.SolrTestCaseJ4;
|
||||||
import org.apache.solr.common.SolrException;
|
import org.apache.solr.common.SolrException;
|
||||||
|
import org.apache.solr.common.SolrInputDocument;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
public class TestUpdate extends SolrTestCaseJ4 {
|
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;
|
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());
|
writeVal(val.getClass().getName() + ':' + val.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue