[jira] [Commented] (IGNITE-9228) Spark SQL Table Schema Specification

2019-09-04 Thread Manoj G T (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-9228?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16923059#comment-16923059
 ] 

Manoj G T commented on IGNITE-9228:
---

[~NIzhikov] [~stuartmacd] I have gone through the implementation of supporting 
schema name Ignite Spark SQL and it's only having support to schema name to 
read data, not for write. Any specific reason for the same? Is it in the future 
roadmap?

> Spark SQL Table Schema Specification
> 
>
> Key: IGNITE-9228
> URL: https://issues.apache.org/jira/browse/IGNITE-9228
> Project: Ignite
>  Issue Type: Improvement
>  Components: spark
>Affects Versions: 2.6
>Reporter: Stuart Macdonald
>Assignee: Stuart Macdonald
>Priority: Major
> Fix For: 2.8
>
>
> The Ignite Spark SQL interface currently takes just “table name” as a
> parameter which it uses to supply a Spark dataset with data from the
> underlying Ignite SQL table with that name.
> To do this it loops through each cache and finds the first one with the
> given table name [1]. This causes issues if there are multiple tables
> registered in different schema with the same table name as you can only
> access one of those from Spark. We could either:
> 1. Pass an extra parameter through the Ignite Spark data source which
> optionally specifies the schema name.
> 2. Support namespacing in the existing table name parameter, ie
> “schemaName.tableName”
> [1 
> ]https://github.com/apache/ignite/blob/ca973ad99c6112160a305df05be9458e29f88307/modules/spark/src/main/scala/org/apache/ignite/spark/impl/package.scala#L119



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Comment Edited] (IGNITE-12133) O(log n) partition exchange

2019-09-04 Thread Alexei Scherbakov (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-12133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922809#comment-16922809
 ] 

Alexei Scherbakov edited comment on IGNITE-12133 at 9/4/19 8:03 PM:


PME protocol itself doesn't leverage ring and uses direct node to node 
communication for sending partition maps (except for special case), but ring is 
used by discovery protocol, which "discovers" topology changes and delivers 
event to grid nodes, which triggers PME due to topology changes, for example 
"node left" or "node added".
Also discovery protocol provides "guaranteed ordered messages delivery" which 
is extensively used by Ignite internals and cannot be replaced easily.

Actually, PME consists of three phases:

1. Discovery phase, having O( n ) complexity for default TcpDiscoverySpi 
implementation.
2. Topology unlock waiting.
3. PME phase having k * O(m) complextity where m is number of I/O sender 
threads and k depends on topology size.

So total PME complexity is sum of 1 2 and 3.
To speed up PME we should improve 1 2 and 3.

How to improve 1 ?
Initially ring was designed for small topologies and still works very well for 
such cases with default settings.
Specially for large topologies zookeeper based discovery was introduced, which 
have better complexity.
So, for small topologies I suggest to use defaults.
For large topologies zookeeper discovery should be used.

How to improve 2 ?
This is discussed on dev list in lightweigh PME topic.

How to improve 3 ?
For small topologies same as 1, use defaults.
For large topologies we could use [~mnk]'s proposal and use tree-like message 
propagation pattern to achieve log(N) complexity.
I agree with [~ivan.glukos] on increasing failover complexity, but I think it's 
doable.
NOTE: same idea could be used for increasing replicated caches performance on 
large topologies. We have long time known issue with performance degradation if 
topology is large.

[~Jokser] 
Gossip idea looks interesting, but looks like complicated change and 
reinventing the wheel. Why not stick to zookeeper?







was (Author: ascherbakov):
PME protocol itself doesn't leverage ring and uses direct node to node 
communication for sending partition maps (except for special case), but ring is 
used by discovery protocol, which "discovers" topology changes and delivers 
event to grid nodes, which triggers PME due to topology changes, for example 
"node left" or "node added".
Also discovery protocol provides "guaranteed ordered messages delivery" which 
is extensively used by Ignite internals and cannot be replaced easily.

Actually, PME consists of three phases:

