Patrick Hunt created ZOOKEEPER-1513:
---------------------------------------
Summary: "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
Fix For: 3.4.4, 3.5.0, 3.3.7
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:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira