Канал Piped Streams и Fabric8 Kubernetes - неверная сумма скопированного файла md5 и слишком медленная передача - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь осуществить загрузку файлов в модуль Kubernetes.Я решил пойти на kubernetes-клиент Fabric8 и придумал этот блок кода:

        try(KubernetesClient client = new DefaultKubernetesClient()) {

        final ExecWatch watch = client
                .pods()
                .inNamespace("default")
                .withName("laughing-pug-jenkins-856f744489-tzjkl")
                .redirectingInput()
                .redirectingError()
                .exec("tar", "xf","-","-C", "/");

        on(watch.getInput()).field("sink").set("buffer", new byte[16384 * 16384]);

        try(final FileInputStream stream = new FileInputStream("/home/x/Development/kubernetes-client/backup/test.file")) {
            final TarArchiveEntry entry = new TarArchiveEntry("/test.file");

            try (TarArchiveOutputStream tarOut = new TarArchiveOutputStream(watch.getInput());
                 ByteArrayOutputStream byteOut = new ByteArrayOutputStream()) {
                IOUtils.copyLarge(stream, byteOut);
                entry.setSize(byteOut.size());
                tarOut.putArchiveEntry(entry);
                byteOut.writeTo(tarOut);
                tarOut.closeArchiveEntry();
            }

        }

Я использую jOOR для рефлексивного изменения размера буфера.Размер буфера по умолчанию приводит к очень медленной передаче файла - он загружает около 1 КБ / с.

Файл загружен, и процесс заканчивается, но сумма md5 обоих файлов не равна.

Есть ли способ обойти это?Кажется, что нужно вызвать flush (), но я попробовал это, и это не помогло.

Возможно ли реализовать его таким образом, чтобы обеспечить последовательную загрузку файлов с нормальной скоростью?

...