KRYO崩溃EnvironmentFailureException

KRYO崩溃EnvironmentFailureException

问题描述:

我试图序列化自定义类的一些对象,我得到以下异常:KRYO崩溃EnvironmentFailureException

com.esotericsoftware.kryo.KryoException: com.sleepycat.je.EnvironmentFailureException: (JE 5.0.73) IdentityHashMap.entrySet() should not be used. See [#18167]. UNEXPECTED_STATE: Unexpected internal state, may have side effects. 
Serialization trace: 
highestFlushLevels (com.sleepycat.je.recovery.DirtyINMap) 
checkpointDirtyMap (com.sleepycat.je.recovery.Checkpointer) 
checkpointer (com.sleepycat.je.dbi.EnvironmentImpl) 
envImpl (com.sleepycat.je.dbi.MemoryBudget) 
budget (com.sleepycat.je.cleaner.DbFileSummaryMap) 
dbFileSummaries (com.sleepycat.je.dbi.DatabaseImpl) 
databaseImpl (com.sleepycat.je.Database) 
db (com.thinkaurelius.titan.diskstorage.berkeleyje.BerkeleyJEKeyValueStore) 
store (com.thinkaurelius.titan.diskstorage.keycolumnvalue.keyvalue.OrderedKeyValueStoreAdapter) 
store (com.thinkaurelius.titan.diskstorage.keycolumnvalue.cache.NoKCVSCache) 
edgeStore (com.thinkaurelius.titan.diskstorage.Backend) 
backend (com.thinkaurelius.titan.graphdb.database.StandardTitanGraph) 
graph (com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx) 
tx (com.thinkaurelius.titan.graphdb.types.vertices.PropertyKeyVertex) 
key (com.thinkaurelius.titan.graphdb.relations.SimpleTitanProperty) 
properties (main.java.com.bag.util.storage.RelationshipStorage) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:101) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:651) 
    at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:113) 
    at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:39) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:651) 
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:100) 
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:40) 
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:651) 
    at main.java.com.bag.server.TestServer.handleRelationshipRead(TestServer.java:299) 
    at main.java.com.bag.server.TestServer.appExecuteUnordered(TestServer.java:219) 
    at bftsmart.tom.server.defaultservices.DefaultRecoverable.executeUnordered(DefaultRecoverable.java:417) 
    at bftsmart.tom.ServiceReplica.receiveReadonlyMessage(ServiceReplica.java:214) 
    at bftsmart.tom.core.DeliveryThread.deliverUnordered(DeliveryThread.java:289) 
    at bftsmart.tom.core.TOMLayer.requestReceived(TOMLayer.java:290) 
    at bftsmart.communication.client.netty.NettyClientServerCommunicationSystemServerSide.channelRead0(NettyClientServerCommunicationSystemServerSide.java:184) 
    at bftsmart.communication.client.netty.NettyClientServerCommunicationSystemServerSide.channelRead0(NettyClientServerCommunicationSystemServerSide.java:61) 
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278) 
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:277) 
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:264) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278) 
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:962) 
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:485) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:399) 
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:371) 
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112) 
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: com.sleepycat.je.EnvironmentFailureException: (JE 5.0.73) IdentityHashMap.entrySet() should not be used. See [#18167]. UNEXPECTED_STATE: Unexpected internal state, may have side effects. 
    at com.sleepycat.je.EnvironmentFailureException.unexpectedState(EnvironmentFailureException.java:376) 
    at com.sleepycat.je.utilint.IdentityHashMap.entrySet(IdentityHashMap.java:31) 
    at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:98) 
    at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:39) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    ... 77 more 

我有一个ArrayList

ArrayList<RelationshipStorage> relationshipStorage = new ArrayList<>(); 

存储是序列化的所有内容在它也是如此。

但我仍然有这个错误,我不知道为什么。 属性图中只有一个键和值。 关键是一个字符串,值是一个长字符串(整个对象的散列)。

+0

任何机会,你可以提供代码在崩溃的最小,完整,可验证示例(http://stackoverflow.com/help/mcve)的形式?这真的有帮助。 – entpnerd

+0

我发现其中一个数据库是用IdentityHashMap填充我的对象,而不是使用经典的HashMap。这一直在造成问题。 – user2524707

由于我的存储对象接受任何类型的地图,我没有注意到其中一个数据库返回了一个IdentityHashMap实例。 删除并强制使用正常的HashMap解决了该问题。