【问题标题】:Infinispan JGROUPS force Change ViewInfinispan JGROUPS 强制更改视图
【发布时间】:2016-12-03 22:52:20
【问题描述】:

我正在使用 Wildfly 9.x 和 Infinispan 7.2.3。我正面临着强制 jgroups change_view 事件以在“预销毁”阶段选择不同的协调员的问题。

这个sn-p代码:

Address localAddr=cacheManager.getAddress();
        Address coord=cacheManager.getMembers().get(0);
        if(!localAddr.equals(coord)) {
           logger.error("View can only be changed on coordinator");
            return;
        }
        if(cacheManager.getTransport().getMembers().size() == 1) {
             logger.error("Coordinator cannot change as view only has a single member");
            return;
        }

        long newId= cacheManager.getTransport().getViewId() + 1;
        List<Address> mbrs = cacheManager.getMembers();
        Address tmpCoord=mbrs.remove(0);

给我这个错误:

10:13:28,688 WARN  [org.jboss.as.ee] (ServerService Thread Pool -- 95) WFLYEE0006: Failed to destroy component instance org.jboss.as.ejb3.component.singleton.SingletonComponentInstance@5d8d8b5c: javax.ejb.EJBException: java.lang.UnsupportedOperationException
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:349)
    at org.jboss.as.ejb3.tx.LifecycleCMTTxInterceptor.processInvocation(LifecycleCMTTxInterceptor.java:66)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
    at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
    at org.jboss.as.ee.component.BasicComponentInstance.destroy(BasicComponentInstance.java:125)
    at org.jboss.as.ejb3.component.singleton.SingletonComponent.destroySingletonInstance(SingletonComponent.java:185)
    at org.jboss.as.ejb3.component.singleton.SingletonComponent.done(SingletonComponent.java:142)
    at org.jboss.as.ejb3.component.EJBComponent.stop(EJBComponent.java:559)
    at org.jboss.as.ee.component.ComponentStartService$2.run(ComponentStartService.java:78)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableList.remove(Collections.java:1317)
    at com.klopotek.core.session.job.SessionsHooverScheduler.changeView(SessionsHooverScheduler.java:219)
    at com.klopotek.core.session.job.SessionsHooverScheduler.stopJobs(SessionsHooverScheduler.java:192)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(ManagedReferenceLifecycleMethodInterceptor.java:96)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doLifecycleInterception(Jsr299BindingsInterceptor.java:114)
    at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:98)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ee.component.ManagedReferenceReleaseInterceptor.processInvocation(ManagedReferenceReleaseInterceptor.java:56)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275)
    ... 24 more

有没有办法使用 infinispan 强制设置新视图?

【问题讨论】:

    标签: java cluster-computing infinispan jgroups wildfly-9


    【解决方案1】:

    如果您设法访问 JGroups 频道,那么 [1] 可能会起作用。 IIRC 频道可以通过cache.getAdvancedCache().getRpcManager().getChannel() 或类似的调用来检索...

    [1]https://github.com/belaban/JGroups/wiki/Changing-the-coordinator-of-a-cluster

    【讨论】:

    • 是的,我已经尝试过您的示例,但是通过 infinispan 我无法重现它。我在 RpcManager 类中找不到任何 getChannel()...你能准确指出正确的方法吗?
    • 我找到了这个...planet.jboss.org/post/…
    • 就是RpcManager.getTransport(),把这个转换成一个JGroupsTransport,然后调用getChannel()
    • 你能看看这个链接吗?我创建了一个与 jgroups 的不同问题相关的新线程,但与这篇文章严格相关:stackoverflow.com/questions/38700634/…
    【解决方案2】:

    我不确定,但如果您这样做,更改 Infinispan 的协调员可能会导致另一次更改,并且可能会导致另一次重新平衡。 此外,此行为可能会随着下一个版本而改变。

    你为什么要这样做?如果您关闭节点,协调器会根据策略进行更改,并且缓存会重新平衡(用于分布式)以匹配密钥的所有者数量。

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 2017-03-22
      • 2015-01-02
      • 2017-11-09
      • 1970-01-01
      • 2014-11-21
      • 2013-07-19
      • 2020-07-31
      • 2018-01-11
      相关资源
      最近更新 更多