Skip to content

Commit 095c69d

Browse files
committed
timing: Return FAILED when analysis failed in SegmentStoreStatisticsDp
Fixes #302 Signed-off-by: Bernd Hufmann <[email protected]>
1 parent 326d5e3 commit 095c69d

File tree

5 files changed

+81
-16
lines changed

5 files changed

+81
-16
lines changed

analysis/org.eclipse.tracecompass.analysis.timing.core.tests/src/org/eclipse/tracecompass/analysis/timing/core/tests/segmentstore/SegmentStoreStatisticsDataProviderTest.java

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.stream.Collectors;
2323
import java.util.stream.Stream;
2424

25+
import org.eclipse.core.runtime.IProgressMonitor;
2526
import org.eclipse.core.runtime.NullProgressMonitor;
2627
import org.eclipse.jdt.annotation.NonNull;
2728
import org.eclipse.jdt.annotation.Nullable;
@@ -37,6 +38,7 @@
3738
import org.eclipse.tracecompass.tmf.core.model.ITableColumnDescriptor;
3839
import org.eclipse.tracecompass.tmf.core.model.filters.FilterTimeQueryFilter;
3940
import org.eclipse.tracecompass.tmf.core.model.tree.TmfTreeModel;
41+
import org.eclipse.tracecompass.tmf.core.response.ITmfResponse;
4042
import org.eclipse.tracecompass.tmf.core.response.TmfModelResponse;
4143
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
4244
import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStub;
@@ -74,14 +76,14 @@ public class SegmentStoreStatisticsDataProviderTest extends AbstractSegmentStore
7476

7577
private static final @NonNull List<@NonNull StatisticsHolder> EXPECTED_STATS_FULL = Arrays.asList(
7678
new StatisticsHolder("", 0, -1, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068),
77-
new StatisticsHolder("Total", 3, 0, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068),
78-
new StatisticsHolder("even", 4, 3, 0, 65534, 32767.0, 18918.90, 32768, 1073709056.0, 0, 0, 65534, 131068),
79-
new StatisticsHolder("odd", 5, 3, 1, 65533, 32767.0, 18918.32, 32767, 1073676289.0, 1, 2, 65533, 131066));
79+
new StatisticsHolder("Total", 4, 0, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068),
80+
new StatisticsHolder("even", 5, 4, 0, 65534, 32767.0, 18918.90, 32768, 1073709056.0, 0, 0, 65534, 131068),
81+
new StatisticsHolder("odd", 6, 4, 1, 65533, 32767.0, 18918.32, 32767, 1073676289.0, 1, 2, 65533, 131066));
8082

8183
private static final @NonNull List<@NonNull StatisticsHolder> EXPECTED_STATS_SELECTION = Arrays.asList(
82-
new StatisticsHolder("Selection", 6, 0, 512, 4096, 2304.0, 1035.04, 3585, 8259840.0, 512, 1024, 4096, 8192),
83-
new StatisticsHolder("even", 7, 6, 512, 4096, 2304.0, 1035.48, 1793, 4131072.0, 512, 1024, 4096, 8192),
84-
new StatisticsHolder("odd", 8, 6, 513, 4095, 2304.0, 1034.9, 1792, 4128768.0, 513, 1026, 4095, 8190));
84+
new StatisticsHolder("Selection", 7, 0, 512, 4096, 2304.0, 1035.04, 3585, 8259840.0, 512, 1024, 4096, 8192),
85+
new StatisticsHolder("even", 8, 7, 512, 4096, 2304.0, 1035.48, 1793, 4131072.0, 512, 1024, 4096, 8192),
86+
new StatisticsHolder("odd", 9, 7, 513, 4095, 2304.0, 1034.9, 1792, 4128768.0, 513, 1026, 4095, 8190));
8587

