Search in sources :

Example 1 with Job

use of com.intellij.concurrency.Job in project intellij-community by JetBrains.

the class VirtualFilePointerTest method stressRead.

private static void stressRead(@NotNull final VirtualFilePointer pointer, @NotNull final Collection<Job<Void>> reads) {
    for (int i = 0; i < 10; i++) {
        final AtomicReference<Job<Void>> reference = new AtomicReference<>();
        reference.set(JobLauncher.getInstance().submitToJobThread(() -> ApplicationManager.getApplication().runReadAction(() -> {
            VirtualFile file = pointer.getFile();
            if (file != null && !file.isValid()) {
                throw new IncorrectOperationException("I've caught it. I am that good");
            }
        }), future -> {
            try {
                future.get();
            } catch (Exception e) {
                throw new RuntimeException(e);
            } finally {
                reads.remove(reference.get());
            }
        }));
        reads.add(reference.get());
    }
}
Also used : MockVirtualFile(com.intellij.mock.MockVirtualFile) IntStream(java.util.stream.IntStream) VirtualFilePointerManager(com.intellij.openapi.vfs.pointers.VirtualFilePointerManager) UIUtil(com.intellij.util.ui.UIUtil) ArrayUtil(com.intellij.util.ArrayUtil) com.intellij.testFramework(com.intellij.testFramework) JobLauncher(com.intellij.concurrency.JobLauncher) NonNls(org.jetbrains.annotations.NonNls) TimeoutException(java.util.concurrent.TimeoutException) Computable(com.intellij.openapi.util.Computable) ContainerUtil(com.intellij.util.containers.ContainerUtil) AtomicReference(java.util.concurrent.atomic.AtomicReference) ArrayList(java.util.ArrayList) PathManagerEx(com.intellij.openapi.application.ex.PathManagerEx) Library(com.intellij.openapi.roots.libraries.Library) Job(com.intellij.concurrency.Job) OrderEntryUtil(com.intellij.openapi.roots.impl.OrderEntryUtil) Disposer(com.intellij.openapi.util.Disposer) WriteCommandAction(com.intellij.openapi.command.WriteCommandAction) VFileCreateEvent(com.intellij.openapi.vfs.newvfs.events.VFileCreateEvent) VirtualFilePointerListener(com.intellij.openapi.vfs.pointers.VirtualFilePointerListener) FileUtil(com.intellij.openapi.util.io.FileUtil) ProjectRootManager(com.intellij.openapi.roots.ProjectRootManager) VFileEvent(com.intellij.openapi.vfs.newvfs.events.VFileEvent) VirtualFilePointer(com.intellij.openapi.vfs.pointers.VirtualFilePointer) OrderRootType(com.intellij.openapi.roots.OrderRootType) LibraryUtil(com.intellij.openapi.roots.libraries.LibraryUtil) IncorrectOperationException(com.intellij.util.IncorrectOperationException) Collection(java.util.Collection) ConcurrencyUtil(com.intellij.util.ConcurrencyUtil) IOException(java.io.IOException) MockVirtualFile(com.intellij.mock.MockVirtualFile) Collectors(java.util.stream.Collectors) Disposable(com.intellij.openapi.Disposable) File(java.io.File) ExecutionException(java.util.concurrent.ExecutionException) TempFileSystem(com.intellij.openapi.vfs.ex.temp.TempFileSystem) Nullable(org.jetbrains.annotations.Nullable) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) ModuleRootManager(com.intellij.openapi.roots.ModuleRootManager) LibraryTable(com.intellij.openapi.roots.libraries.LibraryTable) ApplicationManager(com.intellij.openapi.application.ApplicationManager) com.intellij.openapi.vfs(com.intellij.openapi.vfs) NotNull(org.jetbrains.annotations.NotNull) AtomicReference(java.util.concurrent.atomic.AtomicReference) IncorrectOperationException(com.intellij.util.IncorrectOperationException) Job(com.intellij.concurrency.Job) TimeoutException(java.util.concurrent.TimeoutException) IncorrectOperationException(com.intellij.util.IncorrectOperationException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException)

Example 2 with Job

use of com.intellij.concurrency.Job in project intellij-community by JetBrains.

the class VirtualFilePointerTest method testThreadsPerformance.

