Канал Piped Streams и Fabric8 Kubernetes - неверная сумма md5sum скопированного файла и слишком медленная передача
Я пытаюсь реализовать загрузку файлов в стручок 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() должен быть вызван, но я попробовал это, и это не помогло.
Можно ли реализовать это таким образом, чтобы обеспечить последовательную загрузку файлов с нормальной скоростью?