[jira] [Commented] (IGNITE-19222) .NET: Add IgniteClientConfiguration.EnableClusterDiscovery

2023-04-11 Thread Pavel Tupitsyn (Jira)


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

Pavel Tupitsyn commented on IGNITE-19222:
-

Cherry-picked to ignite-2.15: eab71555b3a1eefd096b42af52618487452e85f9

> .NET: Add IgniteClientConfiguration.EnableClusterDiscovery
> --
>
> Key: IGNITE-19222
> URL: https://issues.apache.org/jira/browse/IGNITE-19222
> Project: Ignite
>  Issue Type: Improvement
>  Components: platforms, thin client
>Affects Versions: 2.14
>Reporter: Pavel Tupitsyn
>Assignee: Pavel Tupitsyn
>Priority: Major
>  Labels: .NET
> Fix For: 2.15
>
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> Cluster discovery is always enabled currently, which can be undesirable in 
> some use cases. Add a config property to disable discovery.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-19222) .NET: Add IgniteClientConfiguration.EnableClusterDiscovery

2023-04-11 Thread Pavel Tupitsyn (Jira)


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

Pavel Tupitsyn commented on IGNITE-19222:
-

Merged to master: 3ecb062d91b21fb23e14a7cbe0805468aef3c398

> .NET: Add IgniteClientConfiguration.EnableClusterDiscovery
> --
>
> Key: IGNITE-19222
> URL: https://issues.apache.org/jira/browse/IGNITE-19222
> Project: Ignite
>  Issue Type: Improvement
>  Components: platforms, thin client
>Affects Versions: 2.14
>Reporter: Pavel Tupitsyn
>Assignee: Pavel Tupitsyn
>Priority: Major
>  Labels: .NET
> Fix For: 2.15
>
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> Cluster discovery is always enabled currently, which can be undesirable in 
> some use cases. Add a config property to disable discovery.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Created] (IGNITE-19277) Add authorization of Ignite node stop/restart operations.

2023-04-11 Thread Mikhail Petrov (Jira)
Mikhail Petrov created IGNITE-19277:
---

 Summary: Add authorization of Ignite node stop/restart operations.
 Key: IGNITE-19277
 URL: https://issues.apache.org/jira/browse/IGNITE-19277
 Project: Ignite
  Issue Type: Bug
Reporter: Mikhail Petrov


Before https://issues.apache.org/jira/browse/IGNITE-15322 
IgniteCluster#restartNodes()/stopNodes() operations were authorized by the name 
of the internal tasks that is used during their execution - 
org.apache.ignite.internal.cluster.IgniteKillTask.

After https://issues.apache.org/jira/browse/IGNITE-15322 has been resolved, 
authorization of internal tasks is no longer performed. So 
IgniteCluster#restartNodes()/stopNodes()  operations are not authorized at all.

We must to fix it.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19277) Add authorization of Ignite node stop/restart operations.

2023-04-11 Thread Mikhail Petrov (Jira)


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

Mikhail Petrov updated IGNITE-19277:

Priority: Critical  (was: Major)

> Add authorization of Ignite node stop/restart operations.
> -
>
> Key: IGNITE-19277
> URL: https://issues.apache.org/jira/browse/IGNITE-19277
> Project: Ignite
>  Issue Type: Bug
>Reporter: Mikhail Petrov
>Priority: Critical
>
> Before https://issues.apache.org/jira/browse/IGNITE-15322 
> IgniteCluster#restartNodes()/stopNodes() operations were authorized by the 
> name of the internal tasks that is used during their execution - 
> org.apache.ignite.internal.cluster.IgniteKillTask.
> After https://issues.apache.org/jira/browse/IGNITE-15322 has been resolved, 
> authorization of internal tasks is no longer performed. So 
> IgniteCluster#restartNodes()/stopNodes()  operations are not authorized at 
> all.
> We must to fix it.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19277) Add authorization of Ignite Cluster Node stop/restart operations.

2023-04-11 Thread Mikhail Petrov (Jira)


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

Mikhail Petrov updated IGNITE-19277:

Summary: Add authorization of Ignite Cluster Node stop/restart operations.  
(was: Add authorization of Ignite node stop/restart operations.)

> Add authorization of Ignite Cluster Node stop/restart operations.
> -
>
> Key: IGNITE-19277
> URL: https://issues.apache.org/jira/browse/IGNITE-19277
> Project: Ignite
>  Issue Type: Bug
>Reporter: Mikhail Petrov
>Priority: Critical
>
> Before https://issues.apache.org/jira/browse/IGNITE-15322 
> IgniteCluster#restartNodes()/stopNodes() operations were authorized by the 
> name of the internal tasks that is used during their execution - 
> org.apache.ignite.internal.cluster.IgniteKillTask.
> After https://issues.apache.org/jira/browse/IGNITE-15322 has been resolved, 
> authorization of internal tasks is no longer performed. So 
> IgniteCluster#restartNodes()/stopNodes()  operations are not authorized at 
> all.
> We must to fix it.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19030) Platforms: Add authorization of DotNet Compute tasks

2023-04-11 Thread Mikhail Petrov (Jira)


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

Mikhail Petrov updated IGNITE-19030:

Priority: Major  (was: Critical)

> Platforms: Add authorization of DotNet Compute tasks
> 
>
> Key: IGNITE-19030
> URL: https://issues.apache.org/jira/browse/IGNITE-19030
> Project: Ignite
>  Issue Type: Task
>  Components: platforms
>Reporter: Mikhail Petrov
>Assignee: Mikhail Petrov
>Priority: Major
>  Labels: .NET, cpp
> Fix For: 2.15
>
>  Time Spent: 1h 50m
>  Remaining Estimate: 0h
>
> Prior to https://issues.apache.org/jira/browse/IGNITE-15322, all DotNet and 
> CPP tasks were authorized by the name of the internal Ignite system task that 
> executes them on the Java side.
> After https://issues.apache.org/jira/browse/IGNITE-15322 has been resolved, 
> authorization of internal tasks is no longer performed. As a result, we do 
> not have the ability to control the authorization of DotNet/CPP tasks. We 
> need to implement it.
> It is proposed to reuse the same approach that the Java implementation uses - 
> to authorize DotNet tasks by their FQN - to authorize CPP tasks by the name f 
> the corresponding binary type.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19030) Platforms: Add authorization of DotNet Compute tasks

2023-04-11 Thread Mikhail Petrov (Jira)


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

Mikhail Petrov updated IGNITE-19030:

Priority: Critical  (was: Major)

> Platforms: Add authorization of DotNet Compute tasks
> 
>
> Key: IGNITE-19030
> URL: https://issues.apache.org/jira/browse/IGNITE-19030
> Project: Ignite
>  Issue Type: Task
>  Components: platforms
>Reporter: Mikhail Petrov
>Assignee: Mikhail Petrov
>Priority: Critical
>  Labels: .NET, cpp
> Fix For: 2.15
>
>  Time Spent: 1h 50m
>  Remaining Estimate: 0h
>
> Prior to https://issues.apache.org/jira/browse/IGNITE-15322, all DotNet and 
> CPP tasks were authorized by the name of the internal Ignite system task that 
> executes them on the Java side.
> After https://issues.apache.org/jira/browse/IGNITE-15322 has been resolved, 
> authorization of internal tasks is no longer performed. As a result, we do 
> not have the ability to control the authorization of DotNet/CPP tasks. We 
> need to implement it.
> It is proposed to reuse the same approach that the Java implementation uses - 
> to authorize DotNet tasks by their FQN - to authorize CPP tasks by the name f 
> the corresponding binary type.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-18954) Design a language for parsing of a filter expression

2023-04-11 Thread Mirza Aliev (Jira)


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

Mirza Aliev updated IGNITE-18954:
-
Description: 
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
   "nodeAttributes":{
  "nodeAttributes":{
 "region":{
"attribute":"US"
 },
 "storage":{
"attribute":"SSD"
 }
  }
   }
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{[?(@.region == 'EU')]}} -- will give all nodes, that have region equals to 
'EU'
{{[?(@.dataRegion > 10 && @storage != 'HDD')]}} -- will give all nodes, that 
has dataRegion > 10 and storage not equal to HDD


UPD:

Validator form the definition of done was made in the separate ticket, so we 
just needed to provide the method that can say
if the provided attributes of the node are satisfy a provided filter


 

  was:
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
   "nodeAttributes":{
  "nodeAttributes":{
 "region":{
"attribute":"US"
 },
 "storage":{
"attribute":"SSD"
 }
  }
   }
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{[?(@.region == 'EU')]}} -- will give all nodes, that have region equals to 
'EU'
{{[?(@.dataRegion > 10 && @storage != 'HDD')]}} -- will give all nodes, that 
has dataRegion > 10 and storage not equal to HDD


UPD:


 


> Design a language for parsing of a filter expression
> 
>
> Key: IGNITE-18954
> URL: https://issues.apache.org/jira/browse/IGNITE-18954
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Mirza Aliev
>Assignee: Mirza Aliev
>Priority: Major
>  Labels: ignite-3
>
> {*}Motivation{*}:
> We need to parse and be able 

[jira] [Updated] (IGNITE-18954) Design a language for parsing of a filter expression

2023-04-11 Thread Mirza Aliev (Jira)


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

Mirza Aliev updated IGNITE-18954:
-
Description: 
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
   "nodeAttributes":{
  "nodeAttributes":{
 "region":{
"attribute":"US"
 },
 "storage":{
"attribute":"SSD"
 }
  }
   }
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{[?(@.region == 'EU')]}} -- will give all nodeName, that have region equals to 
'EU'
{{[?(@.dataRegion > 10 && @storage != 'HDD')]}} -- will give all nodeNames, 
that has dataRegion > 10 and storage not equal to HDD


UPD:


 

  was:
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
   "nodeAttributes":{
  "nodeAttributes":{
 "region":{
"attribute":"US"
 },
 "storage":{
"attribute":"SSD"
 }
  }
   }
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{['nodeName'][?(@.['region'] == 'EU')]}} -- will give all nodeName, that have 
region equals to 'EU'
{{['nodeName'].[?(@.['dataRegion'] > 10 && @.[storage] != 'HDD')]}} -- will 
give all nodeNames, that has dataRegion > 10 and storage not equal to HDD


UPD:


 


> Design a language for parsing of a filter expression
> 
>
> Key: IGNITE-18954
> URL: https://issues.apache.org/jira/browse/IGNITE-18954
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Mirza Aliev
>Assignee: Mirza Aliev
>Priority: Major
>  Labels: ignite-3
>
> {*}Motivation{*}:
> We need to parse and be able to use filters, that user set for the 
> distribution zone
> *Definition of done:*
>  
> * Filters are parsed and it is possible to filter 

[jira] [Updated] (IGNITE-18954) Design a language for parsing of a filter expression

2023-04-11 Thread Mirza Aliev (Jira)


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

Mirza Aliev updated IGNITE-18954:
-
Description: 
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
   "nodeAttributes":{
  "nodeAttributes":{
 "region":{
"attribute":"US"
 },
 "storage":{
"attribute":"SSD"
 }
  }
   }
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{[?(@.region == 'EU')]}} -- will give all nodes, that have region equals to 
'EU'
{{[?(@.dataRegion > 10 && @storage != 'HDD')]}} -- will give all nodes, that 
has dataRegion > 10 and storage not equal to HDD


UPD:


 

  was:
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
   "nodeAttributes":{
  "nodeAttributes":{
 "region":{
"attribute":"US"
 },
 "storage":{
"attribute":"SSD"
 }
  }
   }
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{[?(@.region == 'EU')]}} -- will give all nodeName, that have region equals to 
'EU'
{{[?(@.dataRegion > 10 && @storage != 'HDD')]}} -- will give all nodeNames, 
that has dataRegion > 10 and storage not equal to HDD


UPD:


 


> Design a language for parsing of a filter expression
> 
>
> Key: IGNITE-18954
> URL: https://issues.apache.org/jira/browse/IGNITE-18954
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Mirza Aliev
>Assignee: Mirza Aliev
>Priority: Major
>  Labels: ignite-3
>
> {*}Motivation{*}:
> We need to parse and be able to use filters, that user set for the 
> distribution zone
> *Definition of done:*
>  
> * Filters are parsed and it is possible to filter arbitrary set of attributes
> * Validator is 

[jira] [Updated] (IGNITE-18954) Design a language for parsing of a filter expression

2023-04-11 Thread Mirza Aliev (Jira)


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

Mirza Aliev updated IGNITE-18954:
-
Description: 
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
   "nodeAttributes":{
  "nodeAttributes":{
 "region":{
"attribute":"US"
 },
 "storage":{
"attribute":"SSD"
 }
  }
   }
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{['nodeName'][?(@.['region'] == 'EU')]}} -- will give all nodeName, that have 
region equals to 'EU'
{{['nodeName'].[?(@.['dataRegion'] > 10 && @.[storage] != 'HDD')]}} -- will 
give all nodeNames, that has dataRegion > 10 and storage not equal to HDD


UPD:


 

  was:
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
"nodeAttributes": {
"region": "EU",
"storage": "SSD",
"dataRegion" : 10
}
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{['nodeName'][?(@.['region'] == 'EU')]}} -- will give all nodeName, that have 
region equals to 'EU'
{{['nodeName'].[?(@.['dataRegion'] > 10 && @.[storage] != 'HDD')]}} -- will 
give all nodeNames, that has dataRegion > 10 and storage not equal to HDD


UPD:


 


