[
https://issues.apache.org/jira/browse/COMPRESS-457?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stefan Bodewig resolved COMPRESS-457.
-------------------------------------
Resolution: Won't Fix
Actually I struggled a bit with the resolution - for your specific error case
it is a "can't fix". If calling close on the underlying stream throws an
exception there isn't anything we could do.
What I have changed is the resource cleanup in close across all
implementations. Underlying streams and other resources are now cleaned up in
finally blocks so issues with invalid archive formats won't lead to unclosed
streams. Unfortunately this doesn't help in your case.
> When there is no space in the disk,the method closeArchiveEntry() cannot work
> -----------------------------------------------------------------------------
>
> Key: COMPRESS-457
> URL: https://issues.apache.org/jira/browse/COMPRESS-457
> Project: Commons Compress
> Issue Type: Improvement
> Components: Compressors
> Affects Versions: 1.16, 1.17
> Environment: all are environment can recurring this problems
> Reporter: zhangxinyue
> Priority: Minor
> Fix For: 1.18
>
>
> When there is no space in the disk,I want to delete the Compressed half
> file, in my code,I close the archiveEntry use method closeArchiveEntry() of
> the TarArchiveOutputStream class,but because follow code
> fragments,closeArchiveEntry() is not work,I cannoot close io stream
> TarArchiveOutputStream,so that the tmp *.tar.gz cannot be delete.
> {code:java}
> // code placeholder
> public void closeArchiveEntry() throws IOException {
> if (this.finished) {
> throw new IOException("Stream has already been finished");
> } else if (!this.haveUnclosedEntry) {
> throw new IOException("No current entry to close");
> } else {
> this.out.flushBlock();
> if (this.currBytes < this.currSize) {
> throw new IOException("entry '" + this.currName + "' closed at '"
> + this.currBytes + "' before the '" + this.currSize + "' bytes specified in
> the header were written");
> } else {
> this.recordsWritten = (int)((long)this.recordsWritten +
> this.currSize / 512L);
> if (0L != this.currSize % 512L) {
> ++this.recordsWritten;
> }
> this.haveUnclosedEntry = false;
> }
> }
> }
> {code}
> I think this is a bug, when closeArchiveEntry() called,should not throw the
> follow IOException("entry '" + this.currName + "' closed at '" +
> this.currBytes + "' before the '" + this.currSize + "' bytes specified in the
> header were written").
> {code:java}
> // code placeholder
> if (this.currBytes < this.currSize)
> { throw new IOException("entry '" + this.currName + "' closed at '" +
> this.currBytes + "' before the '" + this.currSize + "' bytes specified in the
> header were written"); }
> {code}
>
> Please help, thk!!!
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)