1. Discovery phase, having O( n ) complexity for default TcpDiscoverySpi 
implementation.
2. Topology unlock waiting (out of this post's scope).
3. PME phase having k * O(m) complextity where m is number of I/O sender 
threads and k depends on topology size.

So total PME complexity is sum of 1 2 and 3.
To speed up PME we should improve 1 and 3.

How to improve 1 ?
Initially ring was designed for small topologies and still works very well for 
such cases with default settings.
Specially for large topologies zookeeper based discovery was introduced, which 
have better complexity.
So, for small topologies I suggest to use defaults.
For large topologies zookeeper discovery should be used.

How to improve 3 ?
For small topologies same as 1, use defaults.
For large topologies we could use [~mnk]'s proposal and use tree-like message 
propagation pattern to achieve log(N) complexity.
I agree with [~ivan.glukos] on increasing failover complexity, but I think it's 
doable.
NOTE: same idea could be used for increasing replicated caches performance on 
large topologies. We have long time known issue with performance degradation if 
topology is large.

[~Jokser] 
Gossip idea looks interesting, but looks like complicated change and 
reinventing the wheel. Why not stick to zookeeper?






> O(log n) partition exchange
> ---
>
> Key: IGNITE-12133
> URL: https://issues.apache.org/jira/browse/IGNITE-12133
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Moti Nisenson-Ken
>Priority: Major
>
> Currently, partition exchange leverages a ring. This means that 
> communications is O\(n) in number of nodes. It also means that if 
> non-coordinator nodes hang it can take much longer to successfully resolve 
> the topology.
> Instead, why not use something like a skip-list where the coordinator is 
> first. The coordinator can notify the first node at each level of the 
> skip-list. Each node then notifies all of its "near-neighbours" in the 
> skip-list, where node B is a near-neighbour of node-A, if max-level(nodeB) <= 
> max-level(nodeA), and nodeB is the first node at its level when traversing 
> from nodeA in the direction of

[jira] [Comment Edited] (IGNITE-12133) O(log n) partition exchange

2019-09-04 Thread Alexei Scherbakov (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-12133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922809#comment-16922809
 ] 

Alexei Scherbakov edited comment on IGNITE-12133 at 9/4/19 8:02 PM:


PME protocol itself doesn't leverage ring and uses direct node to node 
communication for sending partition maps (except for special case), but ring is 
used by discovery protocol, which "discovers" topology changes and delivers 
event to grid nodes, which triggers PME due to topology changes, for example 
"node left" or "node added".
Also discovery protocol provides "guaranteed ordered messages delivery" which 
is extensively used by Ignite internals and cannot be replaced easily.

Actually, PME consists of three phases:

1. Discovery phase, having O( n ) complexity for default TcpDiscoverySpi 
implementation.
2. Topology unlock waiting (out of this post's scope).
3. PME phase having k * O(m) complextity where m is number of I/O sender 
threads and k depends on topology size.

So total PME complexity is sum of 1 2 and 3.
To speed up PME we should improve 1 and 3.

How to improve 1 ?
Initially ring was designed for small topologies and still works very well for 
such cases with default settings.
Specially for large topologies zookeeper based discovery was introduced, which 
have better complexity.
So, for small topologies I suggest to use defaults.
For large topologies zookeeper discovery should be used.

How to improve 3 ?
For small topologies same as 1, use defaults.
For large topologies we could use [~mnk]'s proposal and use tree-like message 
propagation pattern to achieve log(N) complexity.
I agree with [~ivan.glukos] on increasing failover complexity, but I think it's 
doable.
NOTE: same idea could be used for increasing replicated caches performance on 
large topologies. We have long time known issue with performance degradation if 
topology is large.

[~Jokser] 
Gossip idea looks interesting, but looks like complicated change and 
reinventing the wheel. Why not stick to zookeeper?







was (Author: ascherbakov):
PME protocol itself doesn't leverage ring and uses direct node to node 
communication for sending partition maps (except for special case), but ring is 
used by discovery protocol, which "discovers" topology changes and delivers 
event to grid nodes, which triggers PME due to topology changes, for example 
"node left" or "node added".
Also discovery protocol provides "guaranteed ordered messages delivery" which 
is extensively used by Ignite internals and cannot be replaced easily.

Actually, PME consists of three phases:

1. Discovery phase, having O( n ) complexity for default TcpDiscoverySpi 
implementation.
2. Topology unlock waiting (out of this post's scope).
3. PME phase having k * O(m) complextity where m is number of I/O sender 
threads and k depends on topology size.

So total PME complexity is sum of 1 and 3.
To speed up PME we should improve 1 and 3.

How to improve 1 ?
Initially ring was designed for small topologies and still works very well for 
such cases with default settings.
Specially for large topologies zookeeper based discovery was introduced, which 
have better complexity.
So, for small topologies I suggest to use defaults.
For large topologies zookeeper discovery should be used.

How to improve 3 ?
For small topologies same as 1, use defaults.
For large topologies we could use [~mnk]'s proposal and use tree-like message 
propagation pattern to achieve log(N) complexity.
I agree with [~ivan.glukos] on increasing failover complexity, but I think it's 
doable.
NOTE: same idea could be used for increasing replicated caches performance on 
large topologies. We have long time known issue with performance degradation if 
topology is large.

[~Jokser] 
Gossip idea looks interesting, but looks like complicated change and 
reinventing the wheel. Why not stick to zookeeper?






> O(log n) partition exchange
> ---
>
> Key: IGNITE-12133
> URL: https://issues.apache.org/jira/browse/IGNITE-12133
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Moti Nisenson-Ken
>Priority: Major
>
> Currently, partition exchange leverages a ring. This means that 
> communications is O\(n) in number of nodes. It also means that if 
> non-coordinator nodes hang it can take much longer to successfully resolve 
> the topology.
> Instead, why not use something like a skip-list where the coordinator is 
> first. The coordinator can notify the first node at each level of the 
> skip-list. Each node then notifies all of its "near-neighbours" in the 
> skip-list, where node B is a near-neighbour of node-A, if max-level(nodeB) <= 
> max-level(nodeA), and nodeB is the first node at its level when traversing 
> from nodeA in the direction of nodeB, skipping over nodes C which have 
> max-leve

[jira] [Commented] (IGNITE-12133) O(log n) partition exchange

2019-09-04 Thread Alexei Scherbakov (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-12133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922809#comment-16922809
 ] 

Alexei Scherbakov commented on IGNITE-12133:


PME protocol itself doesn't leverage ring and uses direct node to node 
communication for sending partition maps (except for special case), but ring is 
used by discovery protocol, which "discovers" topology changes and delivers 
event to grid nodes, which triggers PME due to topology changes, for example 
"node left" or "node added".
Also discovery protocol provides "guaranteed ordered messages delivery" which 
is extensively used by Ignite internals and cannot be replaced easily.

Actually, PME consists of three phases:

1. Discovery phase, having O(n) complexity for default TcpDiscoverySpi 
implementation.
2. Topology unlock waiting (out of this post's scope).
3. PME phase having k * O(m) complextity where m is number of I/O sender 
threads and k depends on topology size.

So total PME complexity is sum of 1 and 3.
To speed up PME we should improve 1 and 3.

How to improve 1 ?
Initially ring was designed for small topologies and still works very well for 
such cases with default settings.
Specially for large topologies zookeeper based discovery was introduced, which 
have better complexity.
So, for small topologies I suggest to use defaults.
For large topologies zookeeper discovery should be used.

How to improve 3 ?
For small topologies same as 1, use defaults.
For large topologies we could use [~mnk]'s proposal and use tree-like message 
propagation pattern to achieve log(N) complexity.
I agree with [~ivan.glukos] on increasing failover complexity, but I think it's 
doable.
NOTE: same idea could be used for increasing replicated caches performance on 
large topologies. We have long time known issue with performance degradation if 
topology is large.

[~Jokser] 
Gossip idea looks interesting, but looks like complicated change and 
reinventing the wheel. Why not stick to zookeeper?






> O(log n) partition exchange
> ---
>
> Key: IGNITE-12133
> URL: https://issues.apache.org/jira/browse/IGNITE-12133
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Moti Nisenson-Ken
>Priority: Major
>
> Currently, partition exchange leverages a ring. This means that 
> communications is O\(n) in number of nodes. It also means that if 
> non-coordinator nodes hang it can take much longer to successfully resolve 
> the topology.
> Instead, why not use something like a skip-list where the coordinator is 
> first. The coordinator can notify the first node at each level of the 
> skip-list. Each node then notifies all of its "near-neighbours" in the 
> skip-list, where node B is a near-neighbour of node-A, if max-level(nodeB) <= 
> max-level(nodeA), and nodeB is the first node at its level when traversing 
> from nodeA in the direction of nodeB, skipping over nodes C which have 
> max-level(C) > max-level(A). 
> 1
> 1 .  .  .3
> 1        3 . .  . 5
> 1 . 2 . 3 . 4 . 5 . 6
> In the above 1 would notify 2 and 3, 3 would notify 4 and 5, 2 -> 4, and 4 -> 
> 6, and 5 -> 6.
> One can achieve better redundancy by having each node traverse in both 
> directions, and having the coordinator also notify the last node in the list 
> at each level. This way in the above example if 2 and 3 were both down, 4 
> would still get notified from 5 and 6 (in the backwards direction).
>  
> The idea is that each individual node has O(log n) nodes to notify - so the 
> overall time is reduced. Additionally, we can deal well with at least 1 node 
> failure - if one includes the option of processing backwards, 2 consecutive 
> node failures can be handled as well. By taking this kind of an approach, 
> then the coordinator can basically treat any nodes it didn't receive a 
> message from as not-connected, and update the topology as well (disconnecting 
> any nodes that it didn't get a notification from). While there are some edge 
> cases here (e.g. 2 disconnected nodes, then 1 connected node, then 2 
> disconnected nodes - the connected node would be wrongly ejected from the 
> topology), these would generally be too rare to need explicit handling for.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Comment Edited] (IGNITE-12133) O(log n) partition exchange

2019-09-04 Thread Alexei Scherbakov (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-12133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922809#comment-16922809
 ] 

Alexei Scherbakov edited comment on IGNITE-12133 at 9/4/19 8:00 PM:


PME protocol itself doesn't leverage ring and uses direct node to node 
communication for sending partition maps (except for special case), but ring is 
used by discovery protocol, which "discovers" topology changes and delivers 
event to grid nodes, which triggers PME due to topology changes, for example 
"node left" or "node added".
Also discovery protocol provides "guaranteed ordered messages delivery" which 
is extensively used by Ignite internals and cannot be replaced easily.

Actually, PME consists of three phases:

1. Discovery phase, having O( n ) complexity for default TcpDiscoverySpi 
implementation.
2. Topology unlock waiting (out of this post's scope).
3. PME phase having k * O(m) complextity where m is number of I/O sender 
threads and k depends on topology size.

So total PME complexity is sum of 1 and 3.
To speed up PME we should improve 1 and 3.

How to improve 1 ?
Initially ring was designed for small topologies and still works very well for 
such cases with default settings.
Specially for large topologies zookeeper based discovery was introduced, which 
have better complexity.
So, for small topologies I suggest to use defaults.
For large topologies zookeeper discovery should be used.

How to improve 3 ?
For small topologies same as 1, use defaults.
For large topologies we could use [~mnk]'s proposal and use tree-like message 
propagation pattern to achieve log(N) complexity.
I agree with [~ivan.glukos] on increasing failover complexity, but I think it's 
doable.
NOTE: same idea could be used for increasing replicated caches performance on 
large topologies. We have long time known issue with performance degradation if 
topology is large.

[~Jokser] 
Gossip idea looks interesting, but looks like complicated change and 
reinventing the wheel. Why not stick to zookeeper?







was (Author: ascherbakov):
PME protocol itself doesn't leverage ring and uses direct node to node 
communication for sending partition maps (except for special case), but ring is 
used by discovery protocol, which "discovers" topology changes and delivers 
event to grid nodes, which triggers PME due to topology changes, for example 
"node left" or "node added".
Also discovery protocol provides "guaranteed ordered messages delivery" which 
is extensively used by Ignite internals and cannot be replaced easily.

Actually, PME consists of three phases:

1. Discovery phase, having O(n) complexity for default TcpDiscoverySpi 
implementation.
2. Topology unlock waiting (out of this post's scope).
3. PME phase having k * O(m) complextity where m is number of I/O sender 
threads and k depends on topology size.

So total PME complexity is sum of 1 and 3.
To speed up PME we should improve 1 and 3.

How to improve 1 ?
Initially ring was designed for small topologies and still works very well for 
such cases with default settings.
Specially for large topologies zookeeper based discovery was introduced, which 
have better complexity.
So, for small topologies I suggest to use defaults.
For large topologies zookeeper discovery should be used.

How to improve 3 ?
For small topologies same as 1, use defaults.
For large topologies we could use [~mnk]'s proposal and use tree-like message 
propagation pattern to achieve log(N) complexity.
I agree with [~ivan.glukos] on increasing failover complexity, but I think it's 
doable.
NOTE: same idea could be used for increasing replicated caches performance on 
large topologies. We have long time known issue with performance degradation if 
topology is large.

[~Jokser] 
Gossip idea looks interesting, but looks like complicated change and 
reinventing the wheel. Why not stick to zookeeper?






> O(log n) partition exchange
> ---
>
> Key: IGNITE-12133
> URL: https://issues.apache.org/jira/browse/IGNITE-12133
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Moti Nisenson-Ken
>Priority: Major
>
> Currently, partition exchange leverages a ring. This means that 
> communications is O\(n) in number of nodes. It also means that if 
> non-coordinator nodes hang it can take much longer to successfully resolve 
> the topology.
> Instead, why not use something like a skip-list where the coordinator is 
> first. The coordinator can notify the first node at each level of the 
> skip-list. Each node then notifies all of its "near-neighbours" in the 
> skip-list, where node B is a near-neighbour of node-A, if max-level(nodeB) <= 
> max-level(nodeA), and nodeB is the first node at its level when traversing 
> from nodeA in the direction of nodeB, skipping over nodes C which have 
> max-level(C)

[jira] [Resolved] (IGNITE-12137) ODBC: Application hang when connecting to a starting single node

2019-09-04 Thread Aleksey Plekhanov (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12137?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aleksey Plekhanov resolved IGNITE-12137.

Fix Version/s: 2.8
   Resolution: Duplicate

[~toninlg], ok, thank you!

I've closed the ticket as duplicate.

> ODBC: Application hang when connecting to a starting single node
> 
>
> Key: IGNITE-12137
> URL: https://issues.apache.org/jira/browse/IGNITE-12137
> Project: Ignite
>  Issue Type: Bug
>  Components: odbc
>Affects Versions: 2.7.5
> Environment: Windows 7
>Reporter: AH
>Priority: Major
> Fix For: 2.8
>
>
> If I repeatedly try to connect with ODBC before starting only one node, it 
> will at one time connect but the first query causes my application to hang.
> After reading that ODBC driver is not thread safe, I make sure to issue 
> statement on one thread at a time and the behaviour is still the same.
> +console output:+
> D:\apache-ignite-2.7.5-bin\platforms\dotnet\bin>Apache.Ignite.exe
> Sep 03, 2019 9:32:21 AM 
> org.springframework.beans.factory.xml.XmlBeanDefinitionR
> eader loadBeanDefinitions
> INFO: Loading XML bean definitions from URL 
> [file:/D:/apache-ignite-2.7.5-bin/co
> nfig/default-config.xml]
> Sep 03, 2019 9:32:21 AM 
> org.springframework.context.support.AbstractApplicationC
> ontext prepareRefresh
> INFO: Refreshing 
> org.springframework.context.support.GenericApplicationContext@2
> 7082746: startup date [Tue Sep 03 09:32:21 CEST 2019]; root of context 
> hierarchy
> [09:32:22] __ 
> [09:32:22] / _/ ___/ |/ / _/_ __/ __/
> [09:32:22] _/ // (7 7 // / / / / _/
> [09:32:22] /___/\___/_/|_/___/ /_/ /___/
> [09:32:22]
> [09:32:22] ver. 2.7.5#20190603-sha1:be4f2a15
> [09:32:22] 2018 Copyright(C) Apache Software Foundation
> [09:32:22]
> [09:32:22] Ignite documentation: http://ignite.apache.org
> [09:32:22]
> [09:32:22] Quiet mode.
> [09:32:22] ^-- Logging to file 'D:\apache-ignite-2.7.5-bin\work\log\ignite-413
> 535b7.0.log'
> [09:32:22] ^-- Logging by 'JavaLogger [quiet=true, config=null]'
> [09:32:22] ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or "-
> v" to ignite.\{sh|bat}
> [09:32:22]
> [09:32:22] OS: Windows 7 6.1 amd64
> [09:32:22] VM information: Java(TM) SE Runtime Environment 1.8.0_191-b12 
> Oracle
> Corporation Java HotSpot(TM) 64-Bit Server VM 25.191-b12
> [09:32:22] Please set system property '-Djava.net.preferIPv4Stack=true' to 
> avoid
>  possible problems in mixed environments.
> [09:32:22] Initial heap size is 192MB (should be no less than 512MB, use 
> -Xms512
> m -Xmx512m).
> [09:32:22] Configured plugins:
> [09:32:22] ^-- None
> [09:32:22]
> [09:32:22] Configured failure handler: [hnd=StopNodeOrHaltFailureHandler 
> [trySto
> p=false, timeout=0, super=AbstractFailureHandler 
> [ignoredFailureTypes=[SYSTEM_WO
> RKER_BLOCKED, SYSTEM_CRITICAL_OPERATION_TIMEOUT
> [09:32:23] Message queue limit is set to 0 which may lead to potential OOMEs 
> whe
> n running cache operations in FULL_ASYNC or PRIMARY_SYNC modes due to message 
> qu
> eues growth on sender and receiver sides.
> [09:32:23] Security status [authentication=off, tls/ssl=off]
> [09:32:25,782][SEVERE][client-connector-#41][ClientListenerProcessor] Runtime 
> er
> ror caught during grid runnable execution: GridWorker 
> [name=message-received-not
> ify, igniteInstanceName=null, finished=false, heartbeatTs=1567495945774, 
> hashCod
> e=215381183, interrupted=false, runner=client-connector-#41]
> java.lang.NullPointerException
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> nextConnectionId(ClientListenerNioListener.java:306)
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> prepareContext(ClientListenerNioListener.java:285)
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> onHandshake(ClientListenerNioListener.java:223)
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> onMessage(ClientListenerNioListener.java:129)
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> onMessage(ClientListenerNioListener.java:45)
>  at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onM
> essageReceived(GridNioFilterChain.java:279)
>  at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessa
> geReceived(GridNioFilterAdapter.java:109)
>  at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(G
> ridNioAsyncNotifyFilter.java:97)
>  at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java
> :120)
>  at org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorke
> rPool.java:70)
>  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
> java:1149)
>  at java.util.concurr

[jira] [Commented] (IGNITE-12137) ODBC: Application hang when connecting to a starting single node

2019-09-04 Thread AH (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-12137?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922510#comment-16922510
 ] 

AH commented on IGNITE-12137:
-

I've tested with the master. It is fixed.

> ODBC: Application hang when connecting to a starting single node
> 
>
> Key: IGNITE-12137
> URL: https://issues.apache.org/jira/browse/IGNITE-12137
> Project: Ignite
>  Issue Type: Bug
>  Components: odbc
>Affects Versions: 2.7.5
> Environment: Windows 7
>Reporter: AH
>Priority: Major
>
> If I repeatedly try to connect with ODBC before starting only one node, it 
> will at one time connect but the first query causes my application to hang.
> After reading that ODBC driver is not thread safe, I make sure to issue 
> statement on one thread at a time and the behaviour is still the same.
> +console output:+
> D:\apache-ignite-2.7.5-bin\platforms\dotnet\bin>Apache.Ignite.exe
> Sep 03, 2019 9:32:21 AM 
> org.springframework.beans.factory.xml.XmlBeanDefinitionR
> eader loadBeanDefinitions
> INFO: Loading XML bean definitions from URL 
> [file:/D:/apache-ignite-2.7.5-bin/co
> nfig/default-config.xml]
> Sep 03, 2019 9:32:21 AM 
> org.springframework.context.support.AbstractApplicationC
> ontext prepareRefresh
> INFO: Refreshing 
> org.springframework.context.support.GenericApplicationContext@2
> 7082746: startup date [Tue Sep 03 09:32:21 CEST 2019]; root of context 
> hierarchy
> [09:32:22] __ 
> [09:32:22] / _/ ___/ |/ / _/_ __/ __/
> [09:32:22] _/ // (7 7 // / / / / _/
> [09:32:22] /___/\___/_/|_/___/ /_/ /___/
> [09:32:22]
> [09:32:22] ver. 2.7.5#20190603-sha1:be4f2a15
> [09:32:22] 2018 Copyright(C) Apache Software Foundation
> [09:32:22]
> [09:32:22] Ignite documentation: http://ignite.apache.org
> [09:32:22]
> [09:32:22] Quiet mode.
> [09:32:22] ^-- Logging to file 'D:\apache-ignite-2.7.5-bin\work\log\ignite-413
> 535b7.0.log'
> [09:32:22] ^-- Logging by 'JavaLogger [quiet=true, config=null]'
> [09:32:22] ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or "-
> v" to ignite.\{sh|bat}
> [09:32:22]
> [09:32:22] OS: Windows 7 6.1 amd64
> [09:32:22] VM information: Java(TM) SE Runtime Environment 1.8.0_191-b12 
> Oracle
> Corporation Java HotSpot(TM) 64-Bit Server VM 25.191-b12
> [09:32:22] Please set system property '-Djava.net.preferIPv4Stack=true' to 
> avoid
>  possible problems in mixed environments.
> [09:32:22] Initial heap size is 192MB (should be no less than 512MB, use 
> -Xms512
> m -Xmx512m).
> [09:32:22] Configured plugins:
> [09:32:22] ^-- None
> [09:32:22]
> [09:32:22] Configured failure handler: [hnd=StopNodeOrHaltFailureHandler 
> [trySto
> p=false, timeout=0, super=AbstractFailureHandler 
> [ignoredFailureTypes=[SYSTEM_WO
> RKER_BLOCKED, SYSTEM_CRITICAL_OPERATION_TIMEOUT
> [09:32:23] Message queue limit is set to 0 which may lead to potential OOMEs 
> whe
> n running cache operations in FULL_ASYNC or PRIMARY_SYNC modes due to message 
> qu
> eues growth on sender and receiver sides.
> [09:32:23] Security status [authentication=off, tls/ssl=off]
> [09:32:25,782][SEVERE][client-connector-#41][ClientListenerProcessor] Runtime 
> er
> ror caught during grid runnable execution: GridWorker 
> [name=message-received-not
> ify, igniteInstanceName=null, finished=false, heartbeatTs=1567495945774, 
> hashCod
> e=215381183, interrupted=false, runner=client-connector-#41]
> java.lang.NullPointerException
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> nextConnectionId(ClientListenerNioListener.java:306)
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> prepareContext(ClientListenerNioListener.java:285)
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> onHandshake(ClientListenerNioListener.java:223)
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> onMessage(ClientListenerNioListener.java:129)
>  at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.
> onMessage(ClientListenerNioListener.java:45)
>  at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onM
> essageReceived(GridNioFilterChain.java:279)
>  at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessa
> geReceived(GridNioFilterAdapter.java:109)
>  at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(G
> ridNioAsyncNotifyFilter.java:97)
>  at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java
> :120)
>  at org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorke
> rPool.java:70)
>  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
> java:1149)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
> .java:624)
>  at java.la

[jira] [Updated] (IGNITE-12127) WAL writer may close file IO with unflushed changes when MMAP is disabled

2019-09-04 Thread Dmitriy Govorukhin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12127?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dmitriy Govorukhin updated IGNITE-12127:

Ignite Flags:   (was: Docs Required,Release Notes Required)

> WAL writer may close file IO with unflushed changes when MMAP is disabled
> -
>
> Key: IGNITE-12127
> URL: https://issues.apache.org/jira/browse/IGNITE-12127
> Project: Ignite
>  Issue Type: Bug
>Reporter: Dmitriy Govorukhin
>Assignee: Dmitriy Govorukhin
>Priority: Critical
> Fix For: 2.7.6
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Most likely the issue manifests itself as the following critical error:
> {code}
> 2019-08-27 14:52:31.286 ERROR 26835 --- [wal-write-worker%null-#447] ROOT : 
> Critical system error detected. Will be handled accordingly to configured 
> handler [hnd=class o.a.i.failure.StopNodeOrHaltFailureHandler, 
> failureCtx=FailureContext [type=CRITICAL_ERROR, err=class 
> o.a.i.i.processors.cache.persistence.StorageException: Failed to write 
> buffer.]]
> org.apache.ignite.internal.processors.cache.persistence.StorageException: 
> Failed to write buffer.
> at 
> org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager$WALWriter.writeBuffer(FileWriteAheadLogManager.java:3444)
>  [ignite-core-2.5.7.jar!/:2.5.7]
> at 
> org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager$WALWriter.body(FileWriteAheadLogManager.java:3249)
>  [ignite-core-2.5.7.jar!/:2.5.7]
> at 
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) 
> [ignite-core-2.5.7.jar!/:2.5.7]
> at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]
> Caused by: java.nio.channels.ClosedChannelException: null
> at sun.nio.ch.FileChannelImpl.ensureOpen(FileChannelImpl.java:110) 
> ~[na:1.8.0_201]
> at sun.nio.ch.FileChannelImpl.position(FileChannelImpl.java:253) 
> ~[na:1.8.0_201]
> at 
> org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIO.position(RandomAccessFileIO.java:48)
>  ~[ignite-core-2.5.7.jar!/:2.5.7]
> at 
> org.apache.ignite.internal.processors.cache.persistence.file.FileIODecorator.position(FileIODecorator.java:41)
>  ~[ignite-core-2.5.7.jar!/:2.5.7]
> at 
> org.apache.ignite.internal.processors.cache.persistence.file.AbstractFileIO.writeFully(AbstractFileIO.java:111)
>  ~[ignite-core-2.5.7.jar!/:2.5.7]
> at 
> org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager$WALWriter.writeBuffer(FileWriteAheadLogManager.java:3437)
>  [ignite-core-2.5.7.jar!/:2.5.7]
> ... 3 common frames omitted
> {code}
> It appears that there following sequence is possible:
>  * Thread A attempts to log a large record which does not fit segment, 
> {{addRecord}} fails and the thread A starts segment rollover. I successfully 
> runs {{flushOrWait(null)}} and gets de-scheduled before adding switch segment 
> record
>  * Thread B attempts to log another record, which fits exactly till the end 
> of the current segment. The record is added to the buffer
>  * Thread A resumes and fails to add the switch segment record. No flush is 
> performed and the thread immediately proceeds for wal-writer close
>  * WAL writer thread wakes up, sees that there is a CLOSE request, closes the 
> file IO and immediately proceeds to write unflushed changes causing the 
> exception.
> Unconditional flush after switch segment record write should fix the issue.
> Besides the bug itself, I suggest the following changes to the 
> {{FileWriteHandleImpl}} ({{FileWriteAheadLogManager}} in earlier versions):
>  * There is an {{fsync(filePtr)}} call inside {{close()}}; however, 
> {{fsync()}} checks the {{stop}} flag (which is set inside {{close}}) and 
> returns immediately after {{flushOrWait()}} if the flag is set - this is very 
> confusing. After all, the {{close()}} itself explicitly calls {{force}} after 
> flush
>  * There is an ignored IO exception in mmap mode - this should be propagated 
> to the failure handler
>  * In WAL writer, we check for file CLOSE and then attemp to write to 
> (possibly) the same write handle - write should be always before close
>  * In WAL writer, there are racy reads of current handle - it would be better 
> if we read the current handle once and then operate on it during the whole 
> loop iteration



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12121) Double checkpoint triggering due to incorrect place of update current checkpoint

2019-09-04 Thread Dmitriy Govorukhin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12121?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dmitriy Govorukhin updated IGNITE-12121:

Ignite Flags:   (was: Docs Required,Release Notes Required)

> Double checkpoint triggering due to incorrect place of update current 
> checkpoint
> 
>
> Key: IGNITE-12121
> URL: https://issues.apache.org/jira/browse/IGNITE-12121
> Project: Ignite
>  Issue Type: Bug
>Reporter: Anton Kalashnikov
>Assignee: Anton Kalashnikov
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Double checkpoint triggering due to incorrect place of update current 
> checkpoint. This can lead to two ckeckpoints one by one if checkpoint trigger 
> was 'too many dirty pages'.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12121) Double checkpoint triggering due to incorrect place of update current checkpoint

2019-09-04 Thread Dmitriy Govorukhin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12121?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dmitriy Govorukhin updated IGNITE-12121:

Fix Version/s: 2.8

> Double checkpoint triggering due to incorrect place of update current 
> checkpoint
> 
>
> Key: IGNITE-12121
> URL: https://issues.apache.org/jira/browse/IGNITE-12121
> Project: Ignite
>  Issue Type: Bug
>Reporter: Anton Kalashnikov
>Assignee: Anton Kalashnikov
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Double checkpoint triggering due to incorrect place of update current 
> checkpoint. This can lead to two ckeckpoints one by one if checkpoint trigger 
> was 'too many dirty pages'.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12112) H2TreeIndex should throw CorruptTreeException with cacheId, cacheName and indexName

2019-09-04 Thread Andrew Mashenkov (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12112?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Mashenkov updated IGNITE-12112:
--
Component/s: sql

> H2TreeIndex should throw CorruptTreeException with cacheId, cacheName and 
> indexName
> ---
>
> Key: IGNITE-12112
> URL: https://issues.apache.org/jira/browse/IGNITE-12112
> Project: Ignite
>  Issue Type: Improvement
>  Components: sql
>Reporter: Denis Chudov
>Assignee: Denis Chudov
>Priority: Major
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> At the moment we can't define problem cache, If we have many caches in one 
> cache group and CorruptTreeException was thrown CorruptTreeException. 
> For example:
> {code:java}
> org.h2.message.DbException: General error: "class 
> org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
>  Runtime failure on row: Row@346ba4aa[ key: 29003, val: 
> com.sbt.acquiring.processing.entities.dictionaries.TurnoverRange_DPL_PROXY 
> [idHash=492721050, hash=-616731792, valueStart=2001, isImmutable=false, 
> lastChangeDate=1560917668719, name=Ñâûøå 20, valueEnd=null, 
> changeState=null, id=29003, pkey=7c0d0d59-f33e-41d7-a5c9-4d8c7e74b976, 
> ownerId=acquiring-processing-replication, base=true], ver: GridCacheVersion 
> [topVer=172396060, order=1560917613306, nodeOrder=2] ][ Ñâûøå 20, null, 
> 2001, TRUE, null, 29003, 7c0d0d59-f33e-41d7-a5c9-4d8c7e74b976 ]" 
> [5-195]
> at org.h2.message.DbException.get(DbException.java:168)
> at org.h2.message.DbException.convert(DbException.java:295)
> at 
> org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex.putx(H2TreeIndex.java:251)
> at 
> org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.addToIndex(GridH2Table.java:548)
> at 
> org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.update(GridH2Table.java:480)
> at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.store(IgniteH2Indexing.java:709)
> at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.store(GridQueryProcessor.java:1863)
> at 
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.store(GridCacheQueryManager.java:403)
> at 
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.finishUpdate(IgniteCacheOffheapManagerImpl.java:1402)
> at 
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1263)
> at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.invoke(GridCacheOffheapManager.java:1625)
> at 
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:358)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.storeValue(GridCacheMapEntry.java:3629)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.initialValue(GridCacheMapEntry.java:2793)
> at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemander.preloadEntry(GridDhtPartitionDemander.java:902)
> at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemander.handleSupplyMessage(GridDhtPartitionDemander.java:772)
> at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPreloader.handleSupplyMessage(GridDhtPreloader.java:344)
> at 
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$5.apply(GridCachePartitionExchangeManager.java:418)
> at 
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$5.apply(GridCachePartitionExchangeManager.java:408)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1061)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:586)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$700(GridCacheIoManager.java:101)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager$OrderedMessageListener.onMessage(GridCacheIoManager.java:1624)
> at 
> org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1556)
> at 
> org.apache.ignite.internal.managers.communication.GridIoManager.access$4100(GridIoManager.java:125)
> at 
> org.apache.ignite.internal.managers.communication.GridIoManager$GridCommunicationMessageSet.unwind(GridIoManager.ja

[jira] [Updated] (IGNITE-12087) Transactional putAll - significant performance drop on big batches of entries.

2019-09-04 Thread Alexey Goncharuk (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Goncharuk updated IGNITE-12087:
--
Description: 
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer:
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}


  was:
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}



> Transactional putAll - significant performance drop on big batches of entries.
> --
>
> Key: IGNITE-12087
> URL: https://issues.apache.org/jira/browse/IGNITE-12087
> Project: Ignite
>  Issue Type: Bug
>  Components: cache
>Reporter: Pavel Pereslegin
>Assignee: Eduard Shangareev
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> After IGNITE-5227 have been fixed I found significant performance drop in 
> putAll operation.
> Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
> After IGNITE-5227 - 130 seconds (~100x slower).
> I checked a different batch size:
> 10_000 - 10 seconds
> 20_000 - 48 seconds
> 30_000 - 130 seconds
> and I was not able to wait for the result of 100_000 entries.
> Reproducer:
> {code:java}
> public class CheckPutAll extends GridCommonAbstractTest {
> @Override protected IgniteConfiguration getConfiguration(String 
> igniteInstanceName) throws Exception {
> IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
> CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
> ccfg.setAtomicityMode(TRANSACTIONAL);
> cfg.setCacheConfiguration(ccfg);
> return cfg;
> }
> @Test
> public void check() throws Exception {
> int cnt = 30_000;
> Map data = new HashMap<>(U.capacity(cnt));
> for (int i = 0; i < cnt; i++)
> data.put(i, i);
> Ignite node0 = startGrid(0);
> IgniteCache cache0 = 
> node0.cache(DEFAULT_CACHE_NAME);
> cache0.putAll(data);
> }
> }{code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12087) Transactional putAll - significant performance drop on big batches of entries.

2019-09-04 Thread Alexey Goncharuk (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Goncharuk updated IGNITE-12087:
--
Description: 
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}


  was:
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer:
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}



> Transactional putAll - significant performance drop on big batches of entries.
> --
>
> Key: IGNITE-12087
> URL: https://issues.apache.org/jira/browse/IGNITE-12087
> Project: Ignite
>  Issue Type: Bug
>  Components: cache
>Reporter: Pavel Pereslegin
>Assignee: Eduard Shangareev
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> After IGNITE-5227 have been fixed I found significant performance drop in 
> putAll operation.
> Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
> After IGNITE-5227 - 130 seconds (~100x slower).
> I checked a different batch size:
> 10_000 - 10 seconds
> 20_000 - 48 seconds
> 30_000 - 130 seconds
> and I was not able to wait for the result of 100_000 entries.
> Reproducer
> {code:java}
> public class CheckPutAll extends GridCommonAbstractTest {
> @Override protected IgniteConfiguration getConfiguration(String 
> igniteInstanceName) throws Exception {
> IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
> CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
> ccfg.setAtomicityMode(TRANSACTIONAL);
> cfg.setCacheConfiguration(ccfg);
> return cfg;
> }
> @Test
> public void check() throws Exception {
> int cnt = 30_000;
> Map data = new HashMap<>(U.capacity(cnt));
> for (int i = 0; i < cnt; i++)
> data.put(i, i);
> Ignite node0 = startGrid(0);
> IgniteCache cache0 = 
> node0.cache(DEFAULT_CACHE_NAME);
> cache0.putAll(data);
> }
> }{code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Commented] (IGNITE-12133) O(log n) partition exchange

2019-09-04 Thread Pavel Kovalenko (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-12133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922393#comment-16922393
 ] 

Pavel Kovalenko commented on IGNITE-12133:
--

[~ivan.glukos] I guess the general solution of such problem will be in 
introducing Gossip protocol like in Cassandra. In this case, we shouldn't have 
a pre-determined skip-list topology for the nodes. The probabilistic nature of 
Gossip also gives us ~ log(N) rounds for the dissemination of such messages.

> O(log n) partition exchange
> ---
>
> Key: IGNITE-12133
> URL: https://issues.apache.org/jira/browse/IGNITE-12133
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Moti Nisenson-Ken
>Priority: Major
>
> Currently, partition exchange leverages a ring. This means that 
> communications is O\(n) in number of nodes. It also means that if 
> non-coordinator nodes hang it can take much longer to successfully resolve 
> the topology.
> Instead, why not use something like a skip-list where the coordinator is 
> first. The coordinator can notify the first node at each level of the 
> skip-list. Each node then notifies all of its "near-neighbours" in the 
> skip-list, where node B is a near-neighbour of node-A, if max-level(nodeB) <= 
> max-level(nodeA), and nodeB is the first node at its level when traversing 
> from nodeA in the direction of nodeB, skipping over nodes C which have 
> max-level(C) > max-level(A). 
> 1
> 1 .  .  .3
> 1        3 . .  . 5
> 1 . 2 . 3 . 4 . 5 . 6
> In the above 1 would notify 2 and 3, 3 would notify 4 and 5, 2 -> 4, and 4 -> 
> 6, and 5 -> 6.
> One can achieve better redundancy by having each node traverse in both 
> directions, and having the coordinator also notify the last node in the list 
> at each level. This way in the above example if 2 and 3 were both down, 4 
> would still get notified from 5 and 6 (in the backwards direction).
>  
> The idea is that each individual node has O(log n) nodes to notify - so the 
> overall time is reduced. Additionally, we can deal well with at least 1 node 
> failure - if one includes the option of processing backwards, 2 consecutive 
> node failures can be handled as well. By taking this kind of an approach, 
> then the coordinator can basically treat any nodes it didn't receive a 
> message from as not-connected, and update the topology as well (disconnecting 
> any nodes that it didn't get a notification from). While there are some edge 
> cases here (e.g. 2 disconnected nodes, then 1 connected node, then 2 
> disconnected nodes - the connected node would be wrongly ejected from the 
> topology), these would generally be too rare to need explicit handling for.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12087) Transactional putAll - significant performance drop on big batches of entries.

2019-09-04 Thread Alexey Goncharuk (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Goncharuk updated IGNITE-12087:
--
Description: 
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer:
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}


  was:
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}



> Transactional putAll - significant performance drop on big batches of entries.
> --
>
> Key: IGNITE-12087
> URL: https://issues.apache.org/jira/browse/IGNITE-12087
> Project: Ignite
>  Issue Type: Bug
>  Components: cache
>Reporter: Pavel Pereslegin
>Assignee: Eduard Shangareev
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> After IGNITE-5227 have been fixed I found significant performance drop in 
> putAll operation.
> Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
> After IGNITE-5227 - 130 seconds (~100x slower).
> I checked a different batch size:
> 10_000 - 10 seconds
> 20_000 - 48 seconds
> 30_000 - 130 seconds
> and I was not able to wait for the result of 100_000 entries.
> Reproducer:
> {code:java}
> public class CheckPutAll extends GridCommonAbstractTest {
> @Override protected IgniteConfiguration getConfiguration(String 
> igniteInstanceName) throws Exception {
> IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
> CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
> ccfg.setAtomicityMode(TRANSACTIONAL);
> cfg.setCacheConfiguration(ccfg);
> return cfg;
> }
> @Test
> public void check() throws Exception {
> int cnt = 30_000;
> Map data = new HashMap<>(U.capacity(cnt));
> for (int i = 0; i < cnt; i++)
> data.put(i, i);
> Ignite node0 = startGrid(0);
> IgniteCache cache0 = 
> node0.cache(DEFAULT_CACHE_NAME);
> cache0.putAll(data);
> }
> }{code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12087) Transactional putAll - significant performance drop on big batches of entries.

2019-09-04 Thread Alexey Goncharuk (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Goncharuk updated IGNITE-12087:
--
Description: 
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}


  was:
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer:
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}



> Transactional putAll - significant performance drop on big batches of entries.
> --
>
> Key: IGNITE-12087
> URL: https://issues.apache.org/jira/browse/IGNITE-12087
> Project: Ignite
>  Issue Type: Bug
>  Components: cache
>Reporter: Pavel Pereslegin
>Assignee: Eduard Shangareev
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> After IGNITE-5227 have been fixed I found significant performance drop in 
> putAll operation.
> Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
> After IGNITE-5227 - 130 seconds (~100x slower).
> I checked a different batch size:
> 10_000 - 10 seconds
> 20_000 - 48 seconds
> 30_000 - 130 seconds
> and I was not able to wait for the result of 100_000 entries.
> Reproducer
> {code:java}
> public class CheckPutAll extends GridCommonAbstractTest {
> @Override protected IgniteConfiguration getConfiguration(String 
> igniteInstanceName) throws Exception {
> IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
> CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
> ccfg.setAtomicityMode(TRANSACTIONAL);
> cfg.setCacheConfiguration(ccfg);
> return cfg;
> }
> @Test
> public void check() throws Exception {
> int cnt = 30_000;
> Map data = new HashMap<>(U.capacity(cnt));
> for (int i = 0; i < cnt; i++)
> data.put(i, i);
> Ignite node0 = startGrid(0);
> IgniteCache cache0 = 
> node0.cache(DEFAULT_CACHE_NAME);
> cache0.putAll(data);
> }
> }{code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Commented] (IGNITE-12112) H2TreeIndex should throw CorruptTreeException with cacheId, cacheName and indexName

2019-09-04 Thread Denis Chudov (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-12112?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922354#comment-16922354
 ] 

Denis Chudov commented on IGNITE-12112:
---

[~amashenkov] fixed.

Also I added restoring of BPlusTree,pageHndWrapper in test.

> H2TreeIndex should throw CorruptTreeException with cacheId, cacheName and 
> indexName
> ---
>
> Key: IGNITE-12112
> URL: https://issues.apache.org/jira/browse/IGNITE-12112
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Denis Chudov
>Assignee: Denis Chudov
>Priority: Major
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> At the moment we can't define problem cache, If we have many caches in one 
> cache group and CorruptTreeException was thrown CorruptTreeException. 
> For example:
> {code:java}
> org.h2.message.DbException: General error: "class 
> org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
>  Runtime failure on row: Row@346ba4aa[ key: 29003, val: 
> com.sbt.acquiring.processing.entities.dictionaries.TurnoverRange_DPL_PROXY 
> [idHash=492721050, hash=-616731792, valueStart=2001, isImmutable=false, 
> lastChangeDate=1560917668719, name=Ñâûøå 20, valueEnd=null, 
> changeState=null, id=29003, pkey=7c0d0d59-f33e-41d7-a5c9-4d8c7e74b976, 
> ownerId=acquiring-processing-replication, base=true], ver: GridCacheVersion 
> [topVer=172396060, order=1560917613306, nodeOrder=2] ][ Ñâûøå 20, null, 
> 2001, TRUE, null, 29003, 7c0d0d59-f33e-41d7-a5c9-4d8c7e74b976 ]" 
> [5-195]
> at org.h2.message.DbException.get(DbException.java:168)
> at org.h2.message.DbException.convert(DbException.java:295)
> at 
> org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex.putx(H2TreeIndex.java:251)
> at 
> org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.addToIndex(GridH2Table.java:548)
> at 
> org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.update(GridH2Table.java:480)
> at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.store(IgniteH2Indexing.java:709)
> at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.store(GridQueryProcessor.java:1863)
> at 
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.store(GridCacheQueryManager.java:403)
> at 
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.finishUpdate(IgniteCacheOffheapManagerImpl.java:1402)
> at 
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1263)
> at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.invoke(GridCacheOffheapManager.java:1625)
> at 
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:358)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.storeValue(GridCacheMapEntry.java:3629)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.initialValue(GridCacheMapEntry.java:2793)
> at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemander.preloadEntry(GridDhtPartitionDemander.java:902)
> at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemander.handleSupplyMessage(GridDhtPartitionDemander.java:772)
> at 
> org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPreloader.handleSupplyMessage(GridDhtPreloader.java:344)
> at 
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$5.apply(GridCachePartitionExchangeManager.java:418)
> at 
> org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$5.apply(GridCachePartitionExchangeManager.java:408)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1061)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:586)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$700(GridCacheIoManager.java:101)
> at 
> org.apache.ignite.internal.processors.cache.GridCacheIoManager$OrderedMessageListener.onMessage(GridCacheIoManager.java:1624)
> at 
> org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1556)
> at 
> org.apache.ignite.internal.managers.communication.GridIoManager.access$4100(GridIoManager.java:125)
> at 
> org.apache.ignite.internal.mana

