Skip to content

Commit 15cffde

Browse files
committed
Log resource deltas furing MarkerTest.testMarkerDeltasMoveFile
MarkerTest.testMarkerDeltasMoveFile fails infrequently, due to unexpected deltas received by the test resource change listener. The expected cause is a race condition, likely a parallel job notifying about the resource delta instead of the test main thread. This change adds logging for resource deltas, including the thread which received notifies about the resource delta. This information hopefully helps to identify the potentialy race condition. See: #2569
1 parent 9c3aad6 commit 15cffde

File tree

1 file changed

+55
-0
lines changed
  • resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources

1 file changed

+55
-0
lines changed

resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerTest.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,18 @@
5555
import org.eclipse.core.resources.IMarker;
5656
import org.eclipse.core.resources.IProject;
5757
import org.eclipse.core.resources.IResource;
58+
import org.eclipse.core.resources.IResourceChangeEvent;
59+
import org.eclipse.core.resources.IResourceChangeListener;
60+
import org.eclipse.core.resources.IResourceDelta;
61+
import org.eclipse.core.resources.IResourceDeltaVisitor;
5862
import org.eclipse.core.resources.IResourceVisitor;
5963
import org.eclipse.core.resources.IWorkspaceRoot;
6064
import org.eclipse.core.resources.IWorkspaceRunnable;
6165
import org.eclipse.core.resources.ResourcesPlugin;
6266
import org.eclipse.core.runtime.CoreException;
6367
import org.eclipse.core.runtime.IPath;
6468
import org.eclipse.core.runtime.Platform;
69+
import org.eclipse.core.runtime.Status;
6570
import org.eclipse.core.runtime.jobs.Job;
6671
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
6772
import org.eclipse.core.runtime.preferences.InstanceScope;
@@ -75,6 +80,8 @@
7580
@ExtendWith(WorkspaceResetExtension.class)
7681
public class MarkerTest {
7782

83+
private static final IResourceChangeListener LOG_RESOURCE_DELTA = MarkerTest::logDeltaEvent;
84+
7885
public static final String TRANSIENT_MARKER = "org.eclipse.core.tests.resources.transientmarker";
7986
public static final String TEST_PROBLEM_MARKER = "org.eclipse.core.tests.resources.testproblem";
8087

@@ -211,6 +218,7 @@ public void tearDown() throws Exception {
211218
}
212219
IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(ResourcesPlugin.PI_RESOURCES);
213220
prefs.putBoolean(ResourcesPlugin.PREF_AUTO_REFRESH, originalRefreshSetting);
221+
ResourcesPlugin.getWorkspace().removeResourceChangeListener(LOG_RESOURCE_DELTA);
214222
}
215223

216224
/**
@@ -950,6 +958,7 @@ public void testMarkerDeltasMoveFolder(TestInfo testInfo) throws CoreException {
950958
*/
951959
@Test
952960
public void testMarkerDeltasMoveFile(TestInfo testInfo) throws CoreException {
961+
ResourcesPlugin.getWorkspace().addResourceChangeListener(LOG_RESOURCE_DELTA);
953962
IWorkspaceRoot root = getWorkspace().getRoot();
954963
final IProject project = root.getProject("MyProject");
955964
IFolder folder = project.getFolder("folder");
@@ -1384,4 +1393,50 @@ public void testSetGetAttribute2() throws CoreException {
13841393
}
13851394
}
13861395

1396+
private static void logDeltaEvent(IResourceChangeEvent event) {
1397+
StringBuilder s = new StringBuilder();
1398+
s.append("Logging resource change event");
1399+
s.append(System.lineSeparator());
1400+
s.append("thread: ");
1401+
s.append(Thread.currentThread().getName());
1402+
s.append(System.lineSeparator());
1403+
s.append("type: ");
1404+
s.append(event.getType());
1405+
s.append(System.lineSeparator());
1406+
s.append("buildKind: ");
1407+
s.append(event.getBuildKind());
1408+
s.append(System.lineSeparator());
1409+
s.append("resource: ");
1410+
s.append(event.getResource());
1411+
s.append(System.lineSeparator());
1412+
s.append("source: ");
1413+
s.append(event.getSource());
1414+
IResourceDelta delta = event.getDelta();
1415+
if (delta != null) {
1416+
s.append(System.lineSeparator());
1417+
s.append("Delta:");
1418+
IResourceDeltaVisitor visitor = d -> {
1419+
s.append(System.lineSeparator());
1420+
s.append("\tkind: ");
1421+
s.append(d.getKind());
1422+
s.append(", resource: ");
1423+
s.append(d.getResource());
1424+
return true;
1425+
};
1426+
try {
1427+
delta.accept(visitor);
1428+
} catch (CoreException e) {
1429+
logError("Error occurred while visiting delta", e);
1430+
}
1431+
logInfo(s.toString());
1432+
}
1433+
}
1434+
1435+
private static void logError(String errorMessage, CoreException e) {
1436+
ResourcesPlugin.getPlugin().getLog().log(Status.error(errorMessage, e));
1437+
}
1438+
1439+
private static void logInfo(String message) {
1440+
ResourcesPlugin.getPlugin().getLog().log(Status.info(message));
1441+
}
13871442
}

0 commit comments

Comments
 (0)