Github user JoshRosen commented on a diff in the pull request:

    https://github.com/apache/spark/pull/2969#discussion_r19455153
  
    --- Diff: core/src/main/scala/org/apache/spark/storage/TachyonStore.scala 
---
    @@ -105,25 +106,17 @@ private[spark] class TachyonStore(
           return None
         }
         val is = file.getInStream(ReadType.CACHE)
    -    var buffer: ByteBuffer = null
    +    assert (is != null)
         try {
    -      if (is != null) {
    -        val size = file.length
    -        val bs = new Array[Byte](size.asInstanceOf[Int])
    -        val fetchSize = is.read(bs, 0, size.asInstanceOf[Int])
    -        buffer = ByteBuffer.wrap(bs)
    -        if (fetchSize != size) {
    -          logWarning(s"Failed to fetch the block $blockId from Tachyon: 
Size $size " +
    -            s"is not equal to fetched size $fetchSize")
    -          return None
    -        }
    -      }
    +      val size = file.length
    +      val bs = new Array[Byte](size.asInstanceOf[Int])
    +      ByteStreams.readFully(is, bs)
    +      Some(ByteBuffer.wrap(bs))
         } catch {
    --- End diff --
    
    Ah, gotcha.
    
    From a general API design perspective, I think it's a little weird to have 
methods that swallow OOMs and resurface them as other errors.  As a library 
consumer, how would you feel if, say, Snappy were to swallow OOMs and re-throw 
them as IOException?  A library with that sort of unexpected behavior might 
actually break user applications' ability to recover from OOMs: if we ran out 
of memory due to excessive memory usage in some other part of the app but the 
OOM happened to be caught and swallowed by the library, then the top-level 
uncaught exception handler might never get a chance to respond to the OOM in an 
application-specific way (e.g. attempt to close files, trigger GCs, or clear 
caches).
    
    I'm not against handling OOMs in principle, but I think that it should 
probably be done at higher levels of the stack since that seems easier to 
reason about.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to