summary |
shortlog |
log |
commit | commitdiff |
review |
tree
raw |
patch |
inline | side by side (from parent 1:
b5db7d0)
While target sequence is important, we also need to log transmit
sequence, too.
Since this issue involves a state mismatch on the backend, improve
ShardDataTreeCohort logging to include transaction identifier
and state.
Change-Id: I21735870a9ae7983dc14a8f8f4d7464d3448ca60
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
d2d9179e52a0d87aae2b9014b4c36384e24692e3)
// Already reconnecting, do not churn the logs
return this;
} else if (conn != null) {
// Already reconnecting, do not churn the logs
return this;
} else if (conn != null) {
- LOG.info("{}: connection {} indicated no sequencing mismatch on {} sequence {}, reconnecting it",
- persistenceId(), conn, failure.getTarget(), failure.getSequence(), cause);
+ LOG.info("{}: connection {} indicated sequencing mismatch on {} sequence {} ({}), reconnecting it",
+ persistenceId(), conn, failure.getTarget(), failure.getSequence(), command.getTxSequence(), cause);
return conn.reconnect(this, cause);
}
}
return conn.reconnect(this, cause);
}
}
package org.opendaylight.controller.cluster.datastore;
import com.google.common.annotations.VisibleForTesting;
package org.opendaylight.controller.cluster.datastore;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.primitives.UnsignedLong;
import com.google.common.util.concurrent.FutureCallback;
import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
import com.google.common.primitives.UnsignedLong;
import com.google.common.util.concurrent.FutureCallback;
import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
public abstract boolean isFailed();
public abstract State getState();
public abstract boolean isFailed();
public abstract State getState();
+
+ @Override
+ public final String toString() {
+ return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();
+ }
+
+ ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+ return toStringHelper.add("id", getIdentifier()).add("state", getState());
+ }
import akka.dispatch.ExecutionContexts;
import akka.dispatch.Futures;
import akka.dispatch.OnComplete;
import akka.dispatch.ExecutionContexts;
import akka.dispatch.Futures;
import akka.dispatch.OnComplete;
+import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
import com.google.common.primitives.UnsignedLong;
import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
import com.google.common.primitives.UnsignedLong;
void throwCanCommitFailure() throws Exception {
throw failure;
}
void throwCanCommitFailure() throws Exception {
throw failure;
}
+
+ @Override
+ ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+ return super.addToStringAttributes(toStringHelper).add("failure", failure);
+ }
}
static final class Normal extends SimpleShardDataTreeCohort {
}
static final class Normal extends SimpleShardDataTreeCohort {
public boolean isFailed() {
return state == State.FAILED || nextFailure != null;
}
public boolean isFailed() {
return state == State.FAILED || nextFailure != null;
}
+
+ @Override
+ ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+ return super.addToStringAttributes(toStringHelper).add("nextFailure", nextFailure);
+ }