【问题标题】:How to block Java Thin client request till preloading of data in Ignite cluster is completed如何阻止Java瘦客户端请求直到Ignite集群中的数据预加载完成
【发布时间】:2019-09-25 20:44:48
【问题描述】:

我们正在运行一个具有 3 个节点的 ignite 集群,该集群预加载来自 3rd 方数据库的数据(使用自定义缓存存储)。当我们尝试使用 java 瘦客户端连接到集群时,如果请求在数据加载完成之前到达集群,我们会收到未知的对异常和一些不稳定的行为。

在数据加载完成之前,我们是否可以阻止客户端请求(TCP 套接字连接)?
我尝试了不同的生命周期事件(NODE_START_COMPLETED),但没有运气。

堆栈跟踪

Caused by: org.apache.ignite.binary.BinaryInvalidTypeException: Unknown pair [platformId=0, typeId=-845247802]
        at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:707)
        at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1757)
        at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716)
        at org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:798)
        at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143)
        at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177)
        at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:67)
        at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:125)
        at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1773)
        at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1761)
        at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.put(GridCacheStoreManagerAdapter.java:573)
        at org.apache.ignite.internal.processors.cache.store.GridCacheStoreManagerAdapter.putAll(GridCacheStoreManagerAdapter.java:627)
        at org.apache.ignite.internal.processors.cache.transactions.IgniteTxAdapter.batchStoreCommit(IgniteTxAdapter.java:1507)
        at org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalAdapter.userCommit(IgniteTxLocalAdapter.java:589)
        at org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal.localFinish(GridNearTxLocal.java:3646)
        at org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxFinishFuture.doFinish(GridNearTxFinishFuture.java:475)
        ... 41 common frames omitted
Caused by: java.lang.ClassNotFoundException: Unknown pair [platformId=0, typeId=-845247802]
        at org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:394)
        at org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:344)
        at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:698)
        ... 56 common frames omitted

【问题讨论】:

  • 您能否添加您遇到的问题的例外情况?
  • 添加了未知对异常的跟踪

标签: java ignite


【解决方案1】:

目前无法禁止瘦客户端使用 Ignite API 连接到集群。我为此改进创建了 JIRA 票证:https://issues.apache.org/jira/browse/IGNITE-12237

但是,未知对异常似乎不是由瘦客户端在错误时间连接引起的。通常是由于工作路径中缺少marshaller 目录造成的。

【讨论】:

  • 我们正在从预期创建编组器目录的 DB 中预加载数据。由于甚至在加载记录之前就已处理客户端请求,因此我们最终遇到了此错误。这也是我们保留客户端请求直到我们完成数据加载的原因之一
猜你喜欢
  • 2020-02-14
  • 2021-05-23
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2021-10-04
  • 2022-07-11
  • 2021-05-29
相关资源
最近更新 更多