You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by GitBox <gi...@apache.org> on 2020/03/05 07:37:43 UTC

[GitHub] [commons-compress] PeterAlfreadLee opened a new pull request #95: COMPRESS-505 : bug fix for random access of 7z

PeterAlfreadLee opened a new pull request #95: COMPRESS-505 : bug fix for random access of 7z
URL: https://github.com/apache/commons-compress/pull/95
 
 
   There are some problems in my PR about random access of 7z [#83](COMPRESS-342 random access of 7z files) :
   
   1. I was thinking that the `currentFolderInputStream` can be repositioned by changing the position of the `channel`, which turns out to be impossible. This PR fixesit by reopening the `currentFolderInputStream`.
   
   2. There are 2 ways to access the content of a 7z archive now : by sequential access(getNextEntry) and by random access(getInputStream). They may be used one after another. So there're some conditions we need to deal with :
   
   2.1 In a random access, if `currentEntryIndex` == `entryIndex` && the entry has not been read yet :
   This means the input stream of the entry we want has already been put in the `deferredBlockStreams` as the last array member. We SHOULD NOT build a new input stream for the entry again, because this will make same the existed stream in `deferredBlockStreams` be skipped. We should just do nothing cause the input stream is already in the `deferredBlockStreams`.
   
   2.2 In a random access, if `currentEntryIndex` == `entryIndex` && the entry has already been read :
   This means the entry we want has been read(maybe some of entry or all of the entry has been read, it does not matter). Then we should reopen the `currentFolderInputStream` and skip all the entries before the entry we want.
   BTW : we could determine if the file has been read or not by comparing the `bytesRemaining` of the input stream(as a `CRC32VerifyingInputStream`) and the actual size of the file.
   
   2.3 In a random access, if `currentEntryIndex` < `entryIndex` && the last entry in `deferredBlockStreams` has not been read :
   The input streams whose index equals or less than `currentEntryIndex` has already been put into the 
   `deferredBlockStreams`. We could just add the remaining entries to the `deferredBlockStreams`.
   
   2.4 In a random access, if `currentEntryIndex` < `entryIndex` && the last entry in `deferredBlockStreams` has already been read :
   Like 2.2, we have no other choices but reopen the `currentFolderInputStream` and skip all the entries again.
   
   2.5 In a random access, if `currentEntryIndex` > `entryIndex` :
   This means the entry we want has already been read or skipped beforehand. We could only reopen the `currentFolderInputStream` and skip all the entries again.
   
   In short, we should do nothing in 2.1, skip the remaining entries in 2.3, and reopen the `currentFolderInputStream` in 2.2/2.4/2.5. I have to admit this is a bit complicated, but I didn't find any other better ideas building the logic. :(
   
   I made some refactoring and added some new comments to make the code more clear. The corresponding testcases are also included in this PR.

----------------------------------------------------------------
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:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [commons-compress] coveralls commented on issue #95: COMPRESS-505 : bug fix for random access of 7z

Posted by GitBox <gi...@apache.org>.
coveralls commented on issue #95: COMPRESS-505 : bug fix for random access of 7z
URL: https://github.com/apache/commons-compress/pull/95#issuecomment-595094303
 
 
   
   [![Coverage Status](https://coveralls.io/builds/29145381/badge)](https://coveralls.io/builds/29145381)
   
   Coverage increased (+0.02%) to 87.017% when pulling **26b93a1afc45907e8b77c4a9017f54733f6d379e on PeterAlfreadLee:COMPRESS-505** into **1e8d131ec08ae418f0140d8166d452dff6739937 on apache:master**.
   

----------------------------------------------------------------
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:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [commons-compress] coveralls edited a comment on issue #95: COMPRESS-505 : bug fix for random access of 7z

Posted by GitBox <gi...@apache.org>.
coveralls edited a comment on issue #95: COMPRESS-505 : bug fix for random access of 7z
URL: https://github.com/apache/commons-compress/pull/95#issuecomment-595094303
 
 
   
   [![Coverage Status](https://coveralls.io/builds/29168678/badge)](https://coveralls.io/builds/29168678)
   
   Coverage increased (+0.04%) to 87.039% when pulling **ccf4f3d856f4ec7f62644bf0a8e0ad6bc155b1f9 on PeterAlfreadLee:COMPRESS-505** into **1e8d131ec08ae418f0140d8166d452dff6739937 on apache:master**.
   

----------------------------------------------------------------
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:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [commons-compress] PeterAlfredLee merged pull request #95: COMPRESS-505 : bug fix for random access of 7z

Posted by GitBox <gi...@apache.org>.
PeterAlfredLee merged pull request #95: COMPRESS-505 : bug fix for random access of 7z
URL: https://github.com/apache/commons-compress/pull/95
 
 
   

----------------------------------------------------------------
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:
users@infra.apache.org


With regards,
Apache Git Services