summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-09-18 15:48:42 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2019-09-18 15:48:42 +0200
commitec5e957ef3e00d3a89007a8615b66da8b65703e8 (patch)
tree483e25e5d8ea9d69950b4111fad06d7e3a11005b /container-search
parent44f08a00c6537929bcf8a812b4ec4fb046e8ed1c (diff)
Ensure that we will set the vipstatus to good when we are good.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java17
1 files changed, 9 insertions, 8 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 dc35ebdc65f..833147e1a56 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
@@ -223,14 +223,15 @@ public class SearchCluster implements NodeManager<Node> {
private void updateSufficientCoverage(Group group, boolean sufficientCoverage) {
// update VIP status if we direct dispatch to this group and coverage status changed
- if (usesDirectDispatchTo(group) && sufficientCoverage != group.hasSufficientCoverage()) {
- if (sufficientCoverage) {
- vipStatus.addToRotation(clusterId);
- } else {
- vipStatus.removeFromRotation(clusterId);
- }
- }
+ boolean isInRotation = vipStatus.isInRotation();
+ boolean hasChanged = sufficientCoverage != group.hasSufficientCoverage();
+ boolean isDirectDispatchGroupAndChange = usesDirectDispatchTo(group) && hasChanged;
group.setHasSufficientCoverage(sufficientCoverage);
+ if ((!isInRotation || isDirectDispatchGroupAndChange) && sufficientCoverage) {
+ vipStatus.addToRotation(clusterId);
+ } else if (isDirectDispatchGroupAndChange && ! sufficientCoverage) {
+ vipStatus.removeFromRotation(clusterId);
+ }
}
private boolean usesDirectDispatchTo(Node node) {
@@ -373,7 +374,7 @@ public class SearchCluster implements NodeManager<Node> {
private void trackGroupCoverageChanges(int index, Group group, boolean fullCoverage, long averageDocuments) {
boolean changed = group.isFullCoverageStatusChanged(fullCoverage);
- if(changed) {
+ if (changed) {
int requiredNodes = groupSize() - dispatchConfig.maxNodesDownPerGroup();
if (fullCoverage) {
log.info(() -> String.format("Group %d is now good again (%d/%d active docs, coverage %d/%d)", index,