From 23f033a9069cdae30695bafe9193be9111e4e913 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 30 Aug 2017 23:45:48 +0200 Subject: Compensate for loadfactor, and use correct fieldcount at the right place, instead of the pragmatic imprecise initial take. --- .../src/main/java/com/yahoo/search/dispatch/Dispatcher.java | 10 +++------- .../src/main/java/com/yahoo/search/result/Hit.java | 3 ++- 2 files changed, 5 insertions(+), 8 deletions(-) (limited to 'container-search') 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 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 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; } -- cgit v1.2.3