[jira] [Commented] (IGNITE-12133) O(log n) partition exchange

2019-09-04 Thread Andrew Mashenkov (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-12133?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922349#comment-16922349
 ] 

Andrew Mashenkov commented on IGNITE-12133:
---

[~avinogradov], message ordering is important.
What if some nodes will got "create cache" and "drop cache" events in different 
order? 

> O(log n) partition exchange
> ---
>
> Key: IGNITE-12133
> URL: https://issues.apache.org/jira/browse/IGNITE-12133
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Moti Nisenson-Ken
>Priority: Major
>
> Currently, partition exchange leverages a ring. This means that 
> communications is O\(n) in number of nodes. It also means that if 
> non-coordinator nodes hang it can take much longer to successfully resolve 
> the topology.
> Instead, why not use something like a skip-list where the coordinator is 
> first. The coordinator can notify the first node at each level of the 
> skip-list. Each node then notifies all of its "near-neighbours" in the 
> skip-list, where node B is a near-neighbour of node-A, if max-level(nodeB) <= 
> max-level(nodeA), and nodeB is the first node at its level when traversing 
> from nodeA in the direction of nodeB, skipping over nodes C which have 
> max-level(C) > max-level(A). 
> 1
> 1 .  .  .3
> 1        3 . .  . 5
> 1 . 2 . 3 . 4 . 5 . 6
> In the above 1 would notify 2 and 3, 3 would notify 4 and 5, 2 -> 4, and 4 -> 
> 6, and 5 -> 6.
> One can achieve better redundancy by having each node traverse in both 
> directions, and having the coordinator also notify the last node in the list 
> at each level. This way in the above example if 2 and 3 were both down, 4 
> would still get notified from 5 and 6 (in the backwards direction).
>  
> The idea is that each individual node has O(log n) nodes to notify - so the 
> overall time is reduced. Additionally, we can deal well with at least 1 node 
> failure - if one includes the option of processing backwards, 2 consecutive 
> node failures can be handled as well. By taking this kind of an approach, 
> then the coordinator can basically treat any nodes it didn't receive a 
> message from as not-connected, and update the topology as well (disconnecting 
> any nodes that it didn't get a notification from). While there are some edge 
> cases here (e.g. 2 disconnected nodes, then 1 connected node, then 2 
> disconnected nodes - the connected node would be wrongly ejected from the 
> topology), these would generally be too rare to need explicit handling for.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Assigned] (IGNITE-11829) Distribute joins fail if number of tables > 7

