test/jdk/jdk/jfr/api/consumer/streaming/TestRepositoryMigration.java
author egahlin
Mon, 02 Sep 2019 21:03:40 +0200
branchJEP-349-branch
changeset 57984 269bbe414580
parent 57754 5693904ecbde
child 58076 ca625d28c580
permissions -rw-r--r--
Fix race condition in TestRepositoryMigration
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57754
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     1
package jdk.jfr.api.consumer.streaming;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     2
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     3
import java.nio.file.Files;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     4
import java.nio.file.Path;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     5
import java.nio.file.Paths;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     6
import java.time.Duration;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     7
import java.time.Instant;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     8
import java.util.concurrent.CountDownLatch;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
     9
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    10
import jdk.jfr.Event;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    11
import jdk.jfr.Recording;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    12
import jdk.jfr.consumer.EventStream;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    13
import jdk.jfr.jcmd.JcmdHelper;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    14
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    15
/**
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    16
 * @test
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    17
 * @summary Verifies that is possible to stream from a repository that is being
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    18
 *          moved.
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    19
 * @key jfr
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    20
 * @requires vm.hasJFR
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    21
 * @library /test/lib /test/jdk
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    22
 * @run main/othervm jdk.jfr.api.consumer.streaming.TestRepositoryMigration
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    23
 */
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    24
public class TestRepositoryMigration {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    25
    static class MigrationEvent extends Event {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    26
        int id;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    27
    }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    28
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    29
    public static void main(String... args) throws Exception {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    30
        Path newRepository = Paths.get("new-repository");
57984
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    31
        CountDownLatch event1 = new CountDownLatch(1);
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    32
        CountDownLatch event2 = new CountDownLatch(1);
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    33
57754
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    34
        try (EventStream es = EventStream.openRepository()) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    35
            es.setStartTime(Instant.EPOCH);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    36
            es.onEvent(e -> {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    37
                System.out.println(e);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    38
                if (e.getInt("id") == 1) {
57984
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    39
                    event1.countDown();
57754
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    40
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    41
                if (e.getInt("id") == 2) {
57984
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    42
                    event2.countDown();
57754
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    43
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    44
            });
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    45
            es.startAsync();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    46
            try (Recording r = new Recording()) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    47
                r.setFlushInterval(Duration.ofSeconds(1));
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    48
                r.start();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    49
                // Chunk in default repository
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    50
                MigrationEvent e1 = new MigrationEvent();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    51
                e1.id = 1;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    52
                e1.commit();
57984
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    53
                event1.await();
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    54
                JcmdHelper.jcmd("JFR.configure", "repositorypath=" + newRepository.toAbsolutePath());
57754
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    55
                // Chunk in new repository
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    56
                MigrationEvent e2 = new MigrationEvent();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    57
                e2.id = 2;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    58
                e2.commit();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    59
                r.stop();
57984
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    60
                event2.await();
57754
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    61
                // Verify that it happened in new repository
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    62
                if (!Files.exists(newRepository)) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    63
                    throw new AssertionError("Could not find repository " + newRepository);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    64
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    65
                System.out.println("Listing contents in new repository:");
57984
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    66
                boolean empty = true;
269bbe414580 Fix race condition in TestRepositoryMigration
egahlin
parents: 57754
diff changeset
    67
                for (Path p : Files.newDirectoryStream(newRepository)) {
57754
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    68
                    System.out.println(p.toAbsolutePath());
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    69
                    empty = false;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    70
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    71
                System.out.println();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    72
                if (empty) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    73
                    throw new AssertionError("Could not find contents in new repository location " + newRepository);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    74
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    75
            }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    76
        }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    77
    }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    78
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    79
}