8688
private static final List<@NonNull List<@NonNull String>> LIST_OF_EXPECTED_LABELS_WITH_MAPPER_FULL = Arrays.asList(
8789
Arrays.asList("My", "0", "65534", "32767.0", "18918.46928268775", "65535", "2.147385345E9", "[0,0]", "[65534,131068]"),
@@ -91,9 +93,9 @@ public class SegmentStoreStatisticsDataProviderTest extends AbstractSegmentStore
9193

9294
private static final @NonNull List<@NonNull StatisticsHolder> EXPECTED_STATS_WITH_MAPPER_FULL = Arrays.asList(
9395
new StatisticsHolder("My", 1, -1, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068),
94-
new StatisticsHolder("MyTotal", 9, 1, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068),
95-
new StatisticsHolder("Myeven", 10, 9, 0, 65534, 32767.0, 18918.90, 32768, 1073709056.0, 0, 0, 65534, 131068),
96-
new StatisticsHolder("Myodd", 11, 9, 1, 65533, 32767.0, 18918.32, 32767, 1073676289.0, 1, 2, 65533, 131066));
96+
new StatisticsHolder("MyTotal", 10, 1, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068),
97+
new StatisticsHolder("Myeven", 11, 10, 0, 65534, 32767.0, 18918.90, 32768, 1073709056.0, 0, 0, 65534, 131068),
98+
new StatisticsHolder("Myodd", 12, 10, 1, 65533, 32767.0, 18918.32, 32767, 1073676289.0, 1, 2, 65533, 131066));
9799

98100
private static final String USER_DEFINED_EXTRA_HEADER = "userDefinedHeader";
99101
private static final String USER_DEFINED_EXTRA_VALUE = "userDefinedValue";
@@ -107,16 +109,17 @@ public class SegmentStoreStatisticsDataProviderTest extends AbstractSegmentStore
107109
.collect(Collectors.toList());
108110
private static final @NonNull List<@NonNull StatisticsHolderUserDefined> EXPECTED_STATS_FULL_USER_DEFINED = Arrays.asList(
109111
new StatisticsHolderUserDefined("", 2, -1, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068, USER_DEFINED_EXTRA_VALUE),
110-
new StatisticsHolderUserDefined("Total", 12, 2, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068, USER_DEFINED_EXTRA_VALUE),
111-
new StatisticsHolderUserDefined("even", 13, 12, 0, 65534, 32767.0, 18918.90, 32768, 1073709056.0, 0, 0, 65534, 131068, USER_DEFINED_EXTRA_VALUE),
112-
new StatisticsHolderUserDefined("odd", 14, 12, 1, 65533, 32767.0, 18918.32, 32767, 1073676289.0, 1, 2, 65533, 131066, USER_DEFINED_EXTRA_VALUE));
112+
new StatisticsHolderUserDefined("Total", 13, 2, 0, 65534, 32767.0, 18918.46, 65535, 2147385345.0, 0, 0, 65534, 131068, USER_DEFINED_EXTRA_VALUE),
113+
new StatisticsHolderUserDefined("even", 14, 13, 0, 65534, 32767.0, 18918.90, 32768, 1073709056.0, 0, 0, 65534, 131068, USER_DEFINED_EXTRA_VALUE),
114+
new StatisticsHolderUserDefined("odd", 15, 13, 1, 65533, 32767.0, 18918.32, 32767, 1073676289.0, 1, 2, 65533, 131066, USER_DEFINED_EXTRA_VALUE));
113115

114116
private static List<ITableColumnDescriptor> fExpectedDescriptors;
115117
private static List<ITableColumnDescriptor> fExpectedDescriptorsUserDefined;
116118

117119
private static SegmentStoreStatisticsDataProvider fTestDataProvider;
118120
private static SegmentStoreStatisticsDataProvider fTestDataProvider2;
119121
private static SegmentStoreStatisticsDataProvider fTestDataProviderWithUserDefinedAspect;
122+
private static SegmentStoreStatisticsDataProvider fTestDataProviderWithModuleError;
120123