2019-09-04 Thread Diana Iakovleva (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-11829?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Diana Iakovleva reassigned IGNITE-11829:


Assignee: Diana Iakovleva

> Distribute joins fail if number of tables > 7
> -
>
> Key: IGNITE-11829
> URL: https://issues.apache.org/jira/browse/IGNITE-11829
> Project: Ignite
>  Issue Type: Improvement
>  Components: sql
>Affects Versions: 2.7
>Reporter: Stanislav Lukyanov
>Assignee: Diana Iakovleva
>Priority: Major
>  Labels: newbie
>
> Distributed joins fail with ArrayIndexOutOfBounds when the total number of 
> tables is > 7.
> Example:
> {code}
> try (Ignite ignite = 
> Ignition.start("examples/config/example-ignite.xml");) {
> IgniteCache cache = ignite.createCache("foo");
> cache.query(new SqlFieldsQuery("CREATE TABLE Person(ID INTEGER 
> PRIMARY KEY, NAME VARCHAR(100));"));
> cache.query(new SqlFieldsQuery("INSERT INTO Person(ID, NAME) 
> VALUES (1, 'Ed'), (2, 'Ann'), (3, 'Emma');"));
> cache.query(new SqlFieldsQuery("SELECT *\n" +
> "FROM PERSON P1\n" +
> "JOIN PERSON P2 ON P1.ID = P2.ID\n" +
> "JOIN PERSON P3 ON P1.ID = P3.ID\n" +
> "JOIN PERSON P4 ON P1.ID = P4.ID\n" +
> "JOIN PERSON P5 ON P1.ID = P5.ID\n" +
> "JOIN PERSON P6 ON P1.ID = P6.ID\n" +
> "JOIN PERSON P7 ON P1.ID = P7.ID\n" +
> "JOIN PERSON P8 ON P1.ID = 
> P8.ID").setDistributedJoins(true).setEnforceJoinOrder(false));
> }
> {code}
> throws
> {code}
> Exception in thread "main" javax.cache.CacheException: General error: 
> "java.lang.ArrayIndexOutOfBoundsException" [5-197]
>   at 
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:832)
>   at 
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:765)
>   at 
> org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.query(GatewayProtectedCacheProxy.java:403)
>   at 
> org.apache.ignite.examples.ExampleNodeStartup.main(ExampleNodeStartup.java:60)
> Caused by: class 
> org.apache.ignite.internal.processors.query.IgniteSQLException: General 
> error: "java.lang.ArrayIndexOutOfBoundsException" [5-197]
>   at 
> org.apache.ignite.internal.processors.query.h2.QueryParser.parseH2(QueryParser.java:454)
>   at 
> org.apache.ignite.internal.processors.query.h2.QueryParser.parse0(QueryParser.java:156)
>   at 
> org.apache.ignite.internal.processors.query.h2.QueryParser.parse(QueryParser.java:121)
>   at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1191)
>   at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2261)
>   at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2257)
>   at 
> org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:53)
>   at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2767)
>   at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$1(GridQueryProcessor.java:2277)
>   at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:2297)
>   at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2250)
>   at 
> org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2177)
>   at 
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:817)
>   ... 3 more
> Caused by: org.h2.jdbc.JdbcSQLException: General error: 
> "java.lang.ArrayIndexOutOfBoundsException" [5-197]
>   at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
>   at org.h2.message.DbException.get(DbException.java:168)
>   at org.h2.message.DbException.convert(DbException.java:307)
>   at org.h2.message.DbException.toSQLException(DbException.java:280)
>   at org.h2.message.TraceObject.logAndConvert(TraceObject.java:357)
>   at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:308)
>   at 
> org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter.prepare(GridSqlQuerySplitter.java:1770)
>   at 
> org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter.split0(GridSqlQuerySplitter.java:299)
>   at 
> org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter.split(Gri

[jira] [Updated] (IGNITE-12141) Ignite Spark Integration not working with Schema Name

2019-09-04 Thread Manoj G T (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12141?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Manoj G T updated IGNITE-12141:
---
Ignite Flags: Docs Required  (was: Docs Required,Release Notes Required)

> Ignite Spark Integration not working with Schema Name
> -
>
> Key: IGNITE-12141
> URL: https://issues.apache.org/jira/browse/IGNITE-12141
> Project: Ignite
>  Issue Type: Bug
>  Components: spark
>Affects Versions: 2.7.5
>Reporter: Manoj G T
>Priority: Critical
>
> Users can't able to specify schema when trying to persist Spark DF to Ignite.
>  
> [https://stackoverflow.com/questions/57782033/apache-ignite-spark-integration-not-working-with-schema-name]



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12141) Ignite Spark Integration not working with Schema Name

2019-09-04 Thread Manoj G T (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12141?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Manoj G T updated IGNITE-12141:
---
Fix Version/s: 2.7.6

> Ignite Spark Integration not working with Schema Name
> -
>
> Key: IGNITE-12141
> URL: https://issues.apache.org/jira/browse/IGNITE-12141
> Project: Ignite
>  Issue Type: Bug
>  Components: spark
>Affects Versions: 2.7.5
>Reporter: Manoj G T
>Priority: Critical
> Fix For: 2.7.6
>
>
> Users can't able to specify schema when trying to persist Spark DF to Ignite.
>  
> [https://stackoverflow.com/questions/57782033/apache-ignite-spark-integration-not-working-with-schema-name]



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Created] (IGNITE-12141) Ignite Spark Integration not working with Schema Name

2019-09-04 Thread Manoj G T (Jira)
Manoj G T created IGNITE-12141:
--

 Summary: Ignite Spark Integration not working with Schema Name
 Key: IGNITE-12141
 URL: https://issues.apache.org/jira/browse/IGNITE-12141
 Project: Ignite
  Issue Type: Bug
  Components: spark
Affects Versions: 2.7.5
Reporter: Manoj G T


Users can't able to specify schema when trying to persist Spark DF to Ignite.

 

[https://stackoverflow.com/questions/57782033/apache-ignite-spark-integration-not-working-with-schema-name]



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12087) Transactional putAll - significant performance drop on big batches of entries.

2019-09-04 Thread Alexey Goncharuk (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Goncharuk updated IGNITE-12087:
--
Description: 
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer:
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}


  was:
After IGNITE-5227 have been fixed I found significant performance drop in 
putAll operation.

Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
After IGNITE-5227 - 130 seconds (~100x slower).

I checked a different batch size:
10_000 - 10 seconds
20_000 - 48 seconds
30_000 - 130 seconds

and I was not able to wait for the result of 100_000 entries.

Reproducer
{code:java}
public class CheckPutAll extends GridCommonAbstractTest {
@Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);

CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);

ccfg.setAtomicityMode(TRANSACTIONAL);

cfg.setCacheConfiguration(ccfg);

return cfg;
}

@Test
public void check() throws Exception {
int cnt = 30_000;

Map data = new HashMap<>(U.capacity(cnt));

for (int i = 0; i < cnt; i++)
data.put(i, i);

Ignite node0 = startGrid(0);

IgniteCache cache0 = node0.cache(DEFAULT_CACHE_NAME);

cache0.putAll(data);
}
}{code}



