X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tmf%2Forg.eclipse.tracecompass.tmf.core%2Fsrc%2Forg%2Feclipse%2Ftracecompass%2Ftmf%2Fcore%2Fstatesystem%2FTmfStateSystemAnalysisModule.java;h=dfc25c7f94ee7048cf44740c39040c9f6d5b974f;hb=d4792e9262c29182aa1da9b484178a14b4963070;hp=b53cfcd7ae493fed25e8c282fb423ecb9a1025d2;hpb=c81ffdf267abf79b180902bcba20e3b76d3a39ef;p=deliverable%2Ftracecompass.git diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java index b53cfcd7ae..dfc25c7f94 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java @@ -13,12 +13,9 @@ package org.eclipse.tracecompass.tmf.core.statesystem; -import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; - import java.io.File; import java.io.IOException; import java.util.Collections; -import java.util.HashMap; import java.util.Map; import java.util.concurrent.CountDownLatch; @@ -39,7 +36,6 @@ import org.eclipse.tracecompass.statesystem.core.backend.StateHistoryBackendFact import org.eclipse.tracecompass.tmf.core.analysis.TmfAbstractAnalysisModule; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; -import org.eclipse.tracecompass.tmf.core.project.model.ITmfPropertiesProvider; import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest; import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest; import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler; @@ -63,22 +59,22 @@ import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment; * @author Geneviève Bastien */ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisModule - implements ITmfAnalysisModuleWithStateSystems, ITmfPropertiesProvider { + implements ITmfAnalysisModuleWithStateSystems { private static final String EXTENSION = ".ht"; //$NON-NLS-1$ private final CountDownLatch fInitialized = new CountDownLatch(1); private final Object fRequestSyncObj = new Object(); - @Nullable private ITmfStateSystemBuilder fStateSystem; - @Nullable private ITmfStateProvider fStateProvider; - @Nullable private IStateHistoryBackend fHtBackend; - @Nullable private ITmfEventRequest fRequest; - @Nullable private TmfTimeRange fTimeRange = null; + private @Nullable ITmfStateSystemBuilder fStateSystem; + private @Nullable ITmfEventRequest fRequest; + private @Nullable TmfTimeRange fTimeRange = null; private int fNbRead = 0; private boolean fInitializationSucceeded; + private volatile @Nullable ITmfStateProvider fStateProvider; + /** * State system backend types * @@ -176,6 +172,19 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo return fInitializationSucceeded; } + /** + * @since 2.0 + */ + @Override + public boolean isQueryable(long ts) { + /* Return true if there is no state provider available (the analysis is not being built) */ + ITmfStateProvider provider = fStateProvider; + if (provider == null) { + return true; + } + return ts <= provider.getLatestSafeTime(); + } + // ------------------------------------------------------------------------ // TmfAbstractAnalysisModule // ------------------------------------------------------------------------ @@ -202,12 +211,10 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo /* Get the state system according to backend */ StateSystemBackendType backend = getBackendType(); - ITmfTrace trace = getTrace(); if (trace == null) { // Analysis was cancelled in the meantime - fInitializationSucceeded = false; - fInitialized.countDown(); + analysisReady(false); return false; } switch (backend) { @@ -237,13 +244,25 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo break; } } catch (TmfTraceException e) { - fInitializationSucceeded = false; - fInitialized.countDown(); + analysisReady(false); return false; } return !mon.isCanceled(); } + /** + * Make the module available and set whether the initialization succeeded or + * not. If not, no state system is available and + * {@link #waitForInitialization()} should return false. + * + * @param success + * True if the initialization succeeded, false otherwise + */ + private void analysisReady(boolean succeeded) { + fInitializationSucceeded = succeeded; + fInitialized.countDown(); + } + @Override protected void canceling() { ITmfEventRequest req = fRequest; @@ -281,10 +300,8 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo try { IStateHistoryBackend backend = StateHistoryBackendFactory.createHistoryTreeBackendExistingFile( id, htFile, version); - fHtBackend = backend; fStateSystem = StateSystemFactory.newStateSystem(backend, false); - fInitializationSucceeded = true; - fInitialized.countDown(); + analysisReady(true); return; } catch (IOException e) { /* @@ -301,7 +318,6 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo try { IStateHistoryBackend backend = StateHistoryBackendFactory.createHistoryTreeBackendNewFile( id, htFile, provider.getVersion(), provider.getStartTime(), QUEUE_SIZE); - fHtBackend = backend; fStateSystem = StateSystemFactory.newStateSystem(backend); provider.assignTargetStateSystem(fStateSystem); build(provider); @@ -382,7 +398,6 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo provider.assignTargetStateSystem(realSS); /* 7 */ - fHtBackend = partialBackend; fStateSystem = realSS; build(provider); @@ -395,7 +410,6 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo */ private void createNullHistory(String id, ITmfStateProvider provider) { IStateHistoryBackend backend = StateHistoryBackendFactory.createNullBackend(id); - fHtBackend = backend; fStateSystem = StateSystemFactory.newStateSystem(backend); provider.assignTargetStateSystem(fStateSystem); build(provider); @@ -408,7 +422,6 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo */ private void createInMemoryHistory(String id, ITmfStateProvider provider) { IStateHistoryBackend backend = StateHistoryBackendFactory.createInMemoryBackend(id, provider.getStartTime()); - fHtBackend = backend; fStateSystem = StateSystemFactory.newStateSystem(backend); provider.assignTargetStateSystem(fStateSystem); build(provider); @@ -419,13 +432,14 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo if (provider != null) { provider.dispose(); } - if (deleteFiles && (fHtBackend != null)) { - fHtBackend.removeFiles(); + fStateProvider = null; + if (deleteFiles && (fStateSystem != null)) { + fStateSystem.removeFiles(); } } private void build(ITmfStateProvider provider) { - if ((fStateSystem == null) || (fHtBackend == null)) { + if (fStateSystem == null) { throw new IllegalArgumentException(); } @@ -449,8 +463,7 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo * The state system object is now created, we can consider this module * "initialized" (components can retrieve it and start doing queries). */ - fInitializationSucceeded = true; - fInitialized.countDown(); + analysisReady(true); /* * Block the executeAnalysis() construction is complete (so that the @@ -474,11 +487,10 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo timeRange, index, ITmfEventRequest.ALL_DATA, - ITmfEventRequest.ExecutionType.BACKGROUND); + ITmfEventRequest.ExecutionType.BACKGROUND, + TmfStateSystemAnalysisModule.this.getDependencyLevel()); this.sci = sp; - - // sci.getTrace() will eventually return a @NonNull - trace = checkNotNull(sci.getTrace()); + trace = sci.getTrace(); } @@ -521,9 +533,7 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo @Override public void handleCancel() { super.handleCancel(); - if (isCompleteTrace(trace)) { - disposeProvider(true); - } + disposeProvider(true); } @Override @@ -598,10 +608,10 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo */ @Override public @NonNull Map<@NonNull String, @NonNull String> getProperties() { - Map<@NonNull String, @NonNull String> properties = new HashMap<>(); + Map<@NonNull String, @NonNull String> properties = super.getProperties(); StateSystemBackendType backend = getBackendType(); - properties.put(NonNullUtils.checkNotNull(Messages.TmfStateSystemAnalysisModule_PropertiesBackend), NonNullUtils.checkNotNull(backend.name())); + properties.put(NonNullUtils.checkNotNull(Messages.TmfStateSystemAnalysisModule_PropertiesBackend), backend.name()); switch (backend) { case FULL: case PARTIAL: