tree a75cc2015f14759c6ac4ddfbffb38badeffd82af
parent 9cf3632622c9fabe83c3589140bf9aee64f20e64
author Colin <colinma@tencent.com> 1657614735 +0800
committer GitHub <noreply@github.com> 1657614735 +0800
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJizTGPCRBK7hj4Ov3rIwAAICcIAAKx8XGJal374mUJ3SK9uvtp
 2VULWR95B+2qBl3qIs89Fz9t1T34x8QUFYK1iCBNtn44uXvjzf19a8lV7xVmjhHU
 A4rW6Psis+OD4KHekRf0b0YO4mMiQrYvQwEyLHiDkYeeTuFlCO+OozBa4U4cZZkV
 0qXgpNyifv+RyYM/GQvathUvRsM577lWLDJYFy/Dpm9pQ1gLWvCmTyXAj0Ma2KV8
 gZmXRTXqoEM3zsv0if/DFpeBVSvxTjxVI3pXFCY+pnN8d8BDmzjQO7jA/EchxONu
 eGQJBp9v/0AmMPE1h6tCNR/DOmg6Y00v9sicjYEShxXJnjjGKJo9KwP1XP84tjI=
 =3JPf
 -----END PGP SIGNATURE-----
 

[Bug] Fix skip() api maybe skip unexpected bytes which makes inconsistent data (#40) (#52)

### What changes were proposed in this pull request?
Fix bug when call `inputstream.skip()` which may return unexpected result


### Why are the changes needed?
Get exception messages as following, and it maybe caused by unexpected data from `Local` storage
```
com.tencent.rss.common.exception.RssException: Unexpected crc value for blockId[9992363390829154], expected:2562548848, actual:2244862586
        at com.tencent.rss.client.impl.ShuffleReadClientImpl.readShuffleBlockData(ShuffleReadClientImpl.java:184)
        at org.apache.spark.shuffle.reader.RssShuffleDataIterator.hasNext(RssShuffleDataIterator.java:99)
        at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:39)
        at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
```


### Does this PR introduce _any_ user-facing change?
No


### How was this patch tested?
With current UTs