> Transactional putAll - significant performance drop on big batches of entries.
> --
>
> Key: IGNITE-12087
> URL: https://issues.apache.org/jira/browse/IGNITE-12087
> Project: Ignite
>  Issue Type: Bug
>  Components: cache
>Reporter: Pavel Pereslegin
>Assignee: Eduard Shangareev
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> After IGNITE-5227 have been fixed I found significant performance drop in 
> putAll operation.
> Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
> After IGNITE-5227 - 130 seconds (~100x slower).
> I checked a different batch size:
> 10_000 - 10 seconds
> 20_000 - 48 seconds
> 30_000 - 130 seconds
> and I was not able to wait for the result of 100_000 entries.
> Reproducer:
> {code:java}
> public class CheckPutAll extends GridCommonAbstractTest {
> @Override protected IgniteConfiguration getConfiguration(String 
> igniteInstanceName) throws Exception {
> IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
> CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
> ccfg.setAtomicityMode(TRANSACTIONAL);
> cfg.setCacheConfiguration(ccfg);
> return cfg;
> }
> @Test
> public void check() throws Exception {
> int cnt = 30_000;
> Map data = new HashMap<>(U.capacity(cnt));
> for (int i = 0; i < cnt; i++)
> data.put(i, i);
> Ignite node0 = startGrid(0);
> IgniteCache cache0 = 
> node0.cache(DEFAULT_CACHE_NAME);
> cache0.putAll(data);
> }
> }{code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12087) Transactional putAll - significant performance drop on big batches of entries.

