[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-1513?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Skye Wanderman-Milne updated ZOOKEEPER-1513:
--------------------------------------------

    Attachment: ZOOKEEPER-1513_2012.10.17.patch

simpler patch (includes suggestions from https://reviews.apache.org/r/7603/)
                
> "Unreasonable length" exception while starting a server.
> --------------------------------------------------------
>
>                 Key: ZOOKEEPER-1513
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1513
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.3.4
>            Reporter: Patrick Hunt
>            Assignee: Skye Wanderman-Milne
>             Fix For: 3.4.6
>
>         Attachments: ZOOKEEPER-1513_2012.10.17.patch, ZOOKEEPER-1513.patch
>
>
> The server is allowing a client to set data larger than the server can then 
> later read:
> {noformat}
> 2012-07-18 14:28:12,555 - FATAL [main:QuorumPeer@400] - Unable to load 
> database on disk 
> java.io.IOException: Unreasonable length = 1048583 
> at org.apache.jute.BinaryInputArchive.readBuffer(BinaryInputArchive.java:100) 
> at org.apache.zookeeper.server.persistence.Util.readTxnBytes(Util.java:232) 
> at 
> org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.next(FileTxnLog.java:602)
>  
> at 
> org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.init(FileTxnLog.java:529)
>  
> at 
> org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.<init>(FileTxnLog.java:504)
>  
> at 
> org.apache.zookeeper.server.persistence.FileTxnLog.read(FileTxnLog.java:341) 
> at 
> org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:131)
>  
> at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:222) 
> at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:398) 
> at 
> org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:143)
>  
> at 
> org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:103)
>  
> at 
> org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:76)
>  
> 2012-07-18 14:28:12,555 - FATAL [main:QuorumPeerMain@87] - Unexpected 
> exception, exiting abnormally 
> java.lang.RuntimeException: Unable to run quorum server 
> at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:401) 
> at 
> org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:143)
>  
> at 
> org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:103)
>  
> at 
> org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:76)
>  
> Caused by: java.io.IOException: Unreasonable length = 1048583 
> at org.apache.jute.BinaryInputArchive.readBuffer(BinaryInputArchive.java:100) 
> at org.apache.zookeeper.server.persistence.Util.readTxnBytes(Util.java:232) 
> at 
> org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.next(FileTxnLog.java:602)
>  
> at 
> org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.init(FileTxnLog.java:529)
>  
> at 
> org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.<init>(FileTxnLog.java:504)
>  
> at 
> org.apache.zookeeper.server.persistence.FileTxnLog.read(FileTxnLog.java:341) 
> at 
> org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:131)
>  
> at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:222) 
> at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:398) 
> ... 3 more
> {noformat}
> Notice the size is 0x100007 - 7 bytes beyond.
> The SetDataTxn contains the client data + a couple extra fields. On ingest 
> the server is applying the jute.maxbuffer size to the data (expected) but not 
> handling the fact that the data plus these extra fields may exceed the 
> jute.maxbuffer check when reading from disk.
> Workaround was simple here: set the jute.maxbuffer size a bit higher (and fix 
> the mis-behaving client, expectation was not that the data would grow this 
> large).

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to