121124
private static TmfXmlTraceStub fTrace;
122125

@@ -170,6 +173,10 @@ public String getName() {
170173
}
171174
};
172175
fTestDataProviderWithUserDefinedAspect = new SegmentStoreStatisticsDataProvider(trace, fixture, "org.eclipse.tracecompass.analysis.timing.core.tests.segmentstore", Arrays.asList(userDefinedAspect));
176+
177+
fixture = getValidSegmentStats(fTrace, true);
178+
fTestDataProviderWithModuleError = new SegmentStoreStatisticsDataProvider(trace, fixture, "org.eclipse.tracecompass.analysis.timing.core.tests.segmentstore");
179+
173180
}
174181

175182
/**
@@ -189,6 +196,10 @@ public static void cleanup() {
189196
fTestDataProviderWithUserDefinedAspect.dispose();
190197
}
191198

199+
if (fTestDataProviderWithModuleError != null) {
200+
fTestDataProviderWithModuleError.dispose();
201+
}
202+
192203
if (fTrace != null) {
193204
fTrace.dispose();
194205
}
@@ -341,11 +352,40 @@ public void testFetchTreeWithUserDefinedAspectsFullRange() {
341352
EXPECTED_STATS_FULL_USER_DEFINED.size());
342353
}
343354

355+
/**
356+
* Verify that data provider query returns FAILED if analysis failed.
357+
*/
358+
@Test
359+
public void testModuleExecutionError() {
360+
long start = 1024;
361+
long end = 4096;
362+
FilterTimeQueryFilter filter = new FilterTimeQueryFilter(start, end, 2, true);
363+
Map<@NonNull String, @NonNull Object> fetchParameters = FetchParametersUtils.filteredTimeQueryToMap(filter);
364+
TmfModelResponse<@NonNull TmfTreeModel<@NonNull SegmentStoreStatisticsModel>> response = fTestDataProviderWithModuleError.fetchTree(fetchParameters, new NullProgressMonitor());
365+
assertNotNull(response);
366+
assertEquals(ITmfResponse.Status.FAILED, response.getStatus());
367+
TmfTreeModel<@NonNull SegmentStoreStatisticsModel> treeModel = response.getModel();
368+
assertNull(treeModel);
369+
}
370+
371+
344372
// ------------------------------------------------------------------------
345373
// Helpers
346374
// ------------------------------------------------------------------------
347375
private static @NonNull StubSegmentStatisticsAnalysis getValidSegmentStats(@NonNull ITmfTrace trace) throws TmfAnalysisException {
348-
StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis();
376+
return getValidSegmentStats(trace, false);
377+
}
378+
379+
private static @NonNull StubSegmentStatisticsAnalysis getValidSegmentStats(@NonNull ITmfTrace trace, boolean moduleError) throws TmfAnalysisException {
380+
StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis() {
381+
@Override
382+
public boolean executeAnalysis(@NonNull IProgressMonitor monitor) throws TmfAnalysisException {
383+
if (moduleError) {
384+
throw new TmfAnalysisException("Failure");
385+
}
386+
return super.executeAnalysis(monitor);
387+
}
388+
};
349389
fixture.setTrace(trace);
350390
fixture.getDependentAnalyses();
351391
fixture.schedule();

analysis/org.eclipse.tracecompass.analysis.timing.core/src/org/eclipse/tracecompass/internal/analysis/timing/core/segmentstore/SegmentStoreStatisticsDataProvider.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.eclipse.core.runtime.IProgressMonitor;
2222
import org.eclipse.core.runtime.NullProgressMonitor;
2323
import org.eclipse.jdt.annotation.Nullable;
24+
import org.eclipse.osgi.util.NLS;
2425
import org.eclipse.tracecompass.analysis.timing.core.segmentstore.SegmentStoreStatisticsModel;
2526
import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.AbstractSegmentStatisticsAnalysis;
2627
import org.eclipse.tracecompass.analysis.timing.core.statistics.IStatistics;
@@ -116,17 +117,26 @@ public SegmentStoreStatisticsDataProvider(ITmfTrace trace, IStatisticsAnalysis p
116117
fModule = provider instanceof IAnalysisModule ? (IAnalysisModule) provider : null;
117118
}
118119

120+
@SuppressWarnings("null")
119121
@Override
120122
public TmfModelResponse<TmfTreeModel<SegmentStoreStatisticsModel>> fetchTree(Map<String, Object> fetchParameters, @Nullable IProgressMonitor monitor) {
121123
IAnalysisModule module = fModule;
124+
boolean success = true;
122125
if (module != null) {
123126
if (monitor != null) {
124-
module.waitForCompletion(monitor);
125-
if (monitor.isCanceled()) {
127+
success = module.waitForCompletion(monitor);
128+
if (monitor.isCanceled() && module.getFailureCause() == null) {
126129
return new TmfModelResponse<>(null, Status.CANCELLED, CommonStatusMessage.TASK_CANCELLED);
127130
}
128131
} else {
129-
module.waitForCompletion();
132+
success = module.waitForCompletion();
133+
if (!success && module.getFailureCause() == null) {
134+
return new TmfModelResponse<>(null, Status.CANCELLED, CommonStatusMessage.TASK_CANCELLED);
135+
}
136+
}
137+
138+
if (!success && module.getFailureCause() != null) {
139+
return new TmfModelResponse<>(null, Status.FAILED, NLS.bind(CommonStatusMessage.ANALYSIS_EXECUTION_FAILED, module.getFailureCause()));
130140
}
131141
}
132142

tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/CommonStatusMessage.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,17 @@ public final class CommonStatusMessage {
5151
* A possible detailed message for a
5252
* {@link org.eclipse.tracecompass.tmf.core.response.ITmfResponse.Status#FAILED}
5353
* status
54+
* @since 10.1
5455
*/
5556
public static final String ANALYSIS_INITIALIZATION_FAILED = Objects.requireNonNull(Messages.CommonStatusMessage_AnalysisInitializationFailed);
5657

58+
/**
59+
* A possible detailed message for a
60+
* {@link org.eclipse.tracecompass.tmf.core.response.ITmfResponse.Status#FAILED}
61+
* status with error cause for failed analysis execution
62+
*/
63+
public static final String ANALYSIS_EXECUTION_FAILED = Objects.requireNonNull(Messages.CommonStatusMessage_AnalysisExecutionFailed);
64+
5765
/**
5866
* A possible detailed message for a
5967
* {@link org.eclipse.tracecompass.tmf.core.response.ITmfResponse.Status#FAILED}

tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/Messages.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ public class Messages extends NLS {
4343
*/
4444
public static @Nullable String CommonStatusMessage_AnalysisInitializationFailed;
4545

46+
/**
47+
* Detailed message for failed status cause by an analysis initialization failure
48+
* @since 10.1
49+
*/
50+
public static @Nullable String CommonStatusMessage_AnalysisExecutionFailed;
51+
4652
/**
4753
* Detailed message for failed status cause by trying to access to statesystem
4854
*/

tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ CommonStatusMessage_Running=Running
1313
CommonStatusMessage_Completed=Completed
1414
CommonStatusMessage_TaskCancelled=Task has been cancelled
1515
CommonStatusMessage_AnalysisInitializationFailed=Initialization of module failed
16+
CommonStatusMessage_AnalysisExecutionFailed=Failed executing analysis caused by {0}
1617
CommonStatusMessage_StateSystemFailed=Getting statesystem failed
1718
CommonStatusMessage_IncorrectQueryInterval=Incorrect query interval. Start time must be smaller than end time
1819
CommonStatusMessage_IncorrectQueryParameters=Incorrect query parameters

0 commit comments

Comments
 (0)