public void testThreadsPerformance() throws IOException, InterruptedException, TimeoutException, ExecutionException {
    final File ioTempDir = createTempDirectory();
    final File ioPtrBase = new File(ioTempDir, "parent");
    final File ioPtr = new File(ioPtrBase, "f1");
    final File ioSand = new File(ioTempDir, "sand");
    final File ioSandPtr = new File(ioSand, "f2");
    assertTrue(ioSandPtr.getParentFile().mkdirs());
    assertTrue(ioSandPtr.createNewFile());
    assertTrue(ioPtr.getParentFile().mkdirs());
    assertTrue(ioPtr.createNewFile());
    doVfsRefresh(ioTempDir);
    final VirtualFilePointer pointer = createPointerByFile(ioPtr, null);
    assertTrue(pointer.isValid());
    final VirtualFile virtualFile = pointer.getFile();
    assertNotNull(virtualFile);
    assertTrue(virtualFile.isValid());
    final Collection<Job<Void>> reads = ContainerUtil.newConcurrentSet();
    VirtualFileAdapter listener = new VirtualFileAdapter() {

        @Override
        public void fileCreated(@NotNull VirtualFileEvent event) {
            stressRead(pointer, reads);
        }

        @Override
        public void fileDeleted(@NotNull VirtualFileEvent event) {
            stressRead(pointer, reads);
        }
    };
    Disposable disposable = Disposer.newDisposable();
    VirtualFileManager.getInstance().addVirtualFileListener(listener, disposable);
    try {
        int N = Timings.adjustAccordingToMySpeed(1000, false);
        System.out.println("N = " + N);
        for (int i = 0; i < N; i++) {
            assertNotNull(pointer.getFile());
            FileUtil.delete(ioPtrBase);
            doVfsRefresh(ioTempDir);
            // ptr is now null, cached as map
            final VirtualFile v = LocalFileSystem.getInstance().findFileByIoFile(ioSandPtr);
            new WriteCommandAction.Simple(getProject()) {

                @Override
                protected void run() throws Throwable {
                    //inc FS modCount
                    v.delete(this);
                    LocalFileSystem.getInstance().findFileByIoFile(ioSand).createChildData(this, ioSandPtr.getName());
                }
            }.execute().throwException();
            // ptr is still null
            assertTrue(ioPtrBase.mkdirs());
            assertTrue(ioPtr.createNewFile());
            stressRead(pointer, reads);
            doVfsRefresh(ioTempDir);
        }
    } finally {
        // unregister listener early
        Disposer.dispose(disposable);
        for (Job<Void> read : reads) {
            while (!read.isDone()) {
                read.waitForCompletion(1000);
            }
        }
    }
}
Also used : MockVirtualFile(com.intellij.mock.MockVirtualFile) Disposable(com.intellij.openapi.Disposable) NotNull(org.jetbrains.annotations.NotNull) VirtualFilePointer(com.intellij.openapi.vfs.pointers.VirtualFilePointer) Job(com.intellij.concurrency.Job) MockVirtualFile(com.intellij.mock.MockVirtualFile) File(java.io.File)

Aggregations

Job (com.intellij.concurrency.Job)2 MockVirtualFile (com.intellij.mock.MockVirtualFile)2 Disposable (com.intellij.openapi.Disposable)2 VirtualFilePointer (com.intellij.openapi.vfs.pointers.VirtualFilePointer)2 File (java.io.File)2 JobLauncher (com.intellij.concurrency.JobLauncher)1 ApplicationManager (com.intellij.openapi.application.ApplicationManager)1 PathManagerEx (com.intellij.openapi.application.ex.PathManagerEx)1 WriteCommandAction (com.intellij.openapi.command.WriteCommandAction)1 ModuleRootManager (com.intellij.openapi.roots.ModuleRootManager)1 OrderRootType (com.intellij.openapi.roots.OrderRootType)1 ProjectRootManager (com.intellij.openapi.roots.ProjectRootManager)1 OrderEntryUtil (com.intellij.openapi.roots.impl.OrderEntryUtil)1 Library (com.intellij.openapi.roots.libraries.Library)1 LibraryTable (com.intellij.openapi.roots.libraries.LibraryTable)1 LibraryUtil (com.intellij.openapi.roots.libraries.LibraryUtil)1 Computable (com.intellij.openapi.util.Computable)1 Disposer (com.intellij.openapi.util.Disposer)1 FileUtil (com.intellij.openapi.util.io.FileUtil)1 com.intellij.openapi.vfs (com.intellij.openapi.vfs)1