> Design a language for parsing of a filter expression
> 
>
> Key: IGNITE-18954
> URL: https://issues.apache.org/jira/browse/IGNITE-18954
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Mirza Aliev
>Assignee: Mirza Aliev
>Priority: Major
>  Labels: ignite-3
>
> {*}Motivation{*}:
> We need to parse and be able to use filters, that user set for the 
> distribution zone
> *Definition of done:*
>  
> * Filters are parsed and it is possible to filter arbitrary set of attributes
> * Validator is 

[jira] [Updated] (IGNITE-18954) Design a language for parsing of a filter expression

2023-04-11 Thread Mirza Aliev (Jira)


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

Mirza Aliev updated IGNITE-18954:
-
Description: 
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
"nodeAttributes": {
"region": "EU",
"storage": "SSD",
"dataRegion" : 10
}
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{['nodeName'][?(@.['region'] == 'EU')]}} -- will give all nodeName, that have 
region equals to 'EU'
{{['nodeName'].[?(@.['dataRegion'] > 10 && @.[storage] != 'HDD')]}} -- will 
give all nodeNames, that has dataRegion > 10 and storage not equal to HDD


UPD:


 

  was:
{*}Motivation{*}:

We need to parse and be able to use filters, that user set for the distribution 
zone

*Definition of done:*
 
* Filters are parsed and it is possible to filter arbitrary set of attributes
* Validator is implemented, so we can validate a string representation of a 
filter expression


*Implementation details:*

 Language must allow to perform simple operations, like 
* “ “ – default empty filter, means that all nodes match
* () expressions with parentheses 
* key1 = “A” && key2 = “B”, () && ()
* key1 = “A” || key2 = “B”, () || ()
* key1 != "A"
Attributes representation must look like key -> value pairs, like 

{noformat}
(region = EU || region = US) && (storage != HDD || storage = SSD)
{noformat}

After some investigation, I propose to not implement our own language for the 
filters and attributes, but reuse JSON functionality.

For nodes, user just pass JSON representation of attributes through the 
{{ignite-config.json}}:
{code:java}
{
"network": {
"port": 3344
},
"rest": {
"port": 10300
},
"nodeAttributes": {
"nodeName": "node1"
"region": "EU",
"storage": "SSD",
"dataRegion" : 10
}
}

{code}

For parsing, we can use https://github.com/json-path/JsonPath, which is already 
used in ignite {{sql-engine}} module, so we don't need to bring a new 
dependancy.

{{JsonPath}} has a wide functionality to work with JSON, we are interested in 
filtering queries. See all list of available functionality here 
https://github.com/json-path/JsonPath#functions. Example of usages you can find 
here https://rows.com/docs/filtering-with-jsonpath

In general, it will allow us to make all operations, that we have listed before.

Lets provide some examples with our node attributes:

{{['nodeName'][?(@.['region'] == 'EU')]}} -- will give all nodeName, that have 
region equals to 'EU'
{{['nodeName'].[?(@.['dataRegion'] > 10 && @.[storage] != 'HDD')]}} -- will 
give all nodeNames, that has dataRegion > 10 and storage not equal to HDD

 


> Design a language for parsing of a filter expression
> 
>
> Key: IGNITE-18954
> URL: https://issues.apache.org/jira/browse/IGNITE-18954
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Mirza Aliev
>Assignee: Mirza Aliev
>Priority: Major
>  Labels: ignite-3
>
> {*}Motivation{*}:
> We need to parse and be able to use filters, that user set for the 
> distribution zone
> *Definition of done:*
>  
> * Filters are parsed and it is possible to filter arbitrary set of attributes
> * Validator is implemented, so we can validate a string representation of a 

[jira] [Assigned] (IGNITE-19076) Add support of deployment statuses to CLI

2023-04-11 Thread Mikhail Pochatkin (Jira)


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

Mikhail Pochatkin reassigned IGNITE-19076:
--

Assignee: Mikhail Pochatkin

> Add support of deployment statuses to CLI
> -
>
> Key: IGNITE-19076
> URL: https://issues.apache.org/jira/browse/IGNITE-19076
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Mikhail Pochatkin
>Assignee: Mikhail Pochatkin
>Priority: Major
>  Labels: ignite-3
>
> In IGNITE-18973 introduced deployment unit statuses. Need to add statutes 
> support to CLI and REST 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-19192) Bump OpenApi spec generator version

2023-04-11 Thread Mikhail Pochatkin (Jira)


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

Mikhail Pochatkin commented on IGNITE-19192:


In the progress of updating found several problems:
1. Backward incompatible in micronaut-openapi-generator. 
*micronaut.openapi.property.naming.strategy* changed from *CAMEL_CASE* to 
*LOWER_CAMEL_CASE*. Introduced *micronaut.openapi.field.visibility.level* with 
default value *PUBLIC* that produce problem with all private fields. 
2. *@Produces* annotation start processing by openapi-generator annotation 
processor and generate redundant response statuses to cover all produces media 
types. 
For example if presented 
{code:java}
@Produces({MediaType.TEXT_PLAIN, MediaType.PROBLEM_JSON})
{code}
then openapi.yml for annotated method will contain both types for 200 status 
response. This is not corrent, because PROBLEM_JSON used only for 4** and 5** 
responses.
3. *require* attribute deprecated and introduced new enum attribute 
*requiredMode*.
4. In some cases, the name from the *@Schema* annotation is ignored, this is 
important for DTO objects. Thus, if any controller method has a reference to a 
DTO object as an implementation attribute of the *@Schema* annotation, the 
generator resolves the DTO name as the class name instead of the annotation 
name. This is counter-intuitive and as a solution the Dto suffix has been 
removed from all classes and the class name must be used as the object name in 
the public API specification.

> Bump OpenApi spec generator version
> ---
>
> Key: IGNITE-19192
> URL: https://issues.apache.org/jira/browse/IGNITE-19192
> Project: Ignite
>  Issue Type: Improvement
>  Components: rest
>Reporter: Mikhail Pochatkin
>Assignee: Mikhail Pochatkin
>Priority: Major
>  Labels: ignite-3
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Currently micronaut openapi generator version is 3.2.0, but latest release is 
> 4.8.6. So, need to use latest version, but between these versions exists 
> non-backward compatibility changes. Need to fix spec definitions and 
> generator propeties for correct spec generation. Ideally, spec should not be 
> changed.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-18879) Leaseholder candidates balancing

2023-04-11 Thread Denis Chudov (Jira)


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

Denis Chudov updated IGNITE-18879:
--
Description: 
*Motivation*
Primary replicas (leaseholders) should be evenly distributed over cluster to 
balance the transactional load between nodes. As the placement driver assigns 
primary replicas, balancing the primary replicas is also it's responsibility. 
Naive implementation of balancing should choose a node as leaseholder candidate 
in a way to save even lease distribution over all nodes. In real cluster, it 
may take into account slow nodes, hot table records, etc. If lease candidate 
declines LeaseGrantMessage from placement driver, the balancer should make 
decision to choose another candidate for given primary replica or enforce the 
previously chosen. So the balancing algorith should be pluggable, so that we 
could have ability to improve/replace/compare it with others.

*Definition of done*
Introduced interface for lease candidates balancer, and a simple implementation 
sustaining even lease distribution, which is used by placement driver by 
default. No public or internal configuration needed on this stage.

*Implementation notes*
Lease candidates balancer should have at least 2 methods:
 - {_}get(group, ignoredNodes){_}: returns candidate for the given group, a 
node from ignoredNodes set can't be chosen as a candidate
 - {_}considerRedirectProposal(group, candidate, proposedCandidate){_}: 
processes redirect proposal for given group provided by given candidate 
(previously chosen using _get_ method), proposedCandidate is the alternative 
candidate. Returns candidate that should be enforced by placement driver.

  was:
*Motivation*
Primary replicas (leaseholders) should be evenly distributed over cluster to 
balance the transactional load between nodes. As the placement driver assigns 
primary replicas, balancing the primary replicas is also it's responsibility. 
Naive implementation of balancing should choose a node as leaseholder candidate 
in a way to save even lease distribution over all nodes. In real cluster, it 
may take into account slow nodes, hot table records, etc. If lease candidate 
declines LeaseGrantMessage from placement driver, the balancer should make 
decision to choose another candidate for given primary replica or enforce the 
previously chosen. So the balancing algorith should be pluggable, so that we 
could have ability to improve/replace/compare it with others.

*Definition of done*
Introduced interface for lease candidates balancer, and a simple implementation 
sustaining even lease distribution, which is used by placement driver by 
default. No public or internal configuration needed on this stage.

*Implementation notes*
Lease candidates balancer should have at least 2 methods:
- _get(group)_: returns candidate for the given group
- _considerRedirectProposal(group, candidate, proposedCandidate)_: processes 
redirect proposal for given group provided by given candidate (previously 
chosen using _get_ method), proposedCandidate is the alternative candidate. 
Returns candidate that should be enforced by placement driver.


> Leaseholder candidates balancing
> 
>
> Key: IGNITE-18879
> URL: https://issues.apache.org/jira/browse/IGNITE-18879
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Denis Chudov
>Priority: Major
>  Labels: ignite-3
>
> *Motivation*
> Primary replicas (leaseholders) should be evenly distributed over cluster to 
> balance the transactional load between nodes. As the placement driver assigns 
> primary replicas, balancing the primary replicas is also it's responsibility. 
> Naive implementation of balancing should choose a node as leaseholder 
> candidate in a way to save even lease distribution over all nodes. In real 
> cluster, it may take into account slow nodes, hot table records, etc. If 
> lease candidate declines LeaseGrantMessage from placement driver, the 
> balancer should make decision to choose another candidate for given primary 
> replica or enforce the previously chosen. So the balancing algorith should be 
> pluggable, so that we could have ability to improve/replace/compare it with 
> others.
> *Definition of done*
> Introduced interface for lease candidates balancer, and a simple 
> implementation sustaining even lease distribution, which is used by placement 
> driver by default. No public or internal configuration needed on this stage.
> *Implementation notes*
> Lease candidates balancer should have at least 2 methods:
>  - {_}get(group, ignoredNodes){_}: returns candidate for the given group, a 
> node from ignoredNodes set can't be chosen as a candidate
>  - {_}considerRedirectProposal(group, candidate, proposedCandidate){_}: 
> processes redirect proposal for given group provided by given candidate 

[jira] [Updated] (IGNITE-18871) Sql. ColocatedSortAggregate rule can't use index for grouping

2023-04-11 Thread Konstantin Orlov (Jira)


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

Konstantin Orlov updated IGNITE-18871:
--
Summary: Sql. ColocatedSortAggregate rule can't use index for grouping  
(was: Sql. ColocatedSortAggregate rule can't use index for grouping.)

> Sql. ColocatedSortAggregate rule can't use index for grouping
> -
>
> Key: IGNITE-18871
> URL: https://issues.apache.org/jira/browse/IGNITE-18871
> Project: Ignite
>  Issue Type: Improvement
>  Components: sql
>Reporter: Andrey Mashenkov
>Assignee: Konstantin Orlov
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>
> Assume there is a table with a composite index on (grp0, grp1) columns.
> ColocatedSortAggregate rule can’t use index for the next query in case of 
> hash distribution:
> {code:java}
> SELECT AVG(val0) FROM test GROUP BY grp1, grp0
> {code}
> However, index is for the query used in case of single distribution.
> Also, index is used for the next query in both cases: single and hash 
> distributions.
> {code:java}
> SELECT AVG(val0) FROM test GROUP BY grp0, grp1
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-18766) Incorrect id check in ClusterGroupAdapter.forNodeId

2023-04-11 Thread Ignite TC Bot (Jira)


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

Ignite TC Bot commented on IGNITE-18766:


