[JBoss JIRA] (ISPN-5883) Node can apply new topology after sending status response
by Adrian Nistor (JIRA)
[ https://issues.jboss.org/browse/ISPN-5883?page=com.atlassian.jira.plugin.... ]
Adrian Nistor updated ISPN-5883:
--------------------------------
Fix Version/s: 8.2.0.Alpha1
(was: 8.1.0.Final)
> Node can apply new topology after sending status response
> ---------------------------------------------------------
>
> Key: ISPN-5883
> URL: https://issues.jboss.org/browse/ISPN-5883
> Project: Infinispan
> Issue Type: Bug
> Components: Core, Test Suite - Core
> Affects Versions: 8.0.1.Final, 7.2.5.Final, 8.1.0.Alpha2
> Reporter: Dan Berindei
> Assignee: Dan Berindei
> Priority: Critical
> Labels: testsuite_stability
> Fix For: 8.2.0.Alpha1
>
>
> {{LocalTopologyManagerImpl}} is responsible for sending the {{ClusterTopologyControlCommand(GET_STATUS)}} response, and when it sends the response it doesn't check the current view id against the new coordinator's view id. If the old coordinator already sent a topology update before the merge, that topology update might be processed after sending the status response. The new coordinator will send a topology update with a topology id of {{max(status response topology ids) + 1}}. The node will then process the topology update from the old coordinator, but it will ignore the topology update from the new coordinator with the same topology id.
> This is extra common in the partition handling tests, e.g. {{BasePessimisticTxPartitionAndMergeTest}} subclasses, because the test "injects" the JGroups view on each node serially, and often the 4th node sends the status response before it gets the new view.
> {noformat}
> 22:16:37,776 DEBUG (remote-thread-NodeD-p26-t6:[]) [LocalTopologyManagerImpl] Sending cluster status response for view 10
> // Topology from NodeC
> 22:16:37,778 DEBUG (transport-thread-NodeD-p28-t2:[]) [LocalTopologyManagerImpl] Updating local topology for cache pes-cache: CacheTopology{id=8, rebalanceId=3, currentCH=DefaultConsistentHash{ns=60, owners = (4)[NodeA-37631: 15+15, NodeB-47846: 15+15, NodeC-46467: 15+15, NodeD-30486: 15+15]}, pendingCH=null, unionCH=null, actualMembers=[NodeC-46467, NodeD-30486]}
> // Later, topology from NodeA
> 22:16:37,827 DEBUG (transport-thread-NodeD-p28-t1:[]) [LocalTopologyManagerImpl] Ignoring late consistent hash update for cache pes-cache, current topology is 8: CacheTopology{id=8, rebalanceId=3, currentCH=DefaultConsistentHash{ns=60, owners = (4)[NodeA-37631: 15+15, NodeB-47846: 15+15, NodeC-46467: 15+15, NodeD-30486: 15+15]}, pendingCH=null, unionCH=null, actualMembers=[NodeA-37631, NodeB-47846, NodeC-46467, NodeD-30486]}
> {noformat}
> As a solution, we can delay sending the status response until we have the same view as the coordinator (or a later one). We already check that the sender is the current coordinator before applying a topology update, so this will guarantee that the we don't apply other topology updates from the old coordinator. Since the status request is only sent after the new view was installed, this will not introduce any delays in the vast majority of cases.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
8 years, 7 months
[JBoss JIRA] (ISPN-5806) Add transaction support for Functional API
by Adrian Nistor (JIRA)
[ https://issues.jboss.org/browse/ISPN-5806?page=com.atlassian.jira.plugin.... ]
Adrian Nistor updated ISPN-5806:
--------------------------------
Fix Version/s: 8.2.0.Alpha1
(was: 8.1.0.Final)
> Add transaction support for Functional API
> ------------------------------------------
>
> Key: ISPN-5806
> URL: https://issues.jboss.org/browse/ISPN-5806
> Project: Infinispan
> Issue Type: Sub-task
> Reporter: Galder Zamarreño
> Assignee: Galder Zamarreño
> Fix For: 8.2.0.Alpha1
>
>
> A local cache with batching enabled produces this:
> {code:java}
> java.lang.IllegalArgumentException: Cannot create a transactional
> context without a valid Transaction instance.
> at org.infinispan.context.TransactionalInvocationContextFactory.createInvocationContext(TransactionalInvocationContextFactory.java:69)
> at org.infinispan.context.TransactionalInvocationContextFactory.createInvocationContext(TransactionalInvocationContextFactory.java:63)
> at org.infinispan.functional.impl.ReadWriteMapImpl.eval(ReadWriteMapImpl.java:56)
> at org.infinispan.lucene.impl.FileListOperations.addFileName(FileListOperations.java:60)
> (<-- experimental uncommitted code here)
> {code}
> For single operations that carry no transaction context, don't try to start a transaction and create a transactional context.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
8 years, 7 months
[JBoss JIRA] (ISPN-5729) Remote query - org/apache/lucene/uninverting/UninvertingReader missing on "order by" query
by Adrian Nistor (JIRA)
[ https://issues.jboss.org/browse/ISPN-5729?page=com.atlassian.jira.plugin.... ]
Adrian Nistor updated ISPN-5729:
--------------------------------
Fix Version/s: 8.2.0.Alpha1
(was: 8.1.0.Final)
> Remote query - org/apache/lucene/uninverting/UninvertingReader missing on "order by" query
> ------------------------------------------------------------------------------------------
>
> Key: ISPN-5729
> URL: https://issues.jboss.org/browse/ISPN-5729
> Project: Infinispan
> Issue Type: Bug
> Components: Remote Querying
> Affects Versions: 8.0.0.Final
> Reporter: Matej Čimbora
> Assignee: Adrian Nistor
> Fix For: 8.2.0.Alpha1
>
>
> Consider simple NumberObject class with the following attributes:
> private int integerValue;
> private double doubleValue;
> The following query leads to NoClassDefFoundError on server. Looks like using orderBy causes the problem.
>
> {code}
> QueryBuilder<Query> builder = qf.from(NumberObject.class).orderBy("integerValue").having("integerValue").gte(50).and().having("integerValue").lte(150).toBuilder();
> {code}
> Use the following snippet to load data into cache.
> {code}
> final int numEntries = 200;
> for (int i = 0; i < numEntries; i++) {
> NumberObject no = new NumberObject(i, i);
> manager.cache.put(i, no);
> }
> {code}
> Server exception:
> 12:55:24,158 ERROR [org.infinispan.server.hotrod.CacheDecodeContext] (HotRodServerWorker-9-1) ISPN005009: Unexpected error before any request parameters read: io.netty.handler.codec.DecoderException: java.lang.NoClassDefFoundError: org/apache/lucene/uninverting/UninvertingReader$Type
> at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:425)
> at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:168)
> at org.infinispan.server.hotrod.HotRodDecoder.org$infinispan$server$core$transport$StatsChannelHandler$$super$channelRead(HotRodDecoder.scala:31)
> at org.infinispan.server.core.transport.StatsChannelHandler$class.channelRead(StatsChannelHandler.scala:32)
> at org.infinispan.server.hotrod.HotRodDecoder.channelRead(HotRodDecoder.scala:31)
> at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
> at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
> at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
> at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:130)
> at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
> at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
> at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
> at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
> at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
> at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.NoClassDefFoundError: org/apache/lucene/uninverting/UninvertingReader$Type
> at org.hibernate.search.reader.impl.ManagedMultiReader.getMappings(ManagedMultiReader.java:102)
> at org.hibernate.search.reader.impl.ManagedMultiReader.getEffectiveReaders(ManagedMultiReader.java:68)
> at org.hibernate.search.reader.impl.ManagedMultiReader.createInstance(ManagedMultiReader.java:53)
> at org.hibernate.search.reader.impl.MultiReaderFactory.openReader(MultiReaderFactory.java:52)
> at org.hibernate.search.query.engine.impl.HSQueryImpl.buildSearcher(HSQueryImpl.java:619)
> at org.hibernate.search.query.engine.impl.HSQueryImpl.buildSearcher(HSQueryImpl.java:523)
> at org.hibernate.search.query.engine.impl.HSQueryImpl.queryEntityInfos(HSQueryImpl.java:263)
> at org.infinispan.query.impl.CacheQueryImpl.list(CacheQueryImpl.java:161)
> at org.infinispan.query.dsl.embedded.impl.EmbeddedLuceneQuery.list(EmbeddedLuceneQuery.java:49)
> at org.infinispan.query.remote.impl.QueryFacadeImpl.makeResponse(QueryFacadeImpl.java:84)
> at org.infinispan.query.remote.impl.QueryFacadeImpl.query(QueryFacadeImpl.java:64)
> at org.infinispan.server.hotrod.Decoder2x$.customReadKey(Decoder2x.scala:370)
> at org.infinispan.server.hotrod.HotRodDecoder.customDecodeKey(HotRodDecoder.scala:194)
> at org.infinispan.server.hotrod.HotRodDecoder.org$infinispan$server$hotrod$HotRodDecoder$$decodeKey(HotRodDecoder.scala:104)
> at org.infinispan.server.hotrod.HotRodDecoder$$anonfun$decode$1.apply$mcV$sp(HotRodDecoder.scala:48)
> at org.infinispan.server.hotrod.HotRodDecoder.wrapSecurity(HotRodDecoder.scala:206)
> at org.infinispan.server.hotrod.HotRodDecoder.decode(HotRodDecoder.scala:45)
> at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:370)
> ... 15 more
> Caused by: java.lang.ClassNotFoundException: org.apache.lucene.uninverting.UninvertingReader$Type from [Module "org.hibernate.search.engine:main" from local module loader @11028347 (finder: local module finder @14899482 (roots: /home/mcimbora/Projects/infinispan/infinispan/server/integration/build/target/infinispan-server-8.0.0.Final/modules,/home/mcimbora/Projects/infinispan/infinispan/server/integration/build/target/infinispan-server-8.0.0.Final/modules/system/layers/base))]
> at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205)
> at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
> at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
> at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
> at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
> ... 33 more
> Cache configuration
> {code:xml}
> <distributed-cache name="dist_infinispan" mode="SYNC">
> <locking acquire-timeout="3000" concurrency-level="1000"/>
> <transaction mode="NONE"/>
> <indexing index="LOCAL">
> <property name="default.directory_provider">infinispan</property>
> <property name="default.indexmanager">org.infinispan.query.indexmanager.InfinispanIndexManager</property>
> <property name="default.exclusive_index_use">true</property>
> <property name="default.metadata_cachename">lucene_metadata_repl</property>
> <property name="default.data_cachename">lucene_data_repl</property>
> <property name="default.locking_cachename">lucene_locking_repl</property>
> </indexing>
> </distributed-cache>
> <replicated-cache name="lucene_metadata_repl" mode="SYNC"/>
> <replicated-cache name="lucene_locking_repl" mode="SYNC"/>
> <replicated-cache name="lucene_data_repl" mode="SYNC"/>
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
8 years, 7 months
[JBoss JIRA] (ISPN-5816) Implement an event logger for server
by Adrian Nistor (JIRA)
[ https://issues.jboss.org/browse/ISPN-5816?page=com.atlassian.jira.plugin.... ]
Adrian Nistor updated ISPN-5816:
--------------------------------
Fix Version/s: 8.2.0.Alpha1
(was: 8.1.0.Final)
> Implement an event logger for server
> ------------------------------------
>
> Key: ISPN-5816
> URL: https://issues.jboss.org/browse/ISPN-5816
> Project: Infinispan
> Issue Type: Feature Request
> Components: Server
> Reporter: Tristan Tarrant
> Assignee: Tristan Tarrant
> Fix For: 8.2.0.Alpha1
>
>
> Create an event logger so that the management interface can show events:
> - 7 day retention
> - Task execution
> - Cluster events (node join/leave, split/merge, rebalance start/stop, mass-indexer start/stop, server shutdown/start, remote site up/down)
> - Cache events (start, stop)
> - Security audit
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
8 years, 7 months
[JBoss JIRA] (ISPN-5849) AutoCloseable return from adding listeners can be clunky to use
by Adrian Nistor (JIRA)
[ https://issues.jboss.org/browse/ISPN-5849?page=com.atlassian.jira.plugin.... ]
Adrian Nistor updated ISPN-5849:
--------------------------------
Fix Version/s: 8.2.0.Alpha1
(was: 8.1.0.Final)
> AutoCloseable return from adding listeners can be clunky to use
> ---------------------------------------------------------------
>
> Key: ISPN-5849
> URL: https://issues.jboss.org/browse/ISPN-5849
> Project: Infinispan
> Issue Type: Sub-task
> Reporter: Galder Zamarreño
> Assignee: Galder Zamarreño
> Fix For: 8.2.0.Alpha1
>
>
> On one side, to use it as a try-with-resource, you need to declare it right in the {{try()}};
> {code}
> try(AutoCloseable handler = writeOnlyMap.listeners().onWrite(written ->
> System.out.printf("Written (via onWrite): %s%n", written.get()))) {
> Map<String, String> entries = new HashMap<>();
> entries.put("key1", "value1");
> entries.put("key2", "value2");
> writeOnlyMap.evalMany(entries, (v, writeView) -> writeView.set(v))
> .get(); // Wait for completable future
> }
> {code}
> So it's usability is mostly designed for unit tests since listeners tend to be set and removed at a later stage. IOW, listeners are not generally a short-lived object.
> The other aspect that is clunky to use is the fact that AutoCloseable's close() throws Exception, which again makes it ackward to use for example if lambdas.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
8 years, 7 months