diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-12-29 16:35:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-29 16:35:10 +0100 |
commit | e658af4bf92c4962069642a121a4140359305857 (patch) | |
tree | 6ed295188102d7fec349b5b42cfcc4859482148b | |
parent | b8acefb1ba14ab159435e02760d9a90a6f1501ef (diff) | |
parent | ba7d652a08a22a8ff6e90322d5372133f8ebd45c (diff) |
Merge pull request #25338 from vespa-engine/bratseth/dont-warn-on-1-node-down
Don't warn when 1 node is down
6 files changed, 35 insertions, 12 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java index e755abc7d66..1be45b01367 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java @@ -173,11 +173,15 @@ public class SearchCluster implements NodeManager<Node> { } public boolean hasInformationAboutAllNodes() { - return groups().stream().allMatch(g -> g.nodes().stream().allMatch(node -> node.isWorking() != null)); + return groups().stream().allMatch(group -> group.nodes().stream().allMatch(node -> node.isWorking() != null)); + } + + public long nonWorkingNodeCount() { + return groups().stream().flatMap(group -> group.nodes().stream()).filter(node -> node.isWorking() == Boolean.FALSE).count(); } private boolean hasWorkingNodes() { - return groups().stream().anyMatch(g -> g.nodes().stream().anyMatch(node -> node.isWorking() != Boolean.FALSE)); + return groups().stream().anyMatch(group -> group.nodes().stream().anyMatch(node -> node.isWorking() != Boolean.FALSE)); } private boolean usesLocalCorpusIn(Node node) { @@ -252,11 +256,15 @@ public class SearchCluster implements NodeManager<Node> { if (node.isWorking() != Boolean.TRUE) unresponsive.append('\n').append(node); } - log.warning("Cluster " + clusterId + ": " + group + " has reduced coverage: " + - "Active documents: " + group.activeDocuments() + "/" + medianDocuments + ", " + - "Target active documents: " + group.targetActiveDocuments() + ", " + - "working nodes: " + group.workingNodes() + "/" + group.nodes().size() + - ", unresponsive nodes: " + (unresponsive.toString().isEmpty() ? " none" : unresponsive)); + String message = "Cluster " + clusterId + ": " + group + " has reduced coverage: " + + "Active documents: " + group.activeDocuments() + "/" + medianDocuments + ", " + + "Target active documents: " + group.targetActiveDocuments() + ", " + + "working nodes: " + group.workingNodes() + "/" + group.nodes().size() + + ", unresponsive nodes: " + (unresponsive.toString().isEmpty() ? " none" : unresponsive); + if (nonWorkingNodeCount() == 1) // That is normal + log.info(message); + else + log.warning(message); } } } diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterCoverageTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterCoverageTest.java index 3d981c5e45a..a83ef963005 100644 --- a/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterCoverageTest.java +++ b/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterCoverageTest.java @@ -3,6 +3,7 @@ package com.yahoo.search.dispatch.searchcluster; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -87,6 +88,19 @@ public class SearchClusterCoverageTest { } @Test + void test_non_working_node_count() { + var tester = new SearchClusterTester(3, 3); + tester.setDocsPerNode(100, 0); + tester.setDocsPerNode(100, 1); + tester.setDocsPerNode(100, 2); + assertEquals(0, tester.cluster().nonWorkingNodeCount()); + tester.setWorking(1, 1, false); + assertEquals(1, tester.cluster().nonWorkingNodeCount()); + tester.setWorking(2, 2, false); + assertEquals(2, tester.cluster().nonWorkingNodeCount()); + } + + @Test void three_groups_one_has_a_node_down_but_remaining_has_enough_docs() { var tester = new SearchClusterTester(3, 3); diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java index ddb0b9fa809..51256ec496e 100644 --- a/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java +++ b/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java @@ -375,4 +375,5 @@ public class SearchClusterTest { group.aggregateNodeValues(); assertTrue(group.isBalanced()); } + } diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTester.java b/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTester.java index 31f250072fe..35d990be412 100644 --- a/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTester.java +++ b/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTester.java @@ -9,6 +9,8 @@ public class SearchClusterTester { cluster = new MockSearchCluster("1", groups, nodesPerGroup); } + public SearchCluster cluster() { return cluster; } + public void pingIterationCompleted() { cluster.pingIterationCompleted(); } diff --git a/docproc/src/main/java/com/yahoo/docproc/jdisc/DocumentProcessingTask.java b/docproc/src/main/java/com/yahoo/docproc/jdisc/DocumentProcessingTask.java index f7f8d0e6a10..9e5609a96c7 100644 --- a/docproc/src/main/java/com/yahoo/docproc/jdisc/DocumentProcessingTask.java +++ b/docproc/src/main/java/com/yahoo/docproc/jdisc/DocumentProcessingTask.java @@ -58,8 +58,7 @@ public class DocumentProcessingTask implements Runnable { try { processings.addAll(requestContext.getProcessings()); } catch (Exception e) { - //deserialization failed: - log.log(Level.WARNING, "Deserialization of message failed.", e); + log.log(Level.WARNING, "Deserialization of message failed", e); requestContext.processingFailed(e); return; } diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java index 2796609543f..6ab0698e0bd 100644 --- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java +++ b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java @@ -550,15 +550,14 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu Field field = fieldUpdate.getDocumentType().getField(fieldId); if (field == null) { throw new DeserializationException( - "Cannot deserialize FieldUpdate, field fieldId " + fieldId + " not found in " + fieldUpdate.getDocumentType()); + "Cannot deserialize FieldUpdate: Field fieldId " + fieldId + " not found in " + fieldUpdate.getDocumentType()); } fieldUpdate.setField(field); int size = getInt(null); for (int i = 0; i < size; i++) { - if (field.getDataType() instanceof CollectionDataType) { - CollectionDataType collType = (CollectionDataType) field.getDataType(); + if (field.getDataType() instanceof CollectionDataType collType) { fieldUpdate.addValueUpdate(getValueUpdate(collType, collType.getNestedType())); } else { fieldUpdate.addValueUpdate(getValueUpdate(field.getDataType(), null)); |