dgd-contributor opened a new pull request #32839:
URL: https://github.com/apache/spark/pull/32839


   ### Why are the changes needed?
   With Long.minValue cast to an instant, secs will be floored in function 
microsToInstant and cause overflow when multiply with Micros_per_second 
   
   def microsToInstant(micros: Long): Instant = {
       val secs = Math.floorDiv(micros, MICROS_PER_SECOND)
       // Unfolded Math.floorMod(us, MICROS_PER_SECOND) to reuse the result of
       // the above calculation of `secs` via `floorDiv`.
       val mos = micros - secs * MICROS_PER_SECOND  <- it will overflow here
       Instant.ofEpochSecond(secs, mos * NANOS_PER_MICROS)
     }
   
   But the overflow is acceptable because it won't produce any change to the 
result
   
   However, when convert the instant back to micro value, it will raise 
Overflow Error, but we could ignore this error since the result will be 
corrected by adding NanoSecond to the result
   
    def instantToMicros(instant: Instant): Long = {
       val us = Math.multiplyExact(instant.getEpochSecond, MICROS_PER_SECOND) 
<- It overflow here
       val result = Math.addExact(us, NANOSECONDS.toMicros(instant.getNano))
       result
     }
   
   ### Does this PR introduce _any_ user-facing change?
   No
   
   
   ### How was this patch tested?
   Test added
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



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

Reply via email to