summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-08-30 23:45:48 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-08-30 23:45:48 +0200
commit23f033a9069cdae30695bafe9193be9111e4e913 (patch)
treefbb9b01e7afb493ec5ac0d868a3e9e36087a7182 /container-search
parentda4433cd241557e7b6f13d7109f07f01d28518d7 (diff)
Compensate for loadfactor, and use correct fieldcount at the right place, instead of the pragmatic imprecise initial take.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java10
-rw-r--r--container-search/src/main/java/com/yahoo/search/result/Hit.java3
2 files changed, 5 insertions, 8 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
index f0ca743f2eb..6b4d3594087 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
@@ -218,20 +218,16 @@ public class Dispatcher extends AbstractComponent {
}
private void fill(List<FastHit> hits, byte[] slimeBytes) {
- Slime slime = BinaryFormat.decode(slimeBytes);
- int maxFieldsInhit = slime.symbols();
- Inspector summaries = new SlimeAdapter(slime.get().field("docsums"));
- summaries.fieldCount();
+ Inspector summaries = new SlimeAdapter(BinaryFormat.decode(slimeBytes).get().field("docsums"));
if ( ! summaries.valid())
throw new IllegalArgumentException("Expected a Slime root object containing a 'docsums' field");
for (int i = 0; i < hits.size(); i++) {
- FastHit hit = hits.get(i);
- hit.reserve(maxFieldsInhit);
- fill(hit, summaries.entry(i).field("docsum"));
+ fill(hits.get(i), summaries.entry(i).field("docsum"));
}
}
private void fill(FastHit hit, Inspector summary) {
+ hit.reserve(summary.fieldCount());
summary.traverse((String name, Inspector value) -> {
hit.setField(name, nativeTypeOf(value));
});
diff --git a/container-search/src/main/java/com/yahoo/search/result/Hit.java b/container-search/src/main/java/com/yahoo/search/result/Hit.java
index 248c84f143f..0bfbecfd9ab 100644
--- a/container-search/src/main/java/com/yahoo/search/result/Hit.java
+++ b/container-search/src/main/java/com/yahoo/search/result/Hit.java
@@ -105,7 +105,8 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi
}
private Map<String,Object> getFieldMap(int minSize) {
if (fields == null) {
- fields = new LinkedHashMap<>(minSize);
+ // Compensate for loadfactor and then some, rounded up....
+ fields = new LinkedHashMap<>(2*minSize);
}
return fields;
}