diff options
author | Michajlo Matijkiw <michajlo@google.com> | 2015-06-08 16:02:40 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2015-06-09 09:57:10 +0000 |
commit | b17689b4d7ba9618f49a50e7b0b6d7ec8cbf2506 (patch) | |
tree | b24a90e2e3c276aed4dbb2529f93c672b324578f | |
parent | 7c66f2dd42f8feefeba0bd20ec72e731404bc387 (diff) |
Log exceptions deserializing Packages
Due to our streaming deserialization approach we can leave data on the
wire when encountering exceptions. Java serialization, the primary
consumer of this code, isn't happy with that and throws an
IllegalStateException("unread block data"), drowning out the original
exception and leaving us without much useful debug information.
--
MOS_MIGRATED_REVID=95442892
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java index a3faab4e2f..c909557e0e 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java @@ -45,12 +45,16 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Functionality to deserialize loaded packages. */ public class PackageDeserializer { + private static final Logger LOG = Logger.getLogger(PackageDeserializer.class.getName()); + // Workaround for Java serialization not allowing to pass in a context manually. // volatile is needed to ensure that the objects are published safely. // TODO(bazel-team): Subclass ObjectOutputStream to pass through environment variables. @@ -406,6 +410,16 @@ public class PackageDeserializer { * @throws IOException on failures reading from {@code in} */ public Package deserialize(InputStream in) throws PackageDeserializationException, IOException { + try { + return deserializeInternal(in); + } catch (PackageDeserializationException | RuntimeException e) { + LOG.log(Level.WARNING, "Failed to deserialize Package object", e); + throw e; + } + } + + private Package deserializeInternal(InputStream in) + throws PackageDeserializationException, IOException { // Read the initial Package message so we have the data to initialize the builder. We will read // the Targets in individually later. Build.Package packagePb = Build.Package.parseDelimitedFrom(in); |