{panel:title=Branch: [pull/10640/head] Base: [master] : No blockers 
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}
{panel:title=Branch: [pull/10640/head] Base: [master] : New Tests 
(1)|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}
{color:#8b}Basic 1{color} [[tests 
1|https://ci2.ignite.apache.org/viewLog.html?buildId=7132563]]
* {color:#013220}IgniteBasicTestSuite: 
GridProjectionForCachesSelfTest.testProjectionWithBadId - PASSED{color}

{panel}
[TeamCity *-- Run :: All* 
Results|https://ci2.ignite.apache.org/viewLog.html?buildId=7132674buildTypeId=IgniteTests24Java8_RunAll]

> Incorrect id check in ClusterGroupAdapter.forNodeId
> ---
>
> Key: IGNITE-18766
> URL: https://issues.apache.org/jira/browse/IGNITE-18766
> Project: Ignite
>  Issue Type: Bug
>Affects Versions: 2.14
>Reporter: Pavel Tupitsyn
>Assignee: Denis Kuznetsov
>Priority: Minor
>  Labels: ise, newbie
> Fix For: 2.15
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> ClusterGroup.forNodeId checks *id* in a loop instead of *id0*:
> {code:java}
> for (UUID id0 : ids) {
> if (contains(id))
> nodeIds.add(id0);
> }
> {code}
> https://github.com/apache/ignite/blob/3de1dc44f53ea510328badf6cb6b423fe6975bd8/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java#L461
> The following unit test demonstrates the problem:
> {code:java}
> @Test
> public void testProjectionWithBadId() {
> ClusterNode locNode = ignite.cluster().localNode();
> ClusterGroup prj = ignite.cluster().forNodeId(UUID.randomUUID(), 
> locNode.id());
> Collection nodes = prj.nodes();
> assertEquals(1, nodes.size());
> }
> {code}
> (add to GridProjectionForCachesSelfTest)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-19222) .NET: Add IgniteClientConfiguration.EnableClusterDiscovery

2023-04-11 Thread Ignite TC Bot (Jira)


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

Ignite TC Bot commented on IGNITE-19222:


{panel:title=Branch: [pull/10642/head] Base: [master] : Possible Blockers 
(4)|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1}
{color:#d04437}Snapshots{color} [[tests 1 Exit Code , Failure on metric 
|https://ci.ignite.apache.org/viewLog.html?buildId=7181020]]
* IgniteSnapshotTestSuite: 
IgniteSnapshotMXBeanTest.testCreateSnapshot[encryption=false, onlyPrimay=false] 
- Test has low fail rate in base branch 0,0% and is not flaky

{color:#d04437}[Check Code Style Ducktests]{color} [[tests 0 Exit Code 
|https://ci.ignite.apache.org/viewLog.html?buildId=7180962]]

{color:#d04437}Disk Page Compressions 1{color} [[tests 0 TIMEOUT , Exit Code , 
Failure on metric |https://ci.ignite.apache.org/viewLog.html?buildId=7181038]]

{panel}
{panel:title=Branch: [pull/10642/head] Base: [master] : New Tests 
(223)|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}
{color:#8b}Platform .NET (Core Linux){color} [[tests 
116|https://ci.ignite.apache.org/viewLog.html?buildId=7181007]]
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AllKeyBasedOperations_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(4,1)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AllKeyBasedOperations_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(3,0)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AllKeyBasedOperations_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(6,2)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AllKeyBasedOperations_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(5,1)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AtomicLong_RequestIsRoutedToPrimaryNode(default-grp-replicated,null,Replicated,2)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AtomicLong_RequestIsRoutedToPrimaryNode(default-grp-partitioned,null,Partitioned,0)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AtomicLong_RequestIsRoutedToPrimaryNode(custom-grp-replicated,testAtomicLong,Replicated,0)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AtomicLong_RequestIsRoutedToPrimaryNode(custom-grp-partitioned,testAtomicLong,Partitioned,1)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AllKeyBasedOperations_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(2,0)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.AllKeyBasedOperations_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(1,1)
 - PASSED{color}
* {color:#013220}DotNetCore: 
PartitionAwarenessWithClusterDiscoveryTest.CachePut_AllPrimitiveTypes_RequestIsRoutedToPrimaryNode(Hello
 World,0) - PASSED{color}
... and 105 new tests

{color:#8b}Platform .NET (Windows){color} [[tests 
107|https://ci.ignite.apache.org/viewLog.html?buildId=7181008]]
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CacheGetAsync_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(3,0)
 - PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CacheGetAsync_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(2,0)
 - PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CacheGetAsync_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(5,1)
 - PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CacheGetAsync_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(4,1)
 - PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CachePut_AllPrimitiveTypes_RequestIsRoutedToPrimaryNode(1,1)
 - PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CacheGetAsync_PrimitiveKeyType_RequestIsRoutedToPrimaryNode(6,2)
 - PASSED{color}
* {color:#013220}exe: 
CachePut_AllPrimitiveTypes_RequestIsRoutedToPrimaryNode(uint.MaxValue,0) - 
PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CachePut_AllPrimitiveTypes_RequestIsRoutedToPrimaryNode(2,0)
 - PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CacheGet_UserDefinedKeyType_RequestIsRoutedToPrimaryNode(1,0)
 - PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CacheGet_RepeatedCall_DoesNotRequestAffinityMapping
 - PASSED{color}
* {color:#013220}exe: 
PartitionAwarenessWithClusterDiscoveryTest.CacheGet_UserDefinedKeyType_RequestIsRoutedToPrimaryNode(3,0)
 - PASSED{color}
... and 96 new tests

{panel}
[TeamCity *-- Run :: All* 
Results|https://ci.ignite.apache.org/viewLog.html?buildId=7181041buildTypeId=IgniteTests24Java8_RunAll]

> .NET: Add 

[jira] [Updated] (IGNITE-19275) Creation of big amount of tables throws exception

2023-04-11 Thread Pavel Pereslegin (Jira)


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

Pavel Pereslegin updated IGNITE-19275:
--
Labels: ignite-3  (was: )

> Creation of big amount of tables throws exception
> -
>
> Key: IGNITE-19275
> URL: https://issues.apache.org/jira/browse/IGNITE-19275
> Project: Ignite
>  Issue Type: Bug
>  Components: general
>Affects Versions: 3.0
>Reporter: Igor
>Priority: Critical
>  Labels: ignite-3
> Attachments: image-2023-04-11-16-11-09-934.png, node_0.log.zip, 
> node_1.log.zip
>
>
> h1. *Steps:*
>  # Sart 2 nodes
>  # Init cluster
>  # Connect to cluster via jdbc
>  # Create table with 5 columns.
>  # Wait 30 ms.
>  # Repeat points 4-5 1000 times.
> h1. *Expected behavior:*
>  # Creation time is constant.
>  # Tables are created.
> h1. *Actual behavior:*
>  # Creation time is increasing
>  # The exception is thrown| after 200+ tables are created
> h2. *Details:*
> h3. Creation time graph:
> !image-2023-04-11-16-11-09-934.png|width=522,height=323!
> h3. Exceptions:
>  # From client:
> {code:java}
> Exception in thread "main" java.sql.SQLException: Exception while executing 
> query [query=CREATE TABLE table_239(id INT PRIMARY KEY, column_1 VARCHAR, 
> column_2 VARCHAR, column_3 VARCHAR, column_4 VARCHAR)]. Error 
> message:IGN-CMN-65535 TraceId:7299edda-2a88-4448-ba6d-366fca88cfd4
>         at 
> org.apache.ignite.internal.jdbc.proto.IgniteQueryErrorCode.createJdbcSqlException(IgniteQueryErrorCode.java:57)
>         at 
> org.apache.ignite.internal.jdbc.JdbcStatement.execute0(JdbcStatement.java:148)
>         at 
> org.apache.ignite.internal.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:177)
>         at lunigorn.ignite3test.Test.main(Test.java:18) {code}
>     2. From server logs:
> {code:java}
> 2023-04-11 15:13:49:890 +0200 
> [WARNING][%node_1%Raft-Group-Client-5][DistributedConfigurationStorage] Meta 
> storage listener issue
> org.apache.ignite.lang.IgniteInternalException: IGN-SQL-32 
> TraceId:d3484efb-2ca6-4098-8c17-30a878c0801e Couldn't evaluate sql schemas 
> for causality token: 722
>     at 
> org.apache.ignite.internal.sql.engine.schema.SqlSchemaManagerImpl.lambda$new$1(SqlSchemaManagerImpl.java:131)
>     at 
> org.apache.ignite.internal.causality.BaseVersionedValue.lambda$notifyCompletionListeners$7(BaseVersionedValue.java:331)
>  {code}
> *The nodes logs are in attachment.*
>  
> h3. The code to reproduce (or use [gradle 
> project|https://github.com/Lunigorn/ignite3test/tree/tables-capacity-test]):
> {code:java}
> package lunigorn.ignite3test;
> import java.sql.*;
> public class Test {
> private static final String DB_URL = "jdbc:ignite:thin://127.0.1.1:10800";
> private static final int COLUMNS_COUNT = 5;
> private static final int TABLES_COUNT = 1000;
> private static final int SLEEP = 30;
> public static void main(String[] args) throws SQLException {
> System.out.println("Test started");
> try (Connection connection = DriverManager.getConnection(DB_URL); 
> Statement statement = connection.createStatement()){
> System.out.println("Connection created");
> for (int i = 0; i < TABLES_COUNT; i++) {
> String createTableQuery = createTableQuery("table_" + i, 
> COLUMNS_COUNT);
> long timestampBefore = System.currentTimeMillis();
> statement.executeUpdate(createTableQuery);
> long timestampAfter = System.currentTimeMillis();
> System.out.println("Create table " + i + " took " + 
> (timestampAfter - timestampBefore) + " ms");
> if (i % 50 == 0){
> int tablesCount = findTablesCount(connection);
> if (tablesCount != i+1){
> throw new IllegalStateException("Expected " + (i+1) + 
> " tables in cluster, but was " + tablesCount);
> }
> System.out.println("Tables count in cluster: " + 
> tablesCount);
> }
> sleep();
> }
> }
> }
> public static String createTableQuery(String tableName, int 
> columnsAmount){
> StringBuilder sb = new StringBuilder();
> sb.append("CREATE TABLE ").append(tableName).append("(");
> for (int i = 0; i < columnsAmount; i++) {
> if (i == 0){
> sb.append("id INT PRIMARY KEY");
> } else {
> sb.append("column_").append(i).append(" VARCHAR");
> }
> if (i != columnsAmount - 1){
> sb.append(", ");
> }
> }
> sb.append(")");
> return sb.toString();
> }
> public static int findTablesCount(Connection connection) throws 
> SQLException {
> 

[jira] [Updated] (IGNITE-15605) Calcite. Unexpected result with aggregate inside subquery.

2023-04-11 Thread Yury Gerzhedovich (Jira)


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

Yury Gerzhedovich updated IGNITE-15605:
---
Description: 
{noformat}
statement ok
CREATE TABLE integers(i INTEGER)

statement ok
INSERT INTO integers VALUES (1), (2), (3), (NULL)

query R
SELECT (SELECT SUM(i1.i)) FROM integers i1;

6.00
{noformat}
{noformat}
/subquery/scalar/test_correlated_aggregate_subquery.test_ignore

/subquery/scalar/test_varchar_correlated_subquery.test_ignore
{noformat}
 
{code:java}
Caused by: java.lang.ClassCastException: class java.lang.Long cannot be cast to 
class java.lang.Integer (java.lang.Long and java.lang.Integer are in module 
java.base of loader 'bootstrap')
    at SC.execute(Unknown Source)
    at 
org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl$ProjectImpl.apply(ExpressionFactoryImpl.java:654)
    at 
org.apache.ignite.internal.sql.engine.exec.rel.StorageScanNode.push(StorageScanNode.java:197)
    at 
org.apache.ignite.internal.sql.engine.exec.rel.StorageScanNode$SubscriberImpl.lambda$onComplete$2(StorageScanNode.java:303)
    at 
org.apache.ignite.internal.sql.engine.exec.ExecutionContext.lambda$execute$0(ExecutionContext.java:315){code}

  was:
{noformat}
statement ok
CREATE TABLE integers(i INTEGER)

statement ok
INSERT INTO integers VALUES (1), (2), (3), (NULL)

query R
SELECT (SELECT SUM(i1.i)) FROM integers i1;

6.00
{noformat}


{noformat}
/subquery/scalar/test_correlated_aggregate_subquery.test_ignore

/subquery/scalar/test_varchar_correlated_subquery.test_ignore
{noformat}




> Calcite. Unexpected result with aggregate inside subquery.
> --
>
> Key: IGNITE-15605
> URL: https://issues.apache.org/jira/browse/IGNITE-15605
> Project: Ignite
>  Issue Type: Bug
>  Components: sql
>Reporter: Evgeny Stanilovsky
>Priority: Major
>  Labels: calcite, calcite2-required, calcite3-required, ignite-3
>
> {noformat}
> statement ok
> CREATE TABLE integers(i INTEGER)
> statement ok
> INSERT INTO integers VALUES (1), (2), (3), (NULL)
> query R
> SELECT (SELECT SUM(i1.i)) FROM integers i1;
> 
> 6.00
> {noformat}
> {noformat}
> /subquery/scalar/test_correlated_aggregate_subquery.test_ignore
> /subquery/scalar/test_varchar_correlated_subquery.test_ignore
> {noformat}
>  
> {code:java}
> Caused by: java.lang.ClassCastException: class java.lang.Long cannot be cast 
> to class java.lang.Integer (java.lang.Long and java.lang.Integer are in 
> module java.base of loader 'bootstrap')
>     at SC.execute(Unknown Source)
>     at 
> org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl$ProjectImpl.apply(ExpressionFactoryImpl.java:654)
>     at 
> org.apache.ignite.internal.sql.engine.exec.rel.StorageScanNode.push(StorageScanNode.java:197)
>     at 
> org.apache.ignite.internal.sql.engine.exec.rel.StorageScanNode$SubscriberImpl.lambda$onComplete$2(StorageScanNode.java:303)
>     at 
> org.apache.ignite.internal.sql.engine.exec.ExecutionContext.lambda$execute$0(ExecutionContext.java:315){code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-18871) Sql. ColocatedSortAggregate rule can't use index for grouping.

2023-04-11 Thread Konstantin Orlov (Jira)


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

Konstantin Orlov updated IGNITE-18871:
--
Ignite Flags:   (was: Docs Required,Release Notes Required)

> Sql. ColocatedSortAggregate rule can't use index for grouping.
> --
>
> Key: IGNITE-18871
> URL: https://issues.apache.org/jira/browse/IGNITE-18871
> Project: Ignite
>  Issue Type: Improvement
>  Components: sql
>Reporter: Andrey Mashenkov
>Assignee: Konstantin Orlov
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>
> Assume there is a table with a composite index on (grp0, grp1) columns.
> ColocatedSortAggregate rule can’t use index for the next query in case of 
> hash distribution:
> {code:java}
> SELECT AVG(val0) FROM test GROUP BY grp1, grp0
> {code}
> However, index is for the query used in case of single distribution.
> Also, index is used for the next query in both cases: single and hash 
> distributions.
> {code:java}
> SELECT AVG(val0) FROM test GROUP BY grp0, grp1
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19275) Creation of big amount of tables throws exception

2023-04-11 Thread Igor (Jira)


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

Igor updated IGNITE-19275:
--
Description: 
h1. *Steps:*
 # Sart 2 nodes
 # Init cluster
 # Connect to cluster via jdbc
 # Create table with 5 columns.
 # Wait 30 ms.
 # Repeat points 4-5 1000 times.

h1. *Expected behavior:*
 # Creation time is constant.
 # Tables are created.

h1. *Actual behavior:*
 # Creation time is increasing
 # The exception is thrown| after 200+ tables are created

h2. *Details:*
h3. Creation time graph:

!image-2023-04-11-16-11-09-934.png|width=522,height=323!
h3. Exceptions:
 # From client:

{code:java}
Exception in thread "main" java.sql.SQLException: Exception while executing 
query [query=CREATE TABLE table_239(id INT PRIMARY KEY, column_1 VARCHAR, 
column_2 VARCHAR, column_3 VARCHAR, column_4 VARCHAR)]. Error 
message:IGN-CMN-65535 TraceId:7299edda-2a88-4448-ba6d-366fca88cfd4
        at 
org.apache.ignite.internal.jdbc.proto.IgniteQueryErrorCode.createJdbcSqlException(IgniteQueryErrorCode.java:57)
        at 
org.apache.ignite.internal.jdbc.JdbcStatement.execute0(JdbcStatement.java:148)
        at 
org.apache.ignite.internal.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:177)
        at lunigorn.ignite3test.Test.main(Test.java:18) {code}
    2. From server logs:
{code:java}
2023-04-11 15:13:49:890 +0200 
[WARNING][%node_1%Raft-Group-Client-5][DistributedConfigurationStorage] Meta 
storage listener issue
org.apache.ignite.lang.IgniteInternalException: IGN-SQL-32 
TraceId:d3484efb-2ca6-4098-8c17-30a878c0801e Couldn't evaluate sql schemas for 
causality token: 722
    at 
org.apache.ignite.internal.sql.engine.schema.SqlSchemaManagerImpl.lambda$new$1(SqlSchemaManagerImpl.java:131)
    at 
org.apache.ignite.internal.causality.BaseVersionedValue.lambda$notifyCompletionListeners$7(BaseVersionedValue.java:331)
 {code}
*The nodes logs are in attachment.*

 
h3. The code to reproduce (or use [gradle 
project|https://github.com/Lunigorn/ignite3test/tree/tables-capacity-test]):
{code:java}
package lunigorn.ignite3test;

import java.sql.*;

public class Test {
private static final String DB_URL = "jdbc:ignite:thin://127.0.1.1:10800";
private static final int COLUMNS_COUNT = 5;
private static final int TABLES_COUNT = 1000;
private static final int SLEEP = 30;

public static void main(String[] args) throws SQLException {
System.out.println("Test started");
try (Connection connection = DriverManager.getConnection(DB_URL); 
Statement statement = connection.createStatement()){
System.out.println("Connection created");
for (int i = 0; i < TABLES_COUNT; i++) {
String createTableQuery = createTableQuery("table_" + i, 
COLUMNS_COUNT);
long timestampBefore = System.currentTimeMillis();
statement.executeUpdate(createTableQuery);
long timestampAfter = System.currentTimeMillis();
System.out.println("Create table " + i + " took " + 
(timestampAfter - timestampBefore) + " ms");
if (i % 50 == 0){
int tablesCount = findTablesCount(connection);
if (tablesCount != i+1){
throw new IllegalStateException("Expected " + (i+1) + " 
tables in cluster, but was " + tablesCount);
}
System.out.println("Tables count in cluster: " + 
tablesCount);
}
sleep();
}
}
}


public static String createTableQuery(String tableName, int columnsAmount){
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE ").append(tableName).append("(");
for (int i = 0; i < columnsAmount; i++) {
if (i == 0){
sb.append("id INT PRIMARY KEY");
} else {
sb.append("column_").append(i).append(" VARCHAR");
}

if (i != columnsAmount - 1){
sb.append(", ");
}
}
sb.append(")");
return sb.toString();
}

public static int findTablesCount(Connection connection) throws 
SQLException {
DatabaseMetaData md = connection.getMetaData();
String catalog = connection.getCatalog();
ResultSet table_rs = md.getTables(catalog, null, null, new 
String[]{"TABLE"});
int count = 0;
while (table_rs.next()){
count++;
}
return count;
}

public static void sleep(){
try {
Thread.sleep(SLEEP);
} catch (InterruptedException ignored) {
}
}

}{code}
 

  was:
h1. *Steps:*
 # Sart 2 nodes
 # Init cluster
 # Connect to cluster via jdbc
 # Create table with 5 columns.
 # Wait 30 ms.
 # Repeat points 4-5 1000 times.

h1. *Expected behavior:*
 # Creation time is constant.
 # Tables are created.

h1. *Actual behavior:*
 # Creation 

[jira] [Created] (IGNITE-19276) Track partitions while building indexes

2023-04-11 Thread Ivan Bessonov (Jira)
Ivan Bessonov created IGNITE-19276:
--

 Summary: Track partitions while building indexes
 Key: IGNITE-19276
 URL: https://issues.apache.org/jira/browse/IGNITE-19276
 Project: Ignite
  Issue Type: Improvement
Reporter: Ivan Bessonov


IGNITE-18539 states:
{code:java}
when index is created, we also create a table somewhere that looks similar to 
this:

indexCompletion..0 = false
...
indexCompletion..N = false  {code}
This part has not been implemented, and it's separated into another issue.

Depending on the catalog service implementation, this data must either go to 
meta-storage directly, or into a corresponding section in private configuration.
h3. Things to consider
 * RAFT replica listener node may die after sending last "build index" command, 
thus not updating, so new replica listener must compare states of indexes in 
schema with states of indexes in storage.
 * One of nodes must create new schema version when all partitions are built. 
Choosing such node is a hard problem, so we can simply ask all nodes to do this 
operation, making it idempotent and expecting that one of them would win. This 
part requires careful thinking about the specifics.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Created] (IGNITE-19275) Creation of big amount of tables throws exception

2023-04-11 Thread Igor (Jira)
Igor created IGNITE-19275:
-

 Summary: Creation of big amount of tables throws exception
 Key: IGNITE-19275
 URL: https://issues.apache.org/jira/browse/IGNITE-19275
 Project: Ignite
  Issue Type: Bug
  Components: general
Affects Versions: 3.0
Reporter: Igor
 Attachments: image-2023-04-11-16-11-09-934.png, node_0.log.zip, 
node_1.log.zip

h1. *Steps:*
 # Sart 2 nodes
 # Init cluster
 # Connect to cluster via jdbc
 # Create table with 5 columns.
 # Wait 30 ms.
 # Repeat points 4-5 1000 times.

h1. *Expected behavior:*
 # Creation time is constant.
 # Tables are created.

h1. *Actual behavior:*
 # Creation time is increasing
 # The exception is thrown| after 200+ tables are created

h2. *Details:*
h3. Creation time graph:

!image-2023-04-11-16-11-09-934.png|width=522,height=323!
h3. Exceptions:
 # From client:

 
{code:java}
Exception in thread "main" java.sql.SQLException: Exception while executing 
query [query=CREATE TABLE table_239(id INT PRIMARY KEY, column_1 VARCHAR, 
column_2 VARCHAR, column_3 VARCHAR, column_4 VARCHAR)]. Error 
message:IGN-CMN-65535 TraceId:7299edda-2a88-4448-ba6d-366fca88cfd4
        at 
org.apache.ignite.internal.jdbc.proto.IgniteQueryErrorCode.createJdbcSqlException(IgniteQueryErrorCode.java:57)
        at 
org.apache.ignite.internal.jdbc.JdbcStatement.execute0(JdbcStatement.java:148)
        at 
org.apache.ignite.internal.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:177)
        at lunigorn.ignite3test.Test.main(Test.java:18) {code}
    2. From server logs:

 

 
{code:java}
2023-04-11 15:13:49:890 +0200 
[WARNING][%node_1%Raft-Group-Client-5][DistributedConfigurationStorage] Meta 
storage listener issue
org.apache.ignite.lang.IgniteInternalException: IGN-SQL-32 
TraceId:d3484efb-2ca6-4098-8c17-30a878c0801e Couldn't evaluate sql schemas for 
causality token: 722
    at 
org.apache.ignite.internal.sql.engine.schema.SqlSchemaManagerImpl.lambda$new$1(SqlSchemaManagerImpl.java:131)
    at 
org.apache.ignite.internal.causality.BaseVersionedValue.lambda$notifyCompletionListeners$7(BaseVersionedValue.java:331)
 {code}
*The nodes logs are in attachment.*

 
h3. The code to reproduce (or use [gradle 
project|https://github.com/Lunigorn/ignite3test/tree/tables-capacity-test]):
{code:java}
package lunigorn.ignite3test;

import java.sql.*;

public class Test {
private static final String DB_URL = "jdbc:ignite:thin://127.0.1.1:10800";
private static final int COLUMNS_COUNT = 5;
private static final int TABLES_COUNT = 1000;
private static final int SLEEP = 30;

public static void main(String[] args) throws SQLException {
System.out.println("Test started");
try (Connection connection = DriverManager.getConnection(DB_URL); 
Statement statement = connection.createStatement()){
System.out.println("Connection created");
for (int i = 0; i < TABLES_COUNT; i++) {
String createTableQuery = createTableQuery("table_" + i, 
COLUMNS_COUNT);
long timestampBefore = System.currentTimeMillis();
statement.executeUpdate(createTableQuery);
long timestampAfter = System.currentTimeMillis();
System.out.println("Create table " + i + " took " + 
(timestampAfter - timestampBefore) + " ms");
if (i % 50 == 0){
int tablesCount = findTablesCount(connection);
if (tablesCount != i+1){
throw new IllegalStateException("Expected " + (i+1) + " 
tables in cluster, but was " + tablesCount);
}
System.out.println("Tables count in cluster: " + 
tablesCount);
}
sleep();
}
}
}


public static String createTableQuery(String tableName, int columnsAmount){
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE ").append(tableName).append("(");
for (int i = 0; i < columnsAmount; i++) {
if (i == 0){
sb.append("id INT PRIMARY KEY");
} else {
sb.append("column_").append(i).append(" VARCHAR");
}

if (i != columnsAmount - 1){
sb.append(", ");
}
}
sb.append(")");
return sb.toString();
}

public static int findTablesCount(Connection connection) throws 
SQLException {
DatabaseMetaData md = connection.getMetaData();
String catalog = connection.getCatalog();
ResultSet table_rs = md.getTables(catalog, null, null, new 
String[]{"TABLE"});
int count = 0;
while (table_rs.next()){
count++;
}
return count;
}

public static void sleep(){
try {
Thread.sleep(SLEEP);
} catch (InterruptedException ignored) {
}
}

}{code}
 



--

[jira] [Created] (IGNITE-19274) Sql. Jdbc side working with TIMESTAMP WITH LOCAL TIME ZONE did not take into account current tz while storing data.

2023-04-11 Thread Evgeny Stanilovsky (Jira)
Evgeny Stanilovsky created IGNITE-19274:
---

 Summary: Sql. Jdbc side working with TIMESTAMP WITH LOCAL TIME 
ZONE did not take into account current tz while storing data.
 Key: IGNITE-19274
 URL: https://issues.apache.org/jira/browse/IGNITE-19274
 Project: Ignite
  Issue Type: Bug
  Components: sql
Affects Versions: 3.0.0-beta1
Reporter: Evgeny Stanilovsky


The {{TIMESTAMP WITH LOCAL TIME ZONE}} data type is a variant of {{TIMESTAMP}} 
that includes a time zone offset in its value. Data stored in the database is 
normalized to the database time zone (UTC) and time zone offset is not stored 
as part of the column data. When the data is retrieved, it to be returned in 
the user's local session time zone.

i.e:
{noformat}
CREATE TABLE timestamp(ts TIMESTAMP, t_tz TIMESTAMP WITH TIME ZONE);
SET TIME ZONE 'tz1';
INSERT INTO timestamp VALUES ('2011-01-01 01:01:01', TIMESTAMP WITH TIME ZONE 
'2011-01-01 01:01:01');
SET TIME ZONE 'tz2';
INSERT INTO timestamp VALUES ('2011-01-01 01:01:01', TIMESTAMP WITH TIME ZONE 
'2011-01-01 01:01:01');
...
select * from timestamp;{noformat}
returned rows need to be different in case of different tz1 and tz2 offsets but 
they are equals for now. Also returned representation need to be present in 
user session time zone.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-19164) Improve message about requested partitions during snapshot restore

2023-04-11 Thread Ignite TC Bot (Jira)


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

Ignite TC Bot commented on IGNITE-19164:


{panel:title=Branch: [pull/10638/head] Base: [master] : No blockers 
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}
{panel:title=Branch: [pull/10638/head] Base: [master] : No new tests 
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1}{panel}
[TeamCity *-- Run :: All* 
Results|https://ci2.ignite.apache.org/viewLog.html?buildId=7132560buildTypeId=IgniteTests24Java8_RunAll]

> Improve message about requested partitions during snapshot restore
> --
>
> Key: IGNITE-19164
> URL: https://issues.apache.org/jira/browse/IGNITE-19164
> Project: Ignite
>  Issue Type: Task
>Reporter: Ilya Shishkov
>Assignee: Julia Bakulina
>Priority: Minor
>  Labels: iep-43, ise
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> Currently, during snapshot restore message is logged before requesting 
> partitions from remote nodes:
> {quote}
> [2023-03-24T18:06:59,910][INFO 
> ]\[disco-notifier-worker-#792%node%|#792%node%][SnapshotRestoreProcess] 
> Trying to request partitions from remote nodes 
> [reqId=ff682204-9554-4fbb-804c-38a79c0b286a, snapshot=snapshot_name, 
> map={*{color:#FF}76e22ef5-3c76-4987-bebd-9a6222a0{color}*={*{color:#FF}-903566235{color}*=[0,2,4,6,11,12,18,98,100,170,190,194,1015],
>  
> *{color:#FF}1544803905{color}*=[1,11,17,18,22,25,27,35,37,42,45,51,62,64,67,68,73,76,1017]}}]
> {quote}
> It is necessary to make this output "human readable":
> # Print messages per node instead of one message for all nodes.
> # Print node consistent id and address.
> # Print cache / group name.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-16985) Design table management flow (part 1)

2023-04-11 Thread Denis Chudov (Jira)


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

Denis Chudov updated IGNITE-16985:
--
Attachment: (was: flow.png)

> Design table management flow (part 1)
> -
>
> Key: IGNITE-16985
> URL: https://issues.apache.org/jira/browse/IGNITE-16985
> Project: Ignite
>  Issue Type: Task
>Reporter: Alexander Lapin
>Assignee: Denis Chudov
>Priority: Major
>  Labels: ignite-3
> Attachments: VersionedValuesUpdates.svg, VersionedValuesUpdates.yuml, 
> flow.png, flow.puml, onTableCreate.svg, onTableCreate.yuml, onTableDrop.svg, 
> onTableDrop.yuml, table.svg, table.yuml
>
>
> As a part of the issue planed:
>  # Draw a time diagram of all operations: createTable(), dropTable(), 
> table(), tables().
>  # Emphases of correctness work of causality tokens: tablesByIdVv.
>  # Reflect cross components interactions. Components: Schema manager, SQL 
> manager (SqlQueryProcessor), Affinity manager (it is not dedicated for now).
>  
> The task for this ticket is to make a detailed diagram of the current flow, 
> to ease the design itself.
> Definition of done:
> We have detailed and clear description of table manager flows and the ticket 
> IGNITE-18989 is enriched with details about the flaws we want to fix.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-16985) Design table management flow (part 1)

2023-04-11 Thread Denis Chudov (Jira)


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

Denis Chudov updated IGNITE-16985:
--
Attachment: flow.puml
flow.png

> Design table management flow (part 1)
> -
>
> Key: IGNITE-16985
> URL: https://issues.apache.org/jira/browse/IGNITE-16985
> Project: Ignite
>  Issue Type: Task
>Reporter: Alexander Lapin
>Assignee: Denis Chudov
>Priority: Major
>  Labels: ignite-3
> Attachments: VersionedValuesUpdates.svg, VersionedValuesUpdates.yuml, 
> flow.png, flow.puml, onTableCreate.svg, onTableCreate.yuml, onTableDrop.svg, 
> onTableDrop.yuml, table.svg, table.yuml
>
>
> As a part of the issue planed:
>  # Draw a time diagram of all operations: createTable(), dropTable(), 
> table(), tables().
>  # Emphases of correctness work of causality tokens: tablesByIdVv.
>  # Reflect cross components interactions. Components: Schema manager, SQL 
> manager (SqlQueryProcessor), Affinity manager (it is not dedicated for now).
>  
> The task for this ticket is to make a detailed diagram of the current flow, 
> to ease the design itself.
> Definition of done:
> We have detailed and clear description of table manager flows and the ticket 
> IGNITE-18989 is enriched with details about the flaws we want to fix.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-16985) Design table management flow (part 1)

2023-04-11 Thread Denis Chudov (Jira)


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

Denis Chudov updated IGNITE-16985:
--
Attachment: (was: flow.puml)

> Design table management flow (part 1)
> -
>
> Key: IGNITE-16985
> URL: https://issues.apache.org/jira/browse/IGNITE-16985
> Project: Ignite
>  Issue Type: Task
>Reporter: Alexander Lapin
>Assignee: Denis Chudov
>Priority: Major
>  Labels: ignite-3
> Attachments: VersionedValuesUpdates.svg, VersionedValuesUpdates.yuml, 
> flow.png, flow.puml, onTableCreate.svg, onTableCreate.yuml, onTableDrop.svg, 
> onTableDrop.yuml, table.svg, table.yuml
>
>
> As a part of the issue planed:
>  # Draw a time diagram of all operations: createTable(), dropTable(), 
> table(), tables().
>  # Emphases of correctness work of causality tokens: tablesByIdVv.
>  # Reflect cross components interactions. Components: Schema manager, SQL 
> manager (SqlQueryProcessor), Affinity manager (it is not dedicated for now).
>  
> The task for this ticket is to make a detailed diagram of the current flow, 
> to ease the design itself.
> Definition of done:
> We have detailed and clear description of table manager flows and the ticket 
> IGNITE-18989 is enriched with details about the flaws we want to fix.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Assigned] (IGNITE-19267) Implement local Low Watermark propagation

2023-04-11 Thread Kirill Tkalenko (Jira)


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

Kirill Tkalenko reassigned IGNITE-19267:


Assignee: Kirill Tkalenko

> Implement local Low Watermark propagation
> -
>
> Key: IGNITE-19267
> URL: https://issues.apache.org/jira/browse/IGNITE-19267
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Ivan Bessonov
>Assignee: Kirill Tkalenko
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>
> According to the IEP-91, we can delete old data, once it becomes older than 
> the certain threshold. At the moment, we can consider this threshold to be 
> shared between different tables, but be unique on individual nodes. It's 
> called a Low Watermark (LW).
> The way the value is chosen is the following:
>  * There's the {_}data availability time{_}, that can be configured by the 
> user. This is a cluster configuration. It has a value of, for example, 45 
> minutes. Valid values - {{{}[0, +INF){}}}.
>  * There's a {_}GC frequency{_}, that's also a cluster configuration. For 
> example, 5 minuter. Range of valid values should be more strict.
>  * Last LW value is persisted in Vault.
>  * Every 5 minutes, we assign a new "lwCandidate{{{} = now() - 45min - 
> maxClockSkew"{}}}.
>  ** If there are no running transactions with timestamp below 
> {{{}lwCandidate{}}}, we promote the candidate into a real LW value.
>  ** Otherwise, we trigger GC with timestamp of the transaction with the 
> oldest timestamp (and promoting LW to that timestamp), and raising the bar 
> every time* that transaction is completed. Eventually, we will reach the 
> point where there are no running transactions with timestamp below 
> {{{}lwCandidate{}}}.
>  * it's not necessary to do it every time. But, once the timestamp of the 
> oldest RO transaction is above or equal to {{{}lwCandidate{}}}, we must 
> guarantee its promotion. Everything else is optimization.
>  * If there's a new RO transaction with timestamp below {{{}lwCandidate{}}}, 
> we fail it.
> Promoted LW value cannot become smaller no matter what. All data below LW is 
> considered to be invalid, maybe broken and completely invisible to user.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19273) [ducktape] Transaction doesn't finished in discovery test

2023-04-11 Thread Maksim Timonin (Jira)


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

Maksim Timonin updated IGNITE-19273:

Description: 
ContinuousDataLoadApplication put all keys from specified range in single 
transaction. Test uses 5.000.000 keys, and the transaction doesn't finish.
 
This is a bug, and it prevents from reusing this class for other tests.

  was:Conti


> [ducktape] Transaction doesn't finished in discovery test
> -
>
> Key: IGNITE-19273
> URL: https://issues.apache.org/jira/browse/IGNITE-19273
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Maksim Timonin
>Assignee: Maksim Timonin
>Priority: Major
> Fix For: 2.16
>
>
> ContinuousDataLoadApplication put all keys from specified range in single 
> transaction. Test uses 5.000.000 keys, and the transaction doesn't finish.
>  
> This is a bug, and it prevents from reusing this class for other tests.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19273) [ducktape] Transaction doesn't finished in discovery test

2023-04-11 Thread Maksim Timonin (Jira)


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

Maksim Timonin updated IGNITE-19273:

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

> [ducktape] Transaction doesn't finished in discovery test
> -
>
> Key: IGNITE-19273
> URL: https://issues.apache.org/jira/browse/IGNITE-19273
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Maksim Timonin
>Assignee: Maksim Timonin
>Priority: Major
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19273) [ducktape] Transaction doesn't finished in discovery test

2023-04-11 Thread Maksim Timonin (Jira)


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

Maksim Timonin updated IGNITE-19273:

Fix Version/s: 2.16

> [ducktape] Transaction doesn't finished in discovery test
> -
>
> Key: IGNITE-19273
> URL: https://issues.apache.org/jira/browse/IGNITE-19273
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Maksim Timonin
>Assignee: Maksim Timonin
>Priority: Major
> Fix For: 2.16
>
>
> Conti



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19273) [ducktape] Transaction doesn't finished in discovery test

2023-04-11 Thread Maksim Timonin (Jira)


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

Maksim Timonin updated IGNITE-19273:

Description: Conti

> [ducktape] Transaction doesn't finished in discovery test
> -
>
> Key: IGNITE-19273
> URL: https://issues.apache.org/jira/browse/IGNITE-19273
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Maksim Timonin
>Assignee: Maksim Timonin
>Priority: Major
>
> Conti



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Created] (IGNITE-19273) [ducktape] Transaction doesn't finished in discovery test

2023-04-11 Thread Maksim Timonin (Jira)
Maksim Timonin created IGNITE-19273:
---

 Summary: [ducktape] Transaction doesn't finished in discovery test
 Key: IGNITE-19273
 URL: https://issues.apache.org/jira/browse/IGNITE-19273
 Project: Ignite
  Issue Type: Improvement
Reporter: Maksim Timonin






--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Assigned] (IGNITE-19273) [ducktape] Transaction doesn't finished in discovery test

2023-04-11 Thread Maksim Timonin (Jira)


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

Maksim Timonin reassigned IGNITE-19273:
---

Assignee: Maksim Timonin

> [ducktape] Transaction doesn't finished in discovery test
> -
>
> Key: IGNITE-19273
> URL: https://issues.apache.org/jira/browse/IGNITE-19273
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Maksim Timonin
>Assignee: Maksim Timonin
>Priority: Major
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Created] (IGNITE-19272) Uninformative jdbc failure after insertion into TIMESTAMP WITH LOCAL TIMEZONE

2023-04-11 Thread Evgeny Stanilovsky (Jira)
Evgeny Stanilovsky created IGNITE-19272:
---

 Summary: Uninformative jdbc failure after insertion into TIMESTAMP 
WITH LOCAL TIMEZONE
 Key: IGNITE-19272
 URL: https://issues.apache.org/jira/browse/IGNITE-19272
 Project: Ignite
  Issue Type: Bug
  Components: sql
Affects Versions: 3.0.0-beta1
Reporter: Evgeny Stanilovsky



{code:java}
try (Statement stmt = conn.createStatement()) {
stmt.executeUpdate("CREATE TABLE timetest(id INT PRIMARY KEY,"
+ "ts TIMESTAMP, ts_tz TIMESTAMP WITH LOCAL TIME ZONE)");

stmt.executeUpdate("INSERT INTO timetest VALUES "
+ "(3, '2011-01-01 01:01:01', TIMESTAMP WITH LOCAL TIME 
ZONE '2011-01-01 01:01:01')"); // <- ok
stmt.executeUpdate("INSERT INTO timetest VALUES "
+ "(1, '2011-01-01 01:01:01', '2011-01-01 01:01:01')"); // 
<- failed

}
{code}

failed with no reason why:

{noformat}
java.sql.SQLException: Exception while executing query [query=INSERT INTO 
timetest VALUES (3, '2011-01-01 01:01:01', '2011-01-01 01:01:01')]. Error 
message:IGN-CMN-65535 TraceId:ba72bbc8-a0e3-414b-a520-6eed739b3f45 Remote query 
execution

at 
org.apache.ignite.internal.jdbc.proto.IgniteQueryErrorCode.createJdbcSqlException(IgniteQueryErrorCode.java:57)
at 
org.apache.ignite.internal.jdbc.JdbcStatement.execute0(JdbcStatement.java:148)
at 
org.apache.ignite.internal.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:177)
{noformat}





--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-19222) .NET: Add IgniteClientConfiguration.EnableClusterDiscovery

2023-04-11 Thread Igor Sapego (Jira)


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

Igor Sapego commented on IGNITE-19222:
--

Looks good to me.

> .NET: Add IgniteClientConfiguration.EnableClusterDiscovery
> --
>
> Key: IGNITE-19222
> URL: https://issues.apache.org/jira/browse/IGNITE-19222
> Project: Ignite
>  Issue Type: Improvement
>  Components: platforms, thin client
>Affects Versions: 2.14
>Reporter: Pavel Tupitsyn
>Assignee: Pavel Tupitsyn
>Priority: Major
>  Labels: .NET
> Fix For: 2.15
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> Cluster discovery is always enabled currently, which can be undesirable in 
> some use cases. Add a config property to disable discovery.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19251) ODBC 3.0 Enhancements

2023-04-11 Thread Igor Sapego (Jira)


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

Igor Sapego updated IGNITE-19251:
-
Epic Name: ODBC 3.0 Enhancements  (was: ODBC 3.0 Enchantments)

> ODBC 3.0 Enhancements
> -
>
> Key: IGNITE-19251
> URL: https://issues.apache.org/jira/browse/IGNITE-19251
> Project: Ignite
>  Issue Type: Epic
>  Components: odbc
>Reporter: Igor Sapego
>Assignee: Igor Sapego
>Priority: Major
>  Labels: ignite-3
>
> Enchantments for the Ignite 3 ODBC driver



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19251) ODBC 3.0 Enhancements

2023-04-11 Thread Igor Sapego (Jira)


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

Igor Sapego updated IGNITE-19251:
-
Summary: ODBC 3.0 Enhancements  (was: ODBC 3.0 Enchantments)

> ODBC 3.0 Enhancements
> -
>
> Key: IGNITE-19251
> URL: https://issues.apache.org/jira/browse/IGNITE-19251
> Project: Ignite
>  Issue Type: Epic
>  Components: odbc
>Reporter: Igor Sapego
>Assignee: Igor Sapego
>Priority: Major
>  Labels: ignite-3
>
> Enchantments for the Ignite 3 ODBC driver



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19261) Replace parser tests for create/alter zones query by the tests for ddl converter

2023-04-11 Thread Vyacheslav Koptilin (Jira)


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

Vyacheslav Koptilin updated IGNITE-19261:
-
Labels: ignite-3  (was: )

> Replace parser tests for create/alter zones query by the tests for ddl 
> converter
> 
>
> Key: IGNITE-19261
> URL: https://issues.apache.org/jira/browse/IGNITE-19261
> Project: Ignite
>  Issue Type: Task
>Reporter: Kirill Gusakov
>Priority: Major
>  Labels: ignite-3
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19251) ODBC 3.0 Enchantments

2023-04-11 Thread Vyacheslav Koptilin (Jira)


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

Vyacheslav Koptilin updated IGNITE-19251:
-
Labels: ignite-3  (was: )

> ODBC 3.0 Enchantments
> -
>
> Key: IGNITE-19251
> URL: https://issues.apache.org/jira/browse/IGNITE-19251
> Project: Ignite
>  Issue Type: Epic
>  Components: odbc
>Reporter: Igor Sapego
>Assignee: Igor Sapego
>Priority: Major
>  Labels: ignite-3
>
> Enchantments for the Ignite 3 ODBC driver



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19250) ODBC 3.0 Metainformation

2023-04-11 Thread Vyacheslav Koptilin (Jira)


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

Vyacheslav Koptilin updated IGNITE-19250:
-
Labels: ignite-3  (was: )

> ODBC 3.0 Metainformation
> 
>
> Key: IGNITE-19250
> URL: https://issues.apache.org/jira/browse/IGNITE-19250
> Project: Ignite
>  Issue Type: Epic
>  Components: odbc
>Reporter: Igor Sapego
>Priority: Major
>  Labels: ignite-3
>
> ODBC features that related to metadata providing and handling.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19182) Fix NPE on building indexes

2023-04-11 Thread Vyacheslav Koptilin (Jira)


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

Vyacheslav Koptilin updated IGNITE-19182:
-
Labels: ignite-3  (was: ignite,)

> Fix NPE on building indexes
> ---
>
> Key: IGNITE-19182
> URL: https://issues.apache.org/jira/browse/IGNITE-19182
> Project: Ignite
>  Issue Type: Bug
>Reporter: Kirill Tkalenko
>Assignee: Kirill Tkalenko
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> After the implementation of index building, fluky tests appeared:
> * 
> *org.apache.ignite.internal.runner.app.ItDataSchemaSyncTest#checkSchemasCorrectUpdate*
> Stack traces of errors:
> {noformat}
> java.util.concurrent.CompletionException: java.lang.NullPointerException: 
> Cannot invoke "java.util.List.isEmpty()" because "batch" is null
>   at 
> java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
>   at 
> java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
>   at 
> java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1159)
>   at 
> java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482)
>   at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>   at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>   at java.base/java.lang.Thread.run(Thread.java:833)
> Caused by: java.lang.NullPointerException: Cannot invoke 
> "java.util.List.isEmpty()" because "batch" is null
>   at 
> org.apache.ignite.internal.index.IndexBuilder$BuildIndexTask.getNextRowIdForNextBatch(IndexBuilder.java:250)
>   at 
> org.apache.ignite.internal.index.IndexBuilder$BuildIndexTask.lambda$run$1(IndexBuilder.java:165)
>   at 
> java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150)
>   ... 4 more
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19271) Persist revision-safeTime mapping in meta-storage

2023-04-11 Thread Ivan Bessonov (Jira)


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

Ivan Bessonov updated IGNITE-19271:
---
Ignite Flags:   (was: Docs Required,Release Notes Required)

> Persist revision-safeTime mapping in meta-storage
> -
>
> Key: IGNITE-19271
> URL: https://issues.apache.org/jira/browse/IGNITE-19271
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Ivan Bessonov
>Priority: Major
>  Labels: ignite-3
>
> IEP-98 states:
> {code:java}
> When creating a message M telling the cluster about a schema update 
> activation moment, choose the message timestamp Tm (moving safeTime forward) 
> equal to Now, but assign Tu (activation moment) contained in that M to be 
> Tm+DD {code}
> This is hard to achieve.
> h3. Problem
> We need {{{}Tu==Tm+DD{}}}. Right now, with what we have in IGNITE-19028, it's 
> not straightforward. This is because we have too many actors:
>  * There's a {_}client{_}, that chooses Tu, because it's the only actor that 
> can affect message content.
>  * There's a meta-storage {_}lease-holder{_}, or {_}leader{_}, that chooses 
> Tm.
>  * There's everybody else, who expect a correspondence between Tu and Tm.
> First two actors are important, because they have independent clocks, but 
> must coordinate the same event. This is impossible with described protocol.
> h3. Discussion
> Let's consider these two solutions:
>  # Client generates Tm.
>  # Meta-storage generates Tu.
> Option 1 is out of question, there must be only a single node at any given 
> moment in time, that's responsible for the linear order of time in messages.
> What about option 2? Since meta-storage doesn't know anything about commands 
> semantics, it can't really generate any data. So this solution doesn't work 
> either.
> h3. Solution
> Combined solution could be the following:
>  * Client sends DD as part of the command (this is not a constant, user _can_ 
> configure it, if they really feel like doing it)
>  * Meta-storage generates {{Tm}}
>  * Every node, upon receiving the update, calculates {{Tu}}
> This could work, if nodes would have never been restarted. There's one 
> problem that needs to be solved: recovering the values of {{Tm}} from the 
> (old) data upon node restart.
> This can be achieved by persisting safeTime along with revision as a part of 
> metadata, that can be retrieved back through the meta-storage service API.
> In other words:
> 1. Client sends
> {code:java}
> schema.latest   = 5
> schema.5.data   = ...
> schema.5.dd = 30s{code}
> 2. Lease-holder adds meta-data to the command:
> {code:java}
> safeTime = 10:10
> {code}
> 3. Meta-storage listener writes the data:
> {code:java}
> revision = 33
>     schema.latest = 5
> schema.5.data = ...
> schema.5.dd   = 30s
> revision.33.safeTime = 10:10:00{code}
>  
> How can you read {{{}Tu{}}}:
>  * read "{{{}schema.5.dd"{}}};
>  * read its revision, it's 33;
>  * read a timestamp of revision 33 via specialized API;
>  * add two values together.
> h3. Implications and restrictions
> There's a cleanup process in the meta-storage. It will eventually remove any 
> "revision.x.safeTime" values, because corresponding revision became obsolete.
> But, we should somehow preserve timestamps of revisions that are used y 
> schemas. Such behavior can be achieved, if components can reserve a revision, 
> and meta-storage can't compact it unless the reservation has been revoked.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19271) Persist revision-safeTime mapping in meta-storage

2023-04-11 Thread Ivan Bessonov (Jira)


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

Ivan Bessonov updated IGNITE-19271:
---
Description: 
IEP-98 states:
{code:java}
When creating a message M telling the cluster about a schema update activation 
moment, choose the message timestamp Tm (moving safeTime forward) equal to Now, 
but assign Tu (activation moment) contained in that M to be Tm+DD {code}
This is hard to achieve.
h3. Problem

We need {{{}Tu==Tm+DD{}}}. Right now, with what we have in IGNITE-19028, it's 
not straightforward. This is because we have too many actors:
 * There's a {_}client{_}, that chooses Tu, because it's the only actor that 
can affect message content.
 * There's a meta-storage {_}lease-holder{_}, or {_}leader{_}, that chooses Tm.
 * There's everybody else, who expect a correspondence between Tu and Tm.

First two actors are important, because they have independent clocks, but must 
coordinate the same event. This is impossible with described protocol.
h3. Discussion

Let's consider these two solutions:
 # Client generates Tm.
 # Meta-storage generates Tu.

Option 1 is out of question, there must be only a single node at any given 
moment in time, that's responsible for the linear order of time in messages.

What about option 2? Since meta-storage doesn't know anything about commands 
semantics, it can't really generate any data. So this solution doesn't work 
either.
h3. Solution

Combined solution could be the following:
 * Client sends DD as part of the command (this is not a constant, user _can_ 
configure it, if they really feel like doing it)
 * Meta-storage generates {{Tm}}
 * Every node, upon receiving the update, calculates {{Tu}}

This could work, if nodes would have never been restarted. There's one problem 
that needs to be solved: recovering the values of {{Tm}} from the (old) data 
upon node restart.

This can be achieved by persisting safeTime along with revision as a part of 
metadata, that can be retrieved back through the meta-storage service API.

In other words:

1. Client sends
{code:java}
schema.latest   = 5
schema.5.data   = ...
schema.5.dd = 30s{code}
2. Lease-holder adds meta-data to the command:
{code:java}
safeTime = 10:10
{code}
3. Meta-storage listener writes the data:
{code:java}
revision = 33
    schema.latest = 5
schema.5.data = ...
schema.5.dd   = 30s

revision.33.safeTime = 10:10:00{code}
 

How can you read {{{}Tu{}}}:
 * read "{{{}schema.5.dd"{}}};
 * read its revision, it's 33;
 * read a timestamp of revision 33 via specialized API;
 * add two values together.

h3. Implications and restrictions

There's a cleanup process in the meta-storage. It will eventually remove any 
"revision.x.safeTime" values, because corresponding revision became obsolete.

