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

Aleksandr Polovtsev updated IGNITE-22668:
-----------------------------------------
    Description: 
Originally this issue was discovered, when I was trying to start an Ignite 
cluster with 3 nodes and a table that used a volatile storage profile. By 
filling this table with data, I encountered multiple internal Raft errors 
related to the Meta Storage group.

The problem is that {{StripeAwareLogManager}} manages multiple log storages 
from different Raft groups that were colocated to the same stripe in the 
{{LogManagerDisruptor}}. In my case, some volatile log storages from the table 
were colocated with the persistent log storage from the Meta Storage. However, 
when flushing the buffered data inside {{StripeAwareLogManager}}, we have the 
following code:

{code:java}
// Since the storage is shared, any batcher can flush it.
appendBatchers.iterator().next().commitWriteBatch();
{code}

{{commitWriteBatch}} for volatile storages is a no-op, while for persistent 
storages it writes the data into the DB. If we are unlucky and the 
{{appendBatcher}} for the volatile storage comes first, then the data for the 
persistent storage will not get flushed at all (until the next flush, but it's 
enough to break everything).

  was:
Originally this issue was discovered, when I was trying to start an Ignite 
cluster with 3 nodes and a table that used a volatile storage profile. By 
filling this table with data, I encountered multiple internal Raft errors.

The problem is that  


> StripeAwareLogManager may skip commits to underlying Log Storage
> ----------------------------------------------------------------
>
>                 Key: IGNITE-22668
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22668
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Aleksandr Polovtsev
>            Assignee: Aleksandr Polovtsev
>            Priority: Major
>              Labels: ignite-3
>
> Originally this issue was discovered, when I was trying to start an Ignite 
> cluster with 3 nodes and a table that used a volatile storage profile. By 
> filling this table with data, I encountered multiple internal Raft errors 
> related to the Meta Storage group.
> The problem is that {{StripeAwareLogManager}} manages multiple log storages 
> from different Raft groups that were colocated to the same stripe in the 
> {{LogManagerDisruptor}}. In my case, some volatile log storages from the 
> table were colocated with the persistent log storage from the Meta Storage. 
> However, when flushing the buffered data inside {{StripeAwareLogManager}}, we 
> have the following code:
> {code:java}
> // Since the storage is shared, any batcher can flush it.
> appendBatchers.iterator().next().commitWriteBatch();
> {code}
> {{commitWriteBatch}} for volatile storages is a no-op, while for persistent 
> storages it writes the data into the DB. If we are unlucky and the 
> {{appendBatcher}} for the volatile storage comes first, then the data for the 
> persistent storage will not get flushed at all (until the next flush, but 
> it's enough to break everything).



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

Reply via email to