mirror of https://github.com/apache/lucene.git
SOLR-9485:Indexfingerprint.fromObject() returns wrong values if object passed was itself of type IndexFingerprint
This commit is contained in:
parent
c56d832349
commit
73d4b73042
|
@ -26,6 +26,7 @@ import org.apache.lucene.index.LeafReaderContext;
|
||||||
import org.apache.lucene.queries.function.FunctionValues;
|
import org.apache.lucene.queries.function.FunctionValues;
|
||||||
import org.apache.lucene.queries.function.ValueSource;
|
import org.apache.lucene.queries.function.ValueSource;
|
||||||
import org.apache.lucene.util.Bits;
|
import org.apache.lucene.util.Bits;
|
||||||
|
import org.apache.solr.common.SolrException;
|
||||||
import org.apache.solr.common.util.Hash;
|
import org.apache.solr.common.util.Hash;
|
||||||
import org.apache.solr.common.util.NamedList;
|
import org.apache.solr.common.util.NamedList;
|
||||||
import org.apache.solr.core.SolrCore;
|
import org.apache.solr.core.SolrCore;
|
||||||
|
@ -168,16 +169,8 @@ public class IndexFingerprint {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static long getLong(Object o, String key, long def) {
|
private static long getLong(Map m, String key, long def) {
|
||||||
long v = def;
|
Object oval = m.get(key);
|
||||||
|
|
||||||
Object oval = null;
|
|
||||||
if (o instanceof Map) {
|
|
||||||
oval = ((Map)o).get(key);
|
|
||||||
} else if (o instanceof NamedList) {
|
|
||||||
oval = ((NamedList)o).get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
return oval != null ? ((Number)oval).longValue() : def;
|
return oval != null ? ((Number)oval).longValue() : def;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,14 +178,23 @@ public class IndexFingerprint {
|
||||||
* Create an IndexFingerprint object from a deserialized generic object (Map or NamedList)
|
* Create an IndexFingerprint object from a deserialized generic object (Map or NamedList)
|
||||||
*/
|
*/
|
||||||
public static IndexFingerprint fromObject(Object o) {
|
public static IndexFingerprint fromObject(Object o) {
|
||||||
|
if (o instanceof IndexFingerprint) return (IndexFingerprint) o;
|
||||||
|
Map map = null;
|
||||||
|
if (o instanceof Map) {
|
||||||
|
map = (Map) o;
|
||||||
|
} else if (o instanceof NamedList) {
|
||||||
|
map = ((NamedList) o).asShallowMap();
|
||||||
|
} else {
|
||||||
|
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown type " + o);
|
||||||
|
}
|
||||||
IndexFingerprint f = new IndexFingerprint();
|
IndexFingerprint f = new IndexFingerprint();
|
||||||
f.maxVersionSpecified = getLong(o, "maxVersionSpecified", Long.MAX_VALUE);
|
f.maxVersionSpecified = getLong(map, "maxVersionSpecified", Long.MAX_VALUE);
|
||||||
f.maxVersionEncountered = getLong(o, "maxVersionEncountered", -1);
|
f.maxVersionEncountered = getLong(map, "maxVersionEncountered", -1);
|
||||||
f.maxInHash = getLong(o, "maxInHash", -1);
|
f.maxInHash = getLong(map, "maxInHash", -1);
|
||||||
f.versionsHash = getLong(o, "versionsHash", -1);
|
f.versionsHash = getLong(map, "versionsHash", -1);
|
||||||
f.numVersions = getLong(o, "numVersions", -1);
|
f.numVersions = getLong(map, "numVersions", -1);
|
||||||
f.numDocs = getLong(o, "numDocs", -1);
|
f.numDocs = getLong(map, "numDocs", -1);
|
||||||
f.maxDoc = getLong(o, "maxDoc", -1);
|
f.maxDoc = getLong(map, "maxDoc", -1);
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue