[
https://issues.apache.org/jira/browse/IGNITE-29227?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Reza Taroosheh updated IGNITE-29227:
------------------------------------
Description:
On an {{ATOMIC}} cache, a {{ContinuousQueryWithTransformer}} whose remote
transformer returns a user class that the key's primary node has not used yet
stops delivering that partition's events to a listener on another node. The
first such update is never delivered, and every later event of the same
partition is held back. Nothing is logged. On a {{TRANSACTIONAL}} cache all
events arrive.
Steps:
# Start two server nodes with a {{PARTITIONED}}, {{ATOMIC}} cache with 1 backup.
# On node 0, register a {{ContinuousQueryWithTransformer}} whose remote
transformer returns an object of a user class (e.g., {{PersonId}}) not used in
the cluster before.
# Put a key whose primary is node 1 three times.
Actual: the listener receives nothing.
Expected: three events.
Registering the result class on the key's primary node before the first update,
with {{ignite.binary().toBinary(...)}} on node 1, avoids the problem.
Registering it on node 0 alone does not. A remote filter annotated with
{{@IgniteAsyncCallback}} that accepts all events also avoids the problem.
According to the reporter, the held events are released only after
{{IGNITE_CONTINUOUS_QUERY_LISTENER_MAX_BUFFER_SIZE}} (10 000) events are
pending, and when several nodes register the same query, some listeners get the
first event twice.
Reproduced on 2.17.0 and 2.18.0 (reported on the dev list:
https://lists.apache.org/thread/x08d7cx1lz08gp9f1k6ldkl1xpvfjz6l), and on
master by a new test.
was:
On an {{ATOMIC}} cache, a {{ContinuousQueryWithTransformer}} whose remote
transformer returns a user class that the key's primary node has not used yet
stops delivering that partition's events to a listener on another node. The
first such update is never delivered, and every later event of the same
partition is held back. Nothing is logged. On a {{TRANSACTIONAL}} cache all
events arrive.
Steps:
# Start two server nodes with a {{PARTITIONED}}, {{ATOMIC}} cache with 1 backup.
# On node 0, register a {{ContinuousQueryWithTransformer}} whose remote
transformer returns an object of a user class (e.g., {{PersonId}}) not used in
the cluster before.
# Put a key whose primary is node 1 three times.
Actual: the listener receives nothing.
Expected: three events.
Registering the result class on the key's primary node before the first update,
with {{ignite.binary().toBinary(...)}} on node 1, avoids the problem.
Registering it on node 0 alone does not.
According to the reporter, the held events are released only after
{{IGNITE_CONTINUOUS_QUERY_LISTENER_MAX_BUFFER_SIZE}} (10 000) events are
pending, and when several nodes register the same query, some listeners get the
first event twice.
Reproduced on 2.17.0 and 2.18.0 (reported on the dev list:
https://lists.apache.org/thread/x08d7cx1lz08gp9f1k6ldkl1xpvfjz6l), and on
master by a new test.
> ContinuousQueryWithTransformer on an ATOMIC cache holds a partition's events
> if the transformer's result class is not registered on the primary node
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-29227
> URL: https://issues.apache.org/jira/browse/IGNITE-29227
> Project: Ignite
> Issue Type: Bug
> Reporter: Reza Taroosheh
> Assignee: Reza Taroosheh
> Priority: Major
> Time Spent: 20m
> Remaining Estimate: 0h
>
> On an {{ATOMIC}} cache, a {{ContinuousQueryWithTransformer}} whose remote
> transformer returns a user class that the key's primary node has not used yet
> stops delivering that partition's events to a listener on another node. The
> first such update is never delivered, and every later event of the same
> partition is held back. Nothing is logged. On a {{TRANSACTIONAL}} cache all
> events arrive.
> Steps:
> # Start two server nodes with a {{PARTITIONED}}, {{ATOMIC}} cache with 1
> backup.
> # On node 0, register a {{ContinuousQueryWithTransformer}} whose remote
> transformer returns an object of a user class (e.g., {{PersonId}}) not used
> in the cluster before.
> # Put a key whose primary is node 1 three times.
> Actual: the listener receives nothing.
> Expected: three events.
> Registering the result class on the key's primary node before the first
> update, with {{ignite.binary().toBinary(...)}} on node 1, avoids the problem.
> Registering it on node 0 alone does not. A remote filter annotated with
> {{@IgniteAsyncCallback}} that accepts all events also avoids the problem.
> According to the reporter, the held events are released only after
> {{IGNITE_CONTINUOUS_QUERY_LISTENER_MAX_BUFFER_SIZE}} (10 000) events are
> pending, and when several nodes register the same query, some listeners get
> the first event twice.
> Reproduced on 2.17.0 and 2.18.0 (reported on the dev list:
> https://lists.apache.org/thread/x08d7cx1lz08gp9f1k6ldkl1xpvfjz6l), and on
> master by a new test.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)