But, we should somehow preserve timestamps of revisions that are used y 
schemas. Such behavior can be achieved, if components can reserve a revision, 
and meta-storage can't compact it unless the reservation has been revoked.

  was:
IEP-98 states:
{code:java}
When creating a message M telling the cluster about a schema update activation 
moment, choose the message timestamp Tm (moving safeTime forward) equal to Now, 
but assign Tu (activation moment) contained in that M to be Tm+DD {code}
This is hard to achieve.
h3. Problem

We need {{{}Tu==Tm+DD{}}}. Right now, with what we have in IGNITE-19028, it's 
not straightforward. This is because we have too many actors:
 * There's a {_}client{_}, that chooses Tu, because it's the only actor that 
can affect message content.
 * There's a meta-storage {_}lease-holder{_}, or {_}leader{_}, that chooses Tm.
 * There's everybody else, who expect a correspondence between Tu and Tm.

First two actors are important, because they have independent clocks, but must 
coordinate the same event. This is impossible with described protocol.
h3. Discussion

Let's consider these two solutions:
 # Client generates Tm.
 # Meta-storage generates Tu.

Option 1 is out of question, there must be only a single node at any given 
moment in time, that's responsible for the linear order of time in messages.

What about option 2? Since meta-storage doesn't know anything about commands 
semantics, it can't really generate any data. So this solution doesn't work 
either.

 


> Persist revision-safeTime mapping in meta-storage
> -
>
> Key: IGNITE-19271
> URL: https://issues.apache.org/jira/browse/IGNITE-19271
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Ivan Bessonov
>Priority: Major
>  Labels: ignite-3
>
> IEP-98 states:
> {code:java}
> When creating a message M telling the cluster about a schema update 
> activation moment, choose the message timestamp Tm (moving safeTime forward) 
> equal to Now, but assign Tu (activation moment) contained in 

[jira] [Resolved] (IGNITE-18274) Exception on modulus operator in SQL

2023-04-11 Thread Yury Gerzhedovich (Jira)


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

Yury Gerzhedovich resolved IGNITE-18274.

Fix Version/s: (was: 3.0.0-beta2)
   Resolution: Cannot Reproduce

Seems after upgrade calcite version the bug disappeared

> Exception on modulus operator in SQL
> 
>
> Key: IGNITE-18274
> URL: https://issues.apache.org/jira/browse/IGNITE-18274
> Project: Ignite
>  Issue Type: Bug
>  Components: sql
>Reporter: Pavel Tupitsyn
>Priority: Major
>  Labels: calcite, calcite2-required, calcite3-required, ignite-3
>
> *Query*
> {code}
> select key % 2 from TBL_DOUBLE
> {code}
> *Result*
> {code}
> java.lang.AssertionError: Conversion to relational algebra failed to preserve 
> datatypes:
> validated type:
> RecordType(INTEGER NOT NULL KEY % 2) NOT NULL
> converted type:
> RecordType(DECIMAL(25, 15) NOT NULL KEY % 2) NOT NULL
> rel:
> LogicalProject(KEY % 2=[MOD(CAST($0):DECIMAL(30, 15) NOT NULL, 2)])
>   IgniteLogicalTableScan(table=[[PUBLIC, TBL_DOUBLE]])
>   at 
> org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:492)
>   at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:607)
>   at 
> org.apache.ignite.internal.sql.engine.prepare.IgnitePlanner.rel(IgnitePlanner.java:222)
>   at 
> org.apache.ignite.internal.sql.engine.prepare.PlannerHelper.optimize(PlannerHelper.java:63)
>   at 
> org.apache.ignite.internal.sql.engine.prepare.PrepareServiceImpl.lambda$prepareQuery$1(PrepareServiceImpl.java:231)
>   at 
> java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700)
>   at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>   at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>   at java.base/java.lang.Thread.run(Thread.java:829)
> {code}
> Note that some simple queries like "select 1 % 2" work.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-18899) Thin 3.0: Refactor ClientTuple to wrap BinaryTuple similar to MutableRowTupleAdapter

2023-04-11 Thread Pavel Tupitsyn (Jira)


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

Pavel Tupitsyn commented on IGNITE-18899:
-

Merged to main: 708dc99bfea060fe8887df5e1e9bad7e192a98f8

