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