This adds traces giving information on the locations from which
transactions are created and committed. It also traces the transaction
identifier, with the intent of making it possible to match up
transaction traces with error messages.
Change-Id: Id82a79e8e430665f6fb5433ed7bab858044eacbe
Signed-off-by: Stephen Kitt <skitt@redhat.com>
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.List;
import java.util.Objects;
import java.util.Set;
+import javax.annotation.Nonnull;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.mdsal.common.api.CommitInfo;
AbstractTracingWriteTransaction(DOMDataWriteTransaction delegate, TracingBroker tracingBroker) {
this.delegate = Objects.requireNonNull(delegate);
this.tracingBroker = Objects.requireNonNull(tracingBroker);
AbstractTracingWriteTransaction(DOMDataWriteTransaction delegate, TracingBroker tracingBroker) {
this.delegate = Objects.requireNonNull(delegate);
this.tracingBroker = Objects.requireNonNull(tracingBroker);
+ recordOp(null, null, "instantiate", null);
}
private void recordOp(LogicalDatastoreType store, YangInstanceIdentifier yiid, String method,
}
private void recordOp(LogicalDatastoreType store, YangInstanceIdentifier yiid, String method,
}
} else {
StringBuilder sb = new StringBuilder();
}
} else {
StringBuilder sb = new StringBuilder();
- sb.append("Method \"").append(method);
- sb.append("\" to ").append(store);
- sb.append(" at ").append(tracingBroker.toPathString(yiid)).append('.');
- sb.append(" Data: ");
- if (node != null) {
- sb.append(node.getValue());
- } else {
- sb.append("null");
+ sb.append("Method \"").append(method).append('"');
+ if (store != null) {
+ sb.append(" to ").append(store);
+ }
+ if (yiid != null) {
+ sb.append(" at ").append(tracingBroker.toPathString(yiid));
+ }
+ sb.append('.');
+ if (yiid != null) {
+ // If we don’t have an id, we don’t expect data either
+ sb.append(" Data: ");
+ if (node != null) {
+ sb.append(node.getValue());
+ } else {
+ sb.append("null");
+ }
}
sb.append(" Stack:").append(tracingBroker.getStackSummary());
synchronized (this) {
}
sb.append(" Stack:").append(tracingBroker.getStackSummary());
synchronized (this) {
private synchronized void logOps() {
synchronized (this) {
private synchronized void logOps() {
synchronized (this) {
- logs.forEach(log -> TracingBroker.LOG.warn(log));
+ if (TracingBroker.LOG.isWarnEnabled()) {
+ TracingBroker.LOG.warn("Transaction {} contains the following operations:", getIdentifier());
+ logs.forEach(TracingBroker.LOG::warn);
+ }
synchronized (this) {
logs.clear();
}
synchronized (this) {
logs.clear();
}
- boolean result = delegate.cancel();
- return result;
+ return delegate.cancel();
@Override
public FluentFuture<? extends CommitInfo> commit() {
@Override
public FluentFuture<? extends CommitInfo> commit() {
+ recordOp(null, null, "commit", null);
logOps();
return delegate.commit();
}
@Override
logOps();
return delegate.commit();
}
@Override
public Object getIdentifier() {
return delegate.getIdentifier();
}
public Object getIdentifier() {
return delegate.getIdentifier();
}