From: Vaclav Demcak Date: Mon, 18 Apr 2016 16:05:46 +0000 (+0200) Subject: BUG-5414 introduce EOS inJeopardy flag X-Git-Tag: release/boron~147 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=d15ce980c43881a394939e0dbb04d2f648b5c5a5;p=mdsal.git BUG-5414 introduce EOS inJeopardy flag The inJeopardy flag is used to indicate that the leader has lost quorum, e.g. if cannot reach majority of followers or the follower has lost connection to the leader (and has initiated new elections). While EOS is in jeopardy, any reported entity state may not reflect cluster-wide consensus, but rather represents the latest intended state as seen by this node. Depend on: https://git.opendaylight.org/gerrit/#/c/36752/7 Change-Id: I8f17fb97dd6ec54222b783bb7b4b827ce9b4a0ad Signed-off-by: Vaclav Demcak --- diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/clustering/EntityOwnershipChange.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/clustering/EntityOwnershipChange.java index c5edfebdf0..e15b4fe79b 100644 --- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/clustering/EntityOwnershipChange.java +++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/clustering/EntityOwnershipChange.java @@ -25,6 +25,14 @@ public class EntityOwnershipChange extends GenericEntityOwnershipChange domListenerCaptor = ArgumentCaptor.forClass(DOMEntityOwnershipListener.class); + final ArgumentCaptor domListenerCaptor = ArgumentCaptor.forClass(DOMEntityOwnershipListener.class); verify(mockDOMService).registerListener(eq(DOM_ENTITY.getType()), domListenerCaptor.capture()); - DOMEntityOwnershipChange domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY, - EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED); + final DOMEntityOwnershipChange domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY, + EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, true); domListenerCaptor.getValue().ownershipChanged(domOwnershipChange ); - ArgumentCaptor ownershipChangeCaptor = ArgumentCaptor.forClass(EntityOwnershipChange.class); + final ArgumentCaptor ownershipChangeCaptor = ArgumentCaptor.forClass(EntityOwnershipChange.class); verify(mockListener).ownershipChanged(ownershipChangeCaptor.capture()); - EntityOwnershipChange change = ownershipChangeCaptor.getValue(); + final EntityOwnershipChange change = ownershipChangeCaptor.getValue(); assertEquals("getEntity", BINDING_ENTITY, change.getEntity()); assertEquals("getState", EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, change.getState()); @@ -115,10 +115,10 @@ public class BindingDOMEntityOwnershipServiceAdapterTest { @Test public void testGetOwnershipState() { - Optional expectedState = Optional.of(EntityOwnershipState.IS_OWNER); + final Optional expectedState = Optional.of(EntityOwnershipState.IS_OWNER); doReturn(expectedState).when(mockDOMService).getOwnershipState(DOM_ENTITY); - Optional actualState = adapter.getOwnershipState(BINDING_ENTITY); + final Optional actualState = adapter.getOwnershipState(BINDING_ENTITY); assertSame("getOwnershipState", expectedState, actualState); } diff --git a/common/mdsal-common-api/src/main/java/org/opendaylight/mdsal/common/api/clustering/GenericEntityOwnershipChange.java b/common/mdsal-common-api/src/main/java/org/opendaylight/mdsal/common/api/clustering/GenericEntityOwnershipChange.java index e70aa5df8a..338ecdd05e 100644 --- a/common/mdsal-common-api/src/main/java/org/opendaylight/mdsal/common/api/clustering/GenericEntityOwnershipChange.java +++ b/common/mdsal-common-api/src/main/java/org/opendaylight/mdsal/common/api/clustering/GenericEntityOwnershipChange.java @@ -22,10 +22,17 @@ import org.opendaylight.yangtools.concepts.Path; public class GenericEntityOwnershipChange

, E extends GenericEntity

> { private final E entity; private final EntityOwnershipChangeState state; + private final boolean inJeopardy; - public GenericEntityOwnershipChange(@Nonnull E entity, @Nonnull EntityOwnershipChangeState state) { + public GenericEntityOwnershipChange(@Nonnull final E entity, @Nonnull final EntityOwnershipChangeState state) { + this(entity, state, false); + } + + public GenericEntityOwnershipChange(@Nonnull final E entity, @Nonnull final EntityOwnershipChangeState state, + final boolean inJeopardy) { this.entity = Preconditions.checkNotNull(entity, "entity can't be null"); this.state = Preconditions.checkNotNull(state, "state can't be null"); + this.inJeopardy = inJeopardy; } /** @@ -44,8 +51,18 @@ public class GenericEntityOwnershipChange

, E extends GenericEn return state; } + /** + * Returns the current jeopardy state. When in a jeopardy state, the values from other methods may potentially + * be out of date. + * + * @return true if the local node is in a jeopardy state. If false, the reported information is accurate. + */ + public boolean inJeopardy() { + return inJeopardy; + } + @Override public String toString() { - return getClass().getSimpleName() + " [entity=" + entity + ", state=" + state + "]"; + return getClass().getSimpleName() + " [entity=" + entity + ", state=" + state + ", inJeopardy=" + inJeopardy + "]"; } } diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityOwnershipChange.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityOwnershipChange.java index e25f6f2aa4..579a84595e 100644 --- a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityOwnershipChange.java +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityOwnershipChange.java @@ -25,6 +25,14 @@ public class DOMEntityOwnershipChange extends GenericEntityOwnershipChange