test/jdk/jdk/jfr/api/consumer/streaming/TestRepositoryMigration.java
author egahlin
Thu, 15 Aug 2019 02:58:28 +0200
branchJEP-349-branch
changeset 57754 5693904ecbde
child 57984 269bbe414580
permissions -rw-r--r--
Add streaming support for repository migration
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");
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    31
        CountDownLatch events = new CountDownLatch(2);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    32
        try (EventStream es = EventStream.openRepository()) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    33
            es.setStartTime(Instant.EPOCH);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    34
            es.onEvent(e -> {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    35
                System.out.println(e);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    36
                if (e.getInt("id") == 1) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    37
                    events.countDown();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    38
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    39
                if (e.getInt("id") == 2) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    40
                    events.countDown();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    41
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    42
            });
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    43
            es.startAsync();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    44
            try (Recording r = new Recording()) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    45
                r.setFlushInterval(Duration.ofSeconds(1));
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    46
                r.start();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    47
                // Chunk in default repository
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    48
                MigrationEvent e1 = new MigrationEvent();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    49
                e1.id = 1;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    50
                e1.commit();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    51
               JcmdHelper.jcmd("JFR.configure", "repositorypath=" + newRepository.toAbsolutePath());
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    52
                // Chunk in new repository
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    53
                MigrationEvent e2 = new MigrationEvent();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    54
                e2.id = 2;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    55
                e2.commit();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    56
                r.stop();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    57
                events.await();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    58
                // Verify that it happened in new repository
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    59
                if (!Files.exists(newRepository)) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    60
                    throw new AssertionError("Could not find repository " + newRepository);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    61
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    62
                System.out.println("Listing contents in new repository:");
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    63
                boolean empty= true;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    64
                for (Path p: Files.newDirectoryStream(newRepository)) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    65
                    System.out.println(p.toAbsolutePath());
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    66
                    empty = false;
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    67
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    68
                System.out.println();
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    69
                if (empty) {
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    70
                    throw new AssertionError("Could not find contents in new repository location " + newRepository);
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    71
                }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    72
            }
5693904ecbde Add streaming support for repository migration
egahlin
parents:
diff changeset
    73
        }
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
}