Apache Geode调试未知pdx类型= 2140705

时间:2018-07-03 08:38:37

标签: apache gemfire geode

如果我启动GFSH客户端并连接到Geode。 %timeit list2 = df2['list2'].sort_values().tolist();df['occurance'] = df['list1'].apply(lambda x: len(list(next(iter(())) if not all(i in list2 for i in x) else i for i in x))) 中有很多数据,要检查它,然后运行:

myRegion

我得到答复:

query --query="select * from /myRegion"

如何解决/调试此问题?

更新:Geode服务器日志中的错误是:

Result     : false
startCount : 0
endCount   : 20
Message    : Unknown pdx type=2140705

1 个答案:

答案 0 :(得分:1)

您可以从堆栈跟踪中找出直接原因。

PDX序列化流包含类型ID,该ID是对GemFire集群维护的类型元数据存储库的引用。在这种情况下,对象的序列化数据包含不在群集的元数据存储库中的typeId。

问题就变成了:“什么序列化了该对象,为什么它使用了无效的类型id?”

我之前看到的唯一方法是完全重新启动集群并且pdx元数据消失了,这是因为它不是持久性的,或者是因为它已被删除(例如,通过清除定位器工作目录)。

GemFire客户端缓存类型与其类型ID之间的映射。这使他们可以快速序列化对象,而无需不断从服务器中查找类型ID。客户端连接可以在群集重新启动后持续存在。客户端重新连接时,它不会刷新缓存的信息,并继续使用其缓存的类型ID写入对象。

因此,我会看到以前发生这种情况的唯一方法是,pdx元数据丢失的群集重新启动和未重新启动的客户端(例如,应用服务器)结合在一起。这符合您的情况吗?

如果是这样,避免这种情况的最好方法之一就是保留您的pdx元数据,并且永远不要删除它。