> Thin 3.0: Refactor ClientTuple to wrap BinaryTuple similar to 
> MutableRowTupleAdapter
> 
>
> Key: IGNITE-18899
> URL: https://issues.apache.org/jira/browse/IGNITE-18899
> Project: Ignite
>  Issue Type: Improvement
>  Components: thin client
>Affects Versions: 3.0.0-beta1
>Reporter: Pavel Tupitsyn
>Assignee: Pavel Tupitsyn
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>  Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> * Client protocol uses *BinaryTuple* to exchange data (IGNITE-17297)
> * When reading data from server, currently we unpack all elements of the 
> incoming *BinaryTuple* into *ClientTuple*
> This is extra work and extra allocations. Instead, wrap the incoming 
> *BinaryTuple* like *MutableRowTupleAdapter* does.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Assigned] (IGNITE-19222) .NET: Add IgniteClientConfiguration.EnableClusterDiscovery

2023-04-11 Thread Pavel Tupitsyn (Jira)


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

Pavel Tupitsyn reassigned IGNITE-19222:
---

Assignee: Pavel Tupitsyn

> .NET: Add IgniteClientConfiguration.EnableClusterDiscovery
> --
>
> Key: IGNITE-19222
> URL: https://issues.apache.org/jira/browse/IGNITE-19222
> Project: Ignite
>  Issue Type: Improvement
>  Components: platforms, thin client
>Affects Versions: 2.14
>Reporter: Pavel Tupitsyn
>Assignee: Pavel Tupitsyn
>Priority: Major
>  Labels: .NET
> Fix For: 2.15
>
>
> Cluster discovery is always enabled currently, which can be undesirable in 
> some use cases. Add a config property to disable discovery.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19271) Persist revision-safeTime mapping in meta-storage

2023-04-11 Thread Ivan Bessonov (Jira)


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

Ivan Bessonov updated IGNITE-19271:
---
Description: 
IEP-98 states:
{code:java}
When creating a message M telling the cluster about a schema update activation 
moment, choose the message timestamp Tm (moving safeTime forward) equal to Now, 
but assign Tu (activation moment) contained in that M to be Tm+DD {code}
This is hard to achieve.
h3. Problem

We need {{{}Tu==Tm+DD{}}}. Right now, with what we have in IGNITE-19028, it's 
not straightforward. This is because we have too many actors:
 * There's a {_}client{_}, that chooses Tu, because it's the only actor that 
can affect message content.
 * There's a meta-storage {_}lease-holder{_}, or {_}leader{_}, that chooses Tm.
 * There's everybody else, who expect a correspondence between Tu and Tm.

First two actors are important, because they have independent clocks, but must 
coordinate the same event. This is impossible with described protocol.
h3. Discussion

Let's consider these two solutions:
 # Client generates Tm.
 # Meta-storage generates Tu.

Option 1 is out of question, there must be only a single node at any given 
moment in time, that's responsible for the linear order of time in messages.

What about option 2? Since meta-storage doesn't know anything about commands 
semantics, it can't really generate any data. So this solution doesn't work 
either.

 

  was:
IEP-98 states:
{code:java}
When creating a message M telling the cluster about a schema update activation 
moment, choose the message timestamp Tm (moving safeTime forward) equal to Now, 
but assign Tu (activation moment) contained in that M to be Tm+DD {code}
This is hard to achieve.

 


> Persist revision-safeTime mapping in meta-storage
> -
>
> Key: IGNITE-19271
> URL: https://issues.apache.org/jira/browse/IGNITE-19271
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Ivan Bessonov
>Priority: Major
>  Labels: ignite-3
>
> IEP-98 states:
> {code:java}
> When creating a message M telling the cluster about a schema update 
> activation moment, choose the message timestamp Tm (moving safeTime forward) 
> equal to Now, but assign Tu (activation moment) contained in that M to be 
> Tm+DD {code}
> This is hard to achieve.
> h3. Problem
> We need {{{}Tu==Tm+DD{}}}. Right now, with what we have in IGNITE-19028, it's 
> not straightforward. This is because we have too many actors:
>  * There's a {_}client{_}, that chooses Tu, because it's the only actor that 
> can affect message content.
>  * There's a meta-storage {_}lease-holder{_}, or {_}leader{_}, that chooses 
> Tm.
>  * There's everybody else, who expect a correspondence between Tu and Tm.
> First two actors are important, because they have independent clocks, but 
> must coordinate the same event. This is impossible with described protocol.
> h3. Discussion
> Let's consider these two solutions:
>  # Client generates Tm.
>  # Meta-storage generates Tu.
> Option 1 is out of question, there must be only a single node at any given 
> moment in time, that's responsible for the linear order of time in messages.
> What about option 2? Since meta-storage doesn't know anything about commands 
> semantics, it can't really generate any data. So this solution doesn't work 
> either.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Created] (IGNITE-19271) Persist revision-safeTime mapping in meta-storage

2023-04-11 Thread Ivan Bessonov (Jira)
Ivan Bessonov created IGNITE-19271:
--

 Summary: Persist revision-safeTime mapping in meta-storage
 Key: IGNITE-19271
 URL: https://issues.apache.org/jira/browse/IGNITE-19271
 Project: Ignite
  Issue Type: Improvement
Reporter: Ivan Bessonov


IEP-98 states:
{code:java}
When creating a message M telling the cluster about a schema update activation 
moment, choose the message timestamp Tm (moving safeTime forward) equal to Now, 
but assign Tu (activation moment) contained in that M to be Tm+DD {code}
This is hard to achieve.

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-19267) Implement local Low Watermark propagation

2023-04-11 Thread Ivan Bessonov (Jira)


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

Ivan Bessonov updated IGNITE-19267:
---
Description: 
According to the IEP-91, we can delete old data, once it becomes older than the 
certain threshold. At the moment, we can consider this threshold to be shared 
between different tables, but be unique on individual nodes. It's called a Low 
Watermark (LW).

The way the value is chosen is the following:
 * There's the {_}data availability time{_}, that can be configured by the 
user. This is a cluster configuration. It has a value of, for example, 45 
minutes. Valid values - {{{}[0, +INF){}}}.
 * There's a {_}GC frequency{_}, that's also a cluster configuration. For 
example, 5 minuter. Range of valid values should be more strict.
 * Last LW value is persisted in Vault.
 * Every 5 minutes, we assign a new "lwCandidate{{{} = now() - 45min - 
maxClockSkew"{}}}.
 ** If there are no running transactions with timestamp below 
{{{}lwCandidate{}}}, we promote the candidate into a real LW value.
 ** Otherwise, we trigger GC with timestamp of the transaction with the oldest 
timestamp (and promoting LW to that timestamp), and raising the bar every time* 
that transaction is completed. Eventually, we will reach the point where there 
are no running transactions with timestamp below {{{}lwCandidate{}}}.
 * it's not necessary to do it every time. But, once the timestamp of the 
oldest RO transaction is above or equal to {{{}lwCandidate{}}}, we must 
guarantee its promotion. Everything else is optimization.
 * If there's a new RO transaction with timestamp below {{{}lwCandidate{}}}, we 
fail it.

Promoted LW value cannot become smaller no matter what. All data below LW is 
considered to be invalid, maybe broken and completely invisible to user.

  was:
According to the IEP-91, we can delete old data, once it becomes older than the 
certain threshold. At the moment, we can consider this threshold to be shared 
between different tables, but be unique on individual nodes. It's called a Low 
Watermark (LW).

The way the value is chosen is the following:
 * There's the {_}data availability time{_}, that can be configured by the 
user. This is a cluster configuration. It has a value of, for example, 45 
minutes. Valid values - {{{}[0, +INF){}}}.
 * There's a {_}GC frequency{_}, that's also a cluster configuration. For 
example, 5 minuter. Range of valid values should be more strict.
 * Last LW value is persisted in Vault.
 * Every 5 minutes, we assign a new "lwCandidate{{{} = now() - 45min - 
maxClockSkew"{}}}.
 ** If there are no running transactions with timestamp below 
{{{}lwCandidate{}}}, we promote the candidate into a real LW value.
 ** Otherwise, we trigger GC with timestamp of the transaction with the oldest 
timestamp (and promoting LW to that timestamp), and raising the bar every time* 
that transaction is completed. Eventually, we will reach the point where there 
are running transactions with timestamp below {{{}lwCandidate{}}}.
* it's not necessary to do it every time. But, once the timestamp of the oldest 
RO transaction is above or equal to {{{}lwCandidate{}}}, we must guarantee its 
promotion. Everything else is optimization.
 * If there's a new RO transaction with timestamp below {{{}lwCandidate{}}}, we 
fail it.

Promoted LW value cannot become smaller no matter what. All data below LW is 
considered to be invalid, maybe broken and completely invisible to user.


> Implement local Low Watermark propagation
> -
>
> Key: IGNITE-19267
> URL: https://issues.apache.org/jira/browse/IGNITE-19267
> Project: Ignite
>  Issue Type: Improvement
>Reporter: Ivan Bessonov
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>
> According to the IEP-91, we can delete old data, once it becomes older than 
> the certain threshold. At the moment, we can consider this threshold to be 
> shared between different tables, but be unique on individual nodes. It's 
> called a Low Watermark (LW).
> The way the value is chosen is the following:
>  * There's the {_}data availability time{_}, that can be configured by the 
> user. This is a cluster configuration. It has a value of, for example, 45 
> minutes. Valid values - {{{}[0, +INF){}}}.
>  * There's a {_}GC frequency{_}, that's also a cluster configuration. For 
> example, 5 minuter. Range of valid values should be more strict.
>  * Last LW value is persisted in Vault.
>  * Every 5 minutes, we assign a new "lwCandidate{{{} = now() - 45min - 
> maxClockSkew"{}}}.
>  ** If there are no running transactions with timestamp below 
> {{{}lwCandidate{}}}, we promote the candidate into a real LW value.
>  ** Otherwise, we trigger GC with timestamp of the transaction with the 
> oldest timestamp (and promoting LW to that 

[jira] [Commented] (IGNITE-19264) Simplify C++ Binary Tuple code

2023-04-11 Thread Igor Sapego (Jira)


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

Igor Sapego commented on IGNITE-19264:
--

Looks good to me.

> Simplify C++ Binary Tuple code
> --
>
> Key: IGNITE-19264
> URL: https://issues.apache.org/jira/browse/IGNITE-19264
> Project: Ignite
>  Issue Type: Improvement
>  Components: platforms
>Affects Versions: 3.0.0-beta2
>Reporter: Aleksey Demakov
>Assignee: Aleksey Demakov
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Some binary tuple code turned out to be useless for the C++ client lib. It is 
> better to be removed to simplify maintenance.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-19264) Simplify C++ Binary Tuple code

2023-04-11 Thread Aleksey Demakov (Jira)


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

Aleksey Demakov commented on IGNITE-19264:
--

{color:#1d1c1d} 
{color}{color:#1d1c1d}[@isapego|https://gridgain.slack.com/team/U2WS56DB2]{color},
 please review my ticket.

> Simplify C++ Binary Tuple code
> --
>
> Key: IGNITE-19264
> URL: https://issues.apache.org/jira/browse/IGNITE-19264
> Project: Ignite
>  Issue Type: Improvement
>  Components: platforms
>Affects Versions: 3.0.0-beta2
>Reporter: Aleksey Demakov
>Assignee: Aleksey Demakov
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> Some binary tuple code turned out to be useless for the C++ client lib. It is 
> better to be removed to simplify maintenance.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-18899) Thin 3.0: Refactor ClientTuple to wrap BinaryTuple similar to MutableRowTupleAdapter

2023-04-11 Thread Igor Sapego (Jira)


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

Igor Sapego commented on IGNITE-18899:
--

Looks good to me.

> Thin 3.0: Refactor ClientTuple to wrap BinaryTuple similar to 
> MutableRowTupleAdapter
> 
>
> Key: IGNITE-18899
> URL: https://issues.apache.org/jira/browse/IGNITE-18899
> Project: Ignite
>  Issue Type: Improvement
>  Components: thin client
>Affects Versions: 3.0.0-beta1
>Reporter: Pavel Tupitsyn
>Assignee: Pavel Tupitsyn
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>  Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> * Client protocol uses *BinaryTuple* to exchange data (IGNITE-17297)
> * When reading data from server, currently we unpack all elements of the 
> incoming *BinaryTuple* into *ClientTuple*
> This is extra work and extra allocations. Instead, wrap the incoming 
> *BinaryTuple* like *MutableRowTupleAdapter* does.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Created] (IGNITE-19270) Thin 3.0: Streamline type codes

2023-04-11 Thread Pavel Tupitsyn (Jira)
Pavel Tupitsyn created IGNITE-19270:
---

 Summary: Thin 3.0: Streamline type codes
 Key: IGNITE-19270
 URL: https://issues.apache.org/jira/browse/IGNITE-19270
 Project: Ignite
  Issue Type: Improvement
  Components: thin client
Affects Versions: 3.0.0-beta1
Reporter: Pavel Tupitsyn
Assignee: Pavel Tupitsyn
 Fix For: 3.0.0-beta2


We have too many different type codes:
* org.apache.ignite.sql.ColumnType
* org.apache.ignite.internal.client.proto.ClientDataType
* org.apache.ignite.internal.client.proto.ClientColumnTypeConverter (uses it's 
own codes)

We can probably replace everything with *org.apache.ignite.sql.ColumnType* and 
use ordinals from there. .NET and C++ tests will protect us from breaking the 
protocol accidentally. And we can write an additional test that explains why 
you can't change ordinals there.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-19185) Fix index destruction after index creation started

2023-04-11 Thread Semyon Danilov (Jira)


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

Semyon Danilov commented on IGNITE-19185:
-

The patch looks awesome to me!