2019-09-04 Thread Alexey Goncharuk (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Goncharuk updated IGNITE-12087:
--
Fix Version/s: 2.8

> Transactional putAll - significant performance drop on big batches of entries.
> --
>
> Key: IGNITE-12087
> URL: https://issues.apache.org/jira/browse/IGNITE-12087
> Project: Ignite
>  Issue Type: Bug
>  Components: cache
>Reporter: Pavel Pereslegin
>Assignee: Eduard Shangareev
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> After IGNITE-5227 have been fixed I found significant performance drop in 
> putAll operation.
> Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
> After IGNITE-5227 - 130 seconds (~100x slower).
> I checked a different batch size:
> 10_000 - 10 seconds
> 20_000 - 48 seconds
> 30_000 - 130 seconds
> and I was not able to wait for the result of 100_000 entries.
> Reproducer
> {code:java}
> public class CheckPutAll extends GridCommonAbstractTest {
> @Override protected IgniteConfiguration getConfiguration(String 
> igniteInstanceName) throws Exception {
> IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
> CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
> ccfg.setAtomicityMode(TRANSACTIONAL);
> cfg.setCacheConfiguration(ccfg);
> return cfg;
> }
> @Test
> public void check() throws Exception {
> int cnt = 30_000;
> Map data = new HashMap<>(U.capacity(cnt));
> for (int i = 0; i < cnt; i++)
> data.put(i, i);
> Ignite node0 = startGrid(0);
> IgniteCache cache0 = 
> node0.cache(DEFAULT_CACHE_NAME);
> cache0.putAll(data);
> }
> }{code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12087) Transactional putAll - significant performance drop on big batches of entries.

2019-09-04 Thread Alexey Goncharuk (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Goncharuk updated IGNITE-12087:
--
Fix Version/s: (was: 2.8)

> Transactional putAll - significant performance drop on big batches of entries.
> --
>
> Key: IGNITE-12087
> URL: https://issues.apache.org/jira/browse/IGNITE-12087
> Project: Ignite
>  Issue Type: Bug
>  Components: cache
>Reporter: Pavel Pereslegin
>Assignee: Eduard Shangareev
>Priority: Major
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> After IGNITE-5227 have been fixed I found significant performance drop in 
> putAll operation.
> Insertion of 30_000 entries before IGNITE-5227 took ~1 second.
> After IGNITE-5227 - 130 seconds (~100x slower).
> I checked a different batch size:
> 10_000 - 10 seconds
> 20_000 - 48 seconds
> 30_000 - 130 seconds
> and I was not able to wait for the result of 100_000 entries.
> Reproducer
> {code:java}
> public class CheckPutAll extends GridCommonAbstractTest {
> @Override protected IgniteConfiguration getConfiguration(String 
> igniteInstanceName) throws Exception {
> IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
> CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
> ccfg.setAtomicityMode(TRANSACTIONAL);
> cfg.setCacheConfiguration(ccfg);
> return cfg;
> }
> @Test
> public void check() throws Exception {
> int cnt = 30_000;
> Map data = new HashMap<>(U.capacity(cnt));
> for (int i = 0; i < cnt; i++)
> data.put(i, i);
> Ignite node0 = startGrid(0);
> IgniteCache cache0 = 
> node0.cache(DEFAULT_CACHE_NAME);
> cache0.putAll(data);
> }
> }{code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Updated] (IGNITE-12124) Stopping the cache does not wait for expiration process, which may be started and may lead to errors

2019-09-04 Thread Vyacheslav Koptilin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-12124:
-
Description: 
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 

So, unregistering of {{GridCacheTtlManager}}, caused by cache stopping, must 
wait for expiration if it is running for the cache that stops. On the other 
hand, it does not seem correct to wait for expiration under the 
{{checkpointReadLock}} see 
{{GridCacheProcessor#processCacheStopRequestOnExchangeDone}}:

{code:java}
private void processCacheStopRequestOnExchangeDone(ExchangeActions exchActions) 
{
...
doInParallel(
parallelismLvl,
sharedCtx.kernalContext().getSystemExecutorService(),
cachesToStop.entrySet(),
cachesToStopByGrp -> {
...
for (ExchangeActions.CacheActionData action : 
cachesToStopByGrp.getValue()) {
...
sharedCtx.database().checkpointReadLock();

try {
prepareCacheStop(...); <---unregistering of 
GridCacheTtlManager is performed here
}
finally {
sharedCtx.database().checkpointReadUnlock();
}
}
...
}
}
{code}


  was:
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 

So, unregistering of {{GridCacheTtlManager}}, cause

[jira] [Updated] (IGNITE-12124) Stopping the cache does not wait for expiration process, which may be started and may lead to errors

2019-09-04 Thread Vyacheslav Koptilin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-12124:
-
Description: 
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 

So, unregistering of {{GridCacheTtlManager}}, caused by cache stopping, must 
wait for expiration if it is running for the cache that stops. On the other 
hand, it does not seem correct to wait for expiration under the 
{{checkpointReadLock}} see 
{{GridCacheProcessor#processCacheStopRequestOnExchangeDone}}:

{code:java}
private void processCacheStopRequestOnExchangeDone(ExchangeActions exchActions) 
{
...
doInParallel(
parallelismLvl,
sharedCtx.kernalContext().getSystemExecutorService(),
cachesToStop.entrySet(),
cachesToStopByGrp -> {
...
for (ExchangeActions.CacheActionData action : 
cachesToStopByGrp.getValue()) {
...
sharedCtx.database().checkpointReadLock();

try {
prepareCacheStop(action.request().cacheName(), 
action.request().destroy()); <---unregistering of GridCacheTtlManager is 
performed here
}
finally {
sharedCtx.database().checkpointReadUnlock();
}
}
...
}
}
{code}


  was:
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).


[jira] [Updated] (IGNITE-12124) Stopping the cache does not wait for expiration process, which may be started and may lead to errors

2019-09-04 Thread Vyacheslav Koptilin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-12124:
-
Description: 
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 

So, unregistering of {{GridCacheTtlManager}}, caused by cache stopping, must 
wait for expiration if it is running for the cache that stops. On the other 
hand, it does not seem correct to wait for expiration under the 
{{checkpointReadLock}} see 
{{GridCacheProcessor#processCacheStopRequestOnExchangeDone}}:

{code:java}
private void processCacheStopRequestOnExchangeDone(ExchangeActions 
exchActions) {
...
try {
doInParallel(
parallelismLvl,
sharedCtx.kernalContext().getSystemExecutorService(),
cachesToStop.entrySet(),
cachesToStopByGrp -> {
...
for (ExchangeActions.CacheActionData action: 
cachesToStopByGrp.getValue()) {
...
sharedCtx.database().checkpointReadLock();

try {

prepareCacheStop(action.request().cacheName(), action.request().destroy()); 
<--- unregistering of GridCacheTtlManager is performed here
}
finally {
sharedCtx.database().checkpointReadUnlock();
}
}
...
}
{code}


  was:
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for th

[jira] [Updated] (IGNITE-12124) Stopping the cache does not wait for expiration process, which may be started and may lead to errors

2019-09-04 Thread Vyacheslav Koptilin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-12124:
-
Description: 
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 

So, it seems to me, unregistering of {{GridCacheTtlManager, caused by cache 
stopping, must wait for expiration if it is running for the cache to be 
stopped.}}

  was:
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 

So, it seems to me, unregistering of {{GridCacheTtlManager, caused by cache 
stopping, must wait for expiration }}


> Stopping the cache does not wait for expiration process, which may be started 
> and may lead to errors
> 
>
> Key: IGNITE-12124
> URL: https://issues.apache.org/jira/browse/IGNITE-12124
> Project: Ignite
>  Issue Type: Bug
>Affects Versions: 2.7
>Reporter: Vyacheslav Koptilin
>Assignee: Vyacheslav Koptilin
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Stopping a cache with configured TTL may lead to errors. For instance,
> {noformat}
> java.lang.NullPointerException
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:170

[jira] [Updated] (IGNITE-12124) Stopping the cache does not wait for expiration process, which may be started and may lead to errors

2019-09-04 Thread Vyacheslav Koptilin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-12124:
-
Description: 
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 

So, it seems to me, unregistering of {{GridCacheTtlManager, caused by cache 
stopping, must wait for expiration }}

  was:
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 


> Stopping the cache does not wait for expiration process, which may be started 
> and may lead to errors
> 
>
> Key: IGNITE-12124
> URL: https://issues.apache.org/jira/browse/IGNITE-12124
> Project: Ignite
>  Issue Type: Bug
>Affects Versions: 2.7
>Reporter: Vyacheslav Koptilin
>Assignee: Vyacheslav Koptilin
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Stopping a cache with configured TTL may lead to errors. For instance,
> {noformat}
> java.lang.NullPointerException
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
>   at 
> org.apache.ignite.internal.

[jira] [Updated] (IGNITE-12124) Stopping the cache does not wait for expiration process, which may be started and may lead to errors

2019-09-04 Thread Vyacheslav Koptilin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-12124:
-
Description: 
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that unregistering of 
{{GridCacheTtlManager}} (see {{GridCacheSharedTtlCleanupManager#unregister}} 
does not wait for the finish of expiration (in that particular case, 
{{GridCacheContext}} is already cleaned up).

 

  was:
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that {{


> Stopping the cache does not wait for expiration process, which may be started 
> and may lead to errors
> 
>
> Key: IGNITE-12124
> URL: https://issues.apache.org/jira/browse/IGNITE-12124
> Project: Ignite
>  Issue Type: Bug
>Affects Versions: 2.7
>Reporter: Vyacheslav Koptilin
>Assignee: Vyacheslav Koptilin
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Stopping a cache with configured TTL may lead to errors. For instance,
> {noformat}
> java.lang.NullPointerException
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
>   at 
> org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
>   at 
> org.apache.ignite.in

[jira] [Updated] (IGNITE-12124) Stopping the cache does not wait for expiration process, which may be started and may lead to errors

2019-09-04 Thread Vyacheslav Koptilin (Jira)


 [ 
https://issues.apache.org/jira/browse/IGNITE-12124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-12124:
-
Description: 
Stopping a cache with configured TTL may lead to errors. For instance,
{noformat}
java.lang.NullPointerException
at 
org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
at 
org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
at 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
at 
org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.lang.Thread.run(Thread.java:748){noformat}
The obvious reason for this {{NullPointerException}} is that {{

> Stopping the cache does not wait for expiration process, which may be started 
> and may lead to errors
> 
>
> Key: IGNITE-12124
> URL: https://issues.apache.org/jira/browse/IGNITE-12124
> Project: Ignite
>  Issue Type: Bug
>Affects Versions: 2.7
>Reporter: Vyacheslav Koptilin
>Assignee: Vyacheslav Koptilin
>Priority: Major
> Fix For: 2.8
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Stopping a cache with configured TTL may lead to errors. For instance,
> {noformat}
> java.lang.NullPointerException
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheContext.onDeferredDelete(GridCacheContext.java:1702)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:4040)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:75)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:66)
>   at 
> org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:37)
>   at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpiredInternal(GridCacheOffheapManager.java:2501)
>   at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.purgeExpired(GridCacheOffheapManager.java:2427)
>   at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.expire(GridCacheOffheapManager.java:989)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:233)
>   at 
> org.apache.ignite.internal.processors.cache.GridCacheSharedTtlCleanupManager$CleanupWorker.body(GridCacheSharedTtlCleanupManager.java:150)
>   at 
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
>   at java.lang.Thread.run(Thread.java:748){noformat}
> The obvious reason for this {{NullPointerException}} is that {{



--
This message was sent by Atlassian Jira
(v8.3.2#803003)


[jira] [Commented] (IGNITE-10223) Affinity methods should return List instead of Collection

2019-09-04 Thread Ignite TC Bot (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-10223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16922270#comment-16922270
 ] 

Ignite TC Bot commented on IGNITE-10223:


{panel:title=Branch: [pull/6837/head] Base: [master] : No blockers 
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}
[TeamCity *--> Run :: All* 
Results|https://ci.ignite.apache.org/viewLog.html?buildId=4564401&buildTypeId=IgniteTests24Java8_RunAll]

> Affinity methods should return List instead of Collection
> -
>
> Key: IGNITE-10223
> URL: https://issues.apache.org/jira/browse/IGNITE-10223
> Project: Ignite
>  Issue Type: Bug
>Reporter: Stanislav Lukyanov
>Assignee: Diana Iakovleva
>Priority: Minor
>  Labels: newbie
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Methods of class Affinity should return List instead of Collection when order 
> of nodes matters.
> The following methods are supposed to always return a collection with primary 
> node preceding backups:
> Affinity::mapPartitionToPrimaryAndBackups
> Affinity::mapKeyToPrimaryAndBackups
> The return type for both methods is Collection. The Javadocs 
> say: "Note that primary node is always first in the returned collection".
> In general, the notion of "order" and "first element" is not defined for a 
> Collection (we could play with iterators, but its awkward from both code and 
> logic perspective). It makes more sense for this methods to return List 
> instead.
> The task is to introduce List equivalents of these methods. It would also be 
> nice to check if other APIs have similar issues.
> The tricky part is compatibility.
> Changing return type from Collection to List is source compatible (meaning 
> the old client code will compile with the new method), but not binary 
> compatible (meaning the already compiled client code will break because the 
> signature has changed).
> A compatible solution would be to
> - deprecate the existing methods
> - add methods with different names, like mapPartitionToPrimaryAndBackups*List*



--
This message was sent by Atlassian Jira
(v8.3.2#803003)