summary |
shortlog |
log |
commit | commitdiff |
review |
tree
raw |
patch |
inline | side by side (from parent 1:
a398d6c)
I initially thought that it would be "interesting" to be able to do some
sort of output sorted by the age of the object creating kind of UX in
the CLI I'm planning to propose next, but ultimately realized that
keeping an extra Instant fields in EACH CloseTracked (e.g. Tx) is just
overhead and not really adding much value (because the NUMBER of
non-closed objects is MUCH more interesting than this timestamp..), thus
removing this again after all.
This is one of a serious of commits which is part of a solution I'm
proposing in order to be able to detect OOM issues such as Bug 9034,
based on using the mdsal-trace DataBroker.
Change-Id: Ie40fe23ce2af670902ff8e44a6757ebdf9ef915e
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
*/
package org.opendaylight.controller.md.sal.trace.closetracker.impl;
*/
package org.opendaylight.controller.md.sal.trace.closetracker.impl;
-import java.time.Instant;
import javax.annotation.Nullable;
/**
import javax.annotation.Nullable;
/**
closeTracker.removeFromTrackedRegistry();
}
closeTracker.removeFromTrackedRegistry();
}
- @Override
- public final Instant getObjectCreated() {
- return closeTracker.getObjectCreated();
- }
-
@Override
public @Nullable StackTraceElement[] getAllocationContextStackTrace() {
return closeTracker.getAllocationContextStackTrace();
@Override
public @Nullable StackTraceElement[] getAllocationContextStackTrace() {
return closeTracker.getAllocationContextStackTrace();
*/
package org.opendaylight.controller.md.sal.trace.closetracker.impl;
*/
package org.opendaylight.controller.md.sal.trace.closetracker.impl;
-import java.time.Instant;
import javax.annotation.Nullable;
/**
import javax.annotation.Nullable;
/**
*/
public interface CloseTracked<T extends CloseTracked<T>> {
*/
public interface CloseTracked<T extends CloseTracked<T>> {
- Instant getObjectCreated();
-
@Nullable StackTraceElement[] getAllocationContextStackTrace();
}
@Nullable StackTraceElement[] getAllocationContextStackTrace();
}
*/
package org.opendaylight.controller.md.sal.trace.closetracker.impl;
*/
package org.opendaylight.controller.md.sal.trace.closetracker.impl;
-import java.time.Instant;
import java.util.Objects;
import javax.annotation.Nullable;
import java.util.Objects;
import javax.annotation.Nullable;
*/
public class CloseTrackedTrait<T extends CloseTracked<T>> implements CloseTracked<T> {
*/
public class CloseTrackedTrait<T extends CloseTracked<T>> implements CloseTracked<T> {
- private final Instant created;
private final @Nullable Throwable allocationContext;
private final CloseTrackedRegistry<T> closeTrackedRegistry;
public CloseTrackedTrait(CloseTrackedRegistry<T> transactionChainRegistry) {
private final @Nullable Throwable allocationContext;
private final CloseTrackedRegistry<T> closeTrackedRegistry;
public CloseTrackedTrait(CloseTrackedRegistry<T> transactionChainRegistry) {
- this.created = Instant.now();
if (transactionChainRegistry.isDebugContextEnabled()) {
this.allocationContext = new Throwable("allocated at");
} else {
if (transactionChainRegistry.isDebugContextEnabled()) {
this.allocationContext = new Throwable("allocated at");
} else {
this.closeTrackedRegistry.add(this);
}
this.closeTrackedRegistry.add(this);
}
- @Override
- public Instant getObjectCreated() {
- return created;
- }
-
@Override
public StackTraceElement[] getAllocationContextStackTrace() {
return allocationContext != null ? allocationContext.getStackTrace() : null;
@Override
public StackTraceElement[] getAllocationContextStackTrace() {
return allocationContext != null ? allocationContext.getStackTrace() : null;
import com.google.common.base.Optional;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.base.Optional;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.ListenableFuture;
-import java.time.Instant;
import java.util.Objects;
import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import java.util.Objects;
import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
- @Override
- public Instant getObjectCreated() {
- return closeTracker.getObjectCreated();
- }
-
@Override
public StackTraceElement[] getAllocationContextStackTrace() {
return closeTracker.getAllocationContextStackTrace();
@Override
public StackTraceElement[] getAllocationContextStackTrace() {
return closeTracker.getAllocationContextStackTrace();
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.ListenableFuture;
-import java.time.Instant;
import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
- @Override
- public Instant getObjectCreated() {
- return closeTracker.getObjectCreated();
- }
-
@Override
public StackTraceElement[] getAllocationContextStackTrace() {
return closeTracker.getAllocationContextStackTrace();
@Override
public StackTraceElement[] getAllocationContextStackTrace() {
return closeTracker.getAllocationContextStackTrace();