You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Michael Han (JIRA)" <ji...@apache.org> on 2016/09/09 05:51:20 UTC

[jira] [Created] (ZOOKEEPER-2572) Potential resource leak in FileTxnLog.truncate

Michael Han created ZOOKEEPER-2572:
--------------------------------------

             Summary: Potential resource leak in FileTxnLog.truncate
                 Key: ZOOKEEPER-2572
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2572
             Project: ZooKeeper
          Issue Type: Bug
          Components: server
    Affects Versions: 3.5.2, 3.4.9
            Reporter: Michael Han
             Fix For: 3.4.10, 3.5.3


In FileTxnLog.truncate, we have:
{code}
public boolean truncate(long zxid) throws IOException {
        FileTxnIterator itr = null;
        try {
            itr = new FileTxnIterator(this.logDir, zxid);
            PositionInputStream input = itr.inputStream;
            if(input == null) {
                throw new IOException("No log files found to truncate! This could " +
                        "happen if you still have snapshots from an old setup or " +
                        "log files were deleted accidentally or dataLogDir was changed in zoo.cfg.");
            }
            long pos = input.getPosition();
            // now, truncate at the current position
            RandomAccessFile raf=new RandomAccessFile(itr.logFile,"rw");
            raf.setLength(pos);
            raf.close();
            while(itr.goToNextLog()) {
                if (!itr.logFile.delete()) {
                    LOG.warn("Unable to truncate {}", itr.logFile);
                }
            }
        } finally {
            close(itr);
        }
        return true;
    }
{code}

{{raf}} here can be potentially in a state of not closed after leaving the method, if there is an (IO) exception thrown from setLength.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)