src/jdk.jfr/share/classes/jdk/jfr/internal/cmd/ReconstructCommand.java
branchJDK-8200758-branch
changeset 57061 ac44f38300b2
parent 57060 5103d6d2e796
parent 52859 413c28945e0f
child 57062 044e7a644ee3
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/cmd/ReconstructCommand.java	Wed Dec 05 17:03:58 2018 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package jdk.jfr.internal.cmd;
-
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.channels.FileChannel;
-import java.nio.file.DirectoryStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Deque;
-import java.util.List;
-
-final class ReconstructCommand extends Command {
-
-    @Override
-    public String getOptionSyntax() {
-        return "<repository> <file>";
-    }
-
-    @Override
-    public String getName() {
-        return "reconstruct";
-    }
-
-    @Override
-    public String getDescription() {
-        return "Assemble leftover chunks, from a disk repository, into a recording file (.jfr)";
-    }
-
-    @Override
-    public void displayOptionUsage() {
-        println("  <repository>   Directory where the repository is located");
-        println();
-        println("  <file>         Name of the recording file (.jfr) to create");
-    }
-
-    @Override
-    public void execute(Deque<String> options) {
-        ensureMinArgumentCount(options, 2);
-        ensureMaxArgumentCount(options, 2);
-
-        Path repository = Paths.get(options.pop()).toAbsolutePath();
-        if (!Files.exists(repository)) {
-            userFailed("Could not find disk repository at " + repository);
-        }
-        if (!Files.isDirectory(repository)) {
-            userFailed("Must specify a directory as disk repository");
-        }
-        Path output = Paths.get(options.pop());
-        ensureFileDoesNotExist(output);
-        ensureJFRFile(output);
-
-        try (FileOutputStream fos = new FileOutputStream(output.toFile())) {
-            List<Path> files = listJFRFiles(repository);
-            if (files.isEmpty()) {
-                throw new IllegalStateException("No *.jfr files found at " + repository);
-            }
-            println();
-            println("Combining files... ");
-            println();
-            transferTo(files, output, fos.getChannel());
-            println();
-            println("Reconstruction complete.");
-        } catch (IOException e) {
-            userFailed("Could not open destination file " + output + ". " + e.getMessage());
-        }
-    }
-
-    private List<Path> listJFRFiles(Path path) throws IOException {
-        try {
-            List<Path> files = new ArrayList<>();
-            if (Files.isDirectory(path)) {
-                try (DirectoryStream<Path> stream = Files.newDirectoryStream(path, "*.jfr")) {
-                    for (Path p : stream) {
-                        if (!Files.isDirectory(p) && Files.isReadable(p)) {
-                            files.add(p);
-                        }
-                    }
-                }
-            }
-            files.sort((u, v) -> u.getFileName().compareTo(v.getFileName()));
-            return files;
-        } catch (IOException ioe) {
-            throw new IllegalStateException("Could not list *.jfr for directory " + path + ". " + ioe.getMessage());
-        }
-    }
-
-    private void transferTo(List<Path> sourceFiles, Path output, FileChannel out) {
-        long pos = 0;
-        for (Path p : sourceFiles) {
-            println(" " + p.toString());
-            try (FileChannel sourceChannel = FileChannel.open(p)) {
-                long rem = Files.size(p);
-                while (rem > 0) {
-                    long n = Math.min(rem, 1024 * 1024);
-                    long w = out.transferFrom(sourceChannel, pos, n);
-                    pos += w;
-                    rem -= w;
-                }
-            } catch (IOException ioe) {
-                throw new IllegalStateException("Could not copy recording chunk " + p + " to new file. " + ioe.getMessage());
-            }
-        }
-    }
-}