> Fix index destruction after index creation started
> --
>
> Key: IGNITE-19185
> URL: https://issues.apache.org/jira/browse/IGNITE-19185
> Project: Ignite
>  Issue Type: Bug
>Reporter: Kirill Tkalenko
>Assignee: Kirill Tkalenko
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>  Time Spent: 1h 50m
>  Remaining Estimate: 0h
>
> It was found that if the destruction of the index occurs immediately after 
> the start of its creation, then errors occur during its building: 
> *org.apache.ignite.internal.sql.api.ItSqlSynchronousApiTest#ddl*
> {code:java}
> 2023-04-02 13:53:16:882 +0300 [INFO][%issat_n_0%build-index-0][IndexBuilder] 
> Start building the index: [table=TEST, 
> tableId=8370aa11-b3ea-4e00-a546-0776ff12fffa, partitionId=14, index=TEST_IDX, 
> indexId=55e899e3-5404-4409-8570-aad4459c2908]
> 2023-04-02 13:53:16:883 +0300 [INFO][%issat_n_0%build-index-6][IndexBuilder] 
> Start building the index: [table=TEST, 
> tableId=8370aa11-b3ea-4e00-a546-0776ff12fffa, partitionId=8, index=TEST_IDX, 
> indexId=55e899e3-5404-4409-8570-aad4459c2908]
> 2023-04-02 13:53:16:884 +0300 [INFO][vault0][IndexManager] Index dropped 
> [schema=PUBLIC, index=TEST_IDX]
> 2023-04-02 13:53:16:885 +0300 [ERROR][%issat_n_0%build-index-6][IndexBuilder] 
> Index build error: [table=TEST, tableId=8370aa11-b3ea-4e00-a546-0776ff12fffa, 
> partitionId=15, index=TEST_IDX, indexId=55e899e3-5404-4409-8570-aad4459c2908]
> java.util.concurrent.CompletionException: 
> org.apache.ignite.internal.storage.StorageException: IGN-STORAGE-1 
> TraceId:f9741480-3eaf-4c32-8220-66e9a9118d48 Index configuration for 
> "55e899e3-5404-4409-8570-aad4459c2908" could not be found
>   at 
> java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
>   at 
> java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
>   at 
> java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1159)
>   at 
> java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482)
>   at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>   at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>   at java.base/java.lang.Thread.run(Thread.java:833)
> Caused by: org.apache.ignite.internal.storage.StorageException: IGN-STORAGE-1 
> TraceId:f9741480-3eaf-4c32-8220-66e9a9118d48 Index configuration for 
> "55e899e3-5404-4409-8570-aad4459c2908" could not be found
>   at 
> org.apache.ignite.internal.storage.engine.MvTableStorage.getOrCreateIndex(MvTableStorage.java:94)
>   at 
> org.apache.ignite.internal.index.IndexBuilder$BuildIndexTask.collectRowIdBatch(IndexBuilder.java:258)
>   at 
> org.apache.ignite.internal.index.IndexBuilder$BuildIndexTask.lambda$run$1(IndexBuilder.java:164)
>   at 
> java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150)
>   ... 4 more
> 2023-04-02 13:53:16:883 +0300 [INFO][%issat_n_0%build-index-2][IndexBuilder] 
> Start building the index: [table=TEST, 
> tableId=8370aa11-b3ea-4e00-a546-0776ff12fffa, partitionId=1, index=TEST_IDX, 
> indexId=55e899e3-5404-4409-8570-aad4459c2908]
> 2023-04-02 13:53:16:887 +0300 [ERROR][%issat_n_0%build-index-6][IndexBuilder] 
> Index build error: [table=TEST, tableId=8370aa11-b3ea-4e00-a546-0776ff12fffa, 
> partitionId=18, index=TEST_IDX, indexId=55e899e3-5404-4409-8570-aad4459c2908]
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Comment Edited] (IGNITE-18899) Thin 3.0: Refactor ClientTuple to wrap BinaryTuple similar to MutableRowTupleAdapter

2023-04-11 Thread Igor Sapego (Jira)


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

Igor Sapego edited comment on IGNITE-18899 at 4/11/23 9:55 AM:
---

Left a few comments.


was (Author: isapego):
Left few comments.

> Thin 3.0: Refactor ClientTuple to wrap BinaryTuple similar to 
> MutableRowTupleAdapter
> 
>
> Key: IGNITE-18899
> URL: https://issues.apache.org/jira/browse/IGNITE-18899
> Project: Ignite
>  Issue Type: Improvement
>  Components: thin client
>Affects Versions: 3.0.0-beta1
>Reporter: Pavel Tupitsyn
>Assignee: Pavel Tupitsyn
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> * Client protocol uses *BinaryTuple* to exchange data (IGNITE-17297)
> * When reading data from server, currently we unpack all elements of the 
> incoming *BinaryTuple* into *ClientTuple*
> This is extra work and extra allocations. Instead, wrap the incoming 
> *BinaryTuple* like *MutableRowTupleAdapter* does.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-18899) Thin 3.0: Refactor ClientTuple to wrap BinaryTuple similar to MutableRowTupleAdapter

2023-04-11 Thread Igor Sapego (Jira)


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

Igor Sapego commented on IGNITE-18899:
--

Left few comments.

> Thin 3.0: Refactor ClientTuple to wrap BinaryTuple similar to 
> MutableRowTupleAdapter
> 
>
> Key: IGNITE-18899
> URL: https://issues.apache.org/jira/browse/IGNITE-18899
> Project: Ignite
>  Issue Type: Improvement
>  Components: thin client
>Affects Versions: 3.0.0-beta1
>Reporter: Pavel Tupitsyn
>Assignee: Pavel Tupitsyn
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> * Client protocol uses *BinaryTuple* to exchange data (IGNITE-17297)
> * When reading data from server, currently we unpack all elements of the 
> incoming *BinaryTuple* into *ClientTuple*
> This is extra work and extra allocations. Instead, wrap the incoming 
> *BinaryTuple* like *MutableRowTupleAdapter* does.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Assigned] (IGNITE-18871) Sql. ColocatedSortAggregate rule can't use index for grouping.

2023-04-11 Thread Konstantin Orlov (Jira)


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

Konstantin Orlov reassigned IGNITE-18871:
-

Assignee: Konstantin Orlov

> Sql. ColocatedSortAggregate rule can't use index for grouping.
> --
>
> Key: IGNITE-18871
> URL: https://issues.apache.org/jira/browse/IGNITE-18871
> Project: Ignite
>  Issue Type: Improvement
>  Components: sql
>Reporter: Andrey Mashenkov
>Assignee: Konstantin Orlov
>Priority: Major
>  Labels: ignite-3
> Fix For: 3.0.0-beta2
>
>
> Assume there is a table with a composite index on (grp0, grp1) columns.
> ColocatedSortAggregate rule can’t use index for the next query in case of 
> hash distribution:
> {code:java}
> SELECT AVG(val0) FROM test GROUP BY grp1, grp0
> {code}
> However, index is for the query used in case of single distribution.
> Also, index is used for the next query in both cases: single and hash 
> distributions.
> {code:java}
> SELECT AVG(val0) FROM test GROUP BY grp0, grp1
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Created] (IGNITE-19269) Introduce proper local RowId locks

2023-04-11 Thread Ivan Bessonov (Jira)
Ivan Bessonov created IGNITE-19269:
--

 Summary: Introduce proper local RowId locks
 Key: IGNITE-19269
 URL: https://issues.apache.org/jira/browse/IGNITE-19269
 Project: Ignite
  Issue Type: Improvement
Reporter: Ivan Bessonov


Currently, concurrency in MV storages is a bit convoluted. List of issues 
include:
 * Implicit assumption that one does not insert the same RowId concurrently. 
There's a chance that this assumption is already violated. This could lead to 
B+Tree corruptions, for example.
 * Hidden locks, that cause non-trivial bugs like this: 
https://issues.apache.org/jira/browse/IGNITE-19169
 * MvPartitionStorage#scanVersions implementation for B+Tree reads the entire 
chain at once, because we couldn't figure out how to do it properly in 
concurrent environment. This may lead to drastic performance drops in the 
future.
 * GC code is complicated and sub-optimal. We need to implement the same 
approach that's used in Ignite 2.x - read, lock, dequeue, cleanup, unlock*. We 
can also cache part of the queue beforehand, making the process faster. It is 
not possible in current implementation.
 * Maybe something else that I couldn't remember.

h3. Proposed solution

As wise man once said, "{_}Explicit is better than implicit{_}".

I propose having an explicit concurrency model akin Ignite 2.x's. We need to 
introduce 2 new methods to MV partition storage interface.
{code:java}
/**
 * Synchronously locks passed RowId.
 */
void lock(RowId rowId);

/**
 * Tries to synchronously lock passed RowId.
 * Used to implement deadlock prevention.
 */
boolean tryLock(RowId rowId);{code}
These methods should delegate locking to the client, basically exposing the 
{{ReentrantLockByRowId}} API. Expected invariants:
 * Locks can only be allowed inside of the "runConsistently" closure.
 * Unlock is still supposed to happen at the end of "runConsistently", 
automatically. This is predicated by the way RocksDB implementation works 
(batches).
Client must guarantee, that there are no deadlocks, either by sorting the data 
or by using "tryLock".
 * All read operations, except for "scanVersions", may be executed without 
locks.
 * "scanVersions" must have a lock, because it's not atomic. This is not a big 
deal, because the only two usages are:

 ** index cleanup, we already hold a lock
 ** rebalance, we already hold another lock, so adding a new one is not a 
problem
 * "scanVersions" implementation must also be fixed. Maybe we need to add a 
hint, like "loadAllVersions", but it's not required.

This approach, with proper implementation, solves all mentioned problems, 
except for GC.
h3. Changes to GC

As stated before, GC flow must be changed to something like this:
{code:java}
var entry = partition.peek(lw);

if (entry == null) {
return;
}

if (!partition.tryLock(entry.rowId())) {
return; // Must exit closure to avoid deadlocks.
}

if (!partition.dequeue(entry)) {
continue; // Or return. We may or may not exit the closure
  // in this case, both options are valid.
}

cleanupIndexes(entry);

continue;{code}
Right now, all storage implementations have similar construction inside of 
them. All I propose is to move it outside.
h3. Tangent changes

org.apache.ignite.internal.table.distributed.raft.PartitionDataStorage is 
basically a copy of the original, except for a few methods. Maybe copied 
methods should exist in a shared super-interface. It's up to developer to 
decide.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Updated] (IGNITE-17892) Ignite doc: cdcEnabled parameter is in the DataRegionConfiguration

2023-04-11 Thread Aleksey Plekhanov (Jira)


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

Aleksey Plekhanov updated IGNITE-17892:
---
Ignite Flags:   (was: Docs Required,Release Notes Required)

> Ignite doc: cdcEnabled parameter is in the DataRegionConfiguration
> --
>
> Key: IGNITE-17892
> URL: https://issues.apache.org/jira/browse/IGNITE-17892
> Project: Ignite
>  Issue Type: Bug
>  Components: documentation
>Affects Versions: 2.14
>Reporter: YuJue Li
>Assignee: YuJue Li
>Priority: Minor
> Fix For: 2.15
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>
> [https://ignite.apache.org/docs/latest/persistence/change-data-capture|https://ignite.apache.org/docs/latest/persistence/change-data-capture#ignite-node]
> DataStorageConfiguration#cdcEnabled
> should be:
> DataRegionConfiguration#cdcEnabled



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-18260) Ignite Doc: CPP thin client has the continuous query function, which needs to be marked in the overview

2023-04-11 Thread Aleksey Plekhanov (Jira)


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

Aleksey Plekhanov commented on IGNITE-18260:


[~liyuj] looks good to me, merged to master, cherry-picked to 2.15. Thanks for 
the contribution!

> Ignite Doc: CPP thin client has the continuous query function, which needs to 
> be marked in the overview
> ---
>
> Key: IGNITE-18260
> URL: https://issues.apache.org/jira/browse/IGNITE-18260
> Project: Ignite
>  Issue Type: Improvement
>  Components: documentation
>Affects Versions: 2.13
>Reporter: YuJue Li
>Assignee: YuJue Li
>Priority: Trivial
> Fix For: 2.15
>
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-18260) Ignite Doc: CPP thin client has the continuous query function, which needs to be marked in the overview

2023-04-11 Thread YuJue Li (Jira)


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

YuJue Li commented on IGNITE-18260:
---

[~alex_pl] please check again.

> Ignite Doc: CPP thin client has the continuous query function, which needs to 
> be marked in the overview
> ---
>
> Key: IGNITE-18260
> URL: https://issues.apache.org/jira/browse/IGNITE-18260
> Project: Ignite
>  Issue Type: Improvement
>  Components: documentation
>Affects Versions: 2.13
>Reporter: YuJue Li
>Assignee: YuJue Li
>Priority: Trivial
> Fix For: 2.15
>
>  Time Spent: 20m
>  Remaining Estimate: 0h
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Commented] (IGNITE-18260) Ignite Doc: CPP thin client has the continuous query function, which needs to be marked in the overview

2023-04-11 Thread Aleksey Plekhanov (Jira)


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

Aleksey Plekhanov commented on IGNITE-18260:


[~liyuj], can you please fix two more lines in this patch? "Async operations" 
was implemented for java thin client by IGNITE-7623 and "Server discovery" for 
java thin client was implemented by IGNITE-18591. 

> Ignite Doc: CPP thin client has the continuous query function, which needs to 
> be marked in the overview
> ---
>
> Key: IGNITE-18260
> URL: https://issues.apache.org/jira/browse/IGNITE-18260
> Project: Ignite
>  Issue Type: Improvement
>  Components: documentation
>Affects Versions: 2.13
>Reporter: YuJue Li
>Assignee: YuJue Li
>Priority: Trivial
> Fix For: 2.15
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)