Repository: aurora Updated Branches: refs/heads/master 4a1fba3c8 -> cb8e956f1
Stream backup file from disk This reduces the memory burden of loading a backup for recovery. Previously, the backup file would be fully loaded into a `byte[]`, which may be very large and fail to allocate. Reviewed at https://reviews.apache.org/r/62873/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/cb8e956f Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/cb8e956f Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/cb8e956f Branch: refs/heads/master Commit: cb8e956f18a8743e5b348683824272fbf9e55c11 Parents: 4a1fba3 Author: Bill Farner <[email protected]> Authored: Tue Oct 10 15:21:08 2017 -0700 Committer: Bill Farner <[email protected]> Committed: Tue Oct 10 15:21:08 2017 -0700 ---------------------------------------------------------------------- .../aurora/scheduler/storage/backup/Recovery.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/cb8e956f/src/main/java/org/apache/aurora/scheduler/storage/backup/Recovery.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/backup/Recovery.java b/src/main/java/org/apache/aurora/scheduler/storage/backup/Recovery.java index b74de9b..6cd5b2b 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/backup/Recovery.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/backup/Recovery.java @@ -13,7 +13,9 @@ */ package org.apache.aurora.scheduler.storage.backup; +import java.io.BufferedInputStream; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; @@ -23,10 +25,8 @@ import javax.inject.Inject; import com.google.common.base.Function; import com.google.common.collect.ImmutableSet; -import com.google.common.io.Files; import com.google.common.util.concurrent.Atomics; -import org.apache.aurora.codec.ThriftBinaryCodec; import org.apache.aurora.codec.ThriftBinaryCodec.CodingException; import org.apache.aurora.common.base.Command; import org.apache.aurora.gen.storage.Snapshot; @@ -35,6 +35,9 @@ import org.apache.aurora.scheduler.storage.DistributedSnapshotStore; import org.apache.aurora.scheduler.storage.Storage; import org.apache.aurora.scheduler.storage.Storage.MutateWork.NoResult; import org.apache.aurora.scheduler.storage.entities.IScheduledTask; +import org.apache.thrift.TException; +import org.apache.thrift.protocol.TBinaryProtocol; +import org.apache.thrift.transport.TIOStreamTransport; import static java.util.Objects.requireNonNull; @@ -138,10 +141,13 @@ public interface Recovery { throw new RecoveryException("Backup " + backupName + " does not exist."); } - Snapshot snapshot; + Snapshot snapshot = new Snapshot(); try { - snapshot = ThriftBinaryCodec.decode(Snapshot.class, Files.toByteArray(backupFile)); - } catch (CodingException e) { + TBinaryProtocol prot = new TBinaryProtocol( + new TIOStreamTransport(new BufferedInputStream(new FileInputStream(backupFile)))); + + snapshot.read(prot); + } catch (TException e) { throw new RecoveryException("Failed to decode backup " + e, e); } catch (IOException e) { throw new RecoveryException("Failed to read backup " + e, e);
