Hi Maksim,

Thanks. We have tested the workaround and it mitigates the issue. 😊

Regards,
Marcus

From: [gmail.com] Maksim Timonin <timonin.ma...@gmail.com>
Sent: Thursday, June 10, 2021 5:52 PM
To: user@ignite.apache.org
Subject: Re: Ignite crashed with CorruptedTreeException

Hi, Marcus! I've found a bug. It was already fixed within this ticket 
https://issues.apache.org/jira/browse/IGNITE-14451<https://urldefense.com/v3/__https:/issues.apache.org/jira/browse/IGNITE-14451__;!!Jkho33Y!2lE2mKO1rPq_tr8J_acm_2Mv5oZTq6xaapgVJ-IHWfrlVJ4S-U7_ZtNwyLi9IA$>.
 So it will be available in Ignite 2.11.

Reason is that you declare fields in your table in order (viewId, status) while 
PK has order (status, viewId). So, change the order in the table and it will be 
fine. This bug affects only Primary Key indexes, so it's safe to declare fields 
in different order in secondary indexes.

On Thu, Jun 10, 2021 at 10:58 AM Maksim Timonin 
<timonin.ma...@gmail.com<mailto:timonin.ma...@gmail.com>> wrote:
hi, Marcus!

Thank you for the reproducer, I've succeed in reproducing it. Create a ticket 
for that 
https://issues.apache.org/jira/browse/IGNITE-14869<https://urldefense.com/v3/__https:/issues.apache.org/jira/browse/IGNITE-14869__;!!Jkho33Y!2lE2mKO1rPq_tr8J_acm_2Mv5oZTq6xaapgVJ-IHWfrlVJ4S-U7_ZtN-vi96WA$>

I will return to you with a workaround, after finding a reason.

On Thu, Jun 10, 2021 at 3:18 AM Lo, Marcus 
<marcus...@citi.com<mailto:marcus...@citi.com>> wrote:
Hi Ivan, Maksim,

Here is the reproducer:

import org.apache.ignite.Ignition;
import org.apache.ignite.binary.BinaryObject;
import org.apache.ignite.binary.BinaryObjectBuilder;
import org.apache.ignite.cache.QueryEntity;
import org.apache.ignite.client.ClientCache;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.configuration.BinaryConfiguration;
import org.apache.ignite.configuration.ClientConfiguration;
import org.junit.jupiter.api.Test;

import java.sql.Timestamp;
import java.time.Instant;
import java.util.*;
import java.util.stream.IntStream;

import static java.util.stream.Collectors.toList;

public class Reproducer {

    @Test
    public void reproduce() throws InterruptedException {
        ClientConfiguration config = constructIgniteThinClientConfig();
        IgniteClient ignite = Ignition.startClient(config);

        List<UUID> uuids = IntStream.range(0, 200).mapToObj((i) -> 
UUID.randomUUID()).collect(toList());

        while (true) {
            upsertLimitViewData(ignite, uuids);
            Thread.sleep(1000);
        }
    }

    private void upsertLimitViewData(IgniteClient ignite, List<UUID> uuids) {
        System.out.println("[" + Instant.now() + "] upserting data... " + 
Thread.currentThread().getName());

        ClientCache<Object, Object> cache = 
ignite.cache("LimitViewStatusCache").withKeepBinary();
        QueryEntity queryEntity = 
cache.getConfiguration().getQueryEntities()[0];
        BinaryObjectBuilder keyBuilder = 
ignite.binary().builder(queryEntity.getKeyType());
        BinaryObjectBuilder valueBuilder = 
ignite.binary().builder(queryEntity.getValueType());
        HashMap<Object, Object> valueMap = new HashMap<>();

        for (int i = 0; i < 200; i++) {
            BinaryObject key = keyBuilder
                    .setField("viewId", uuids.get(i))
                    .setField("status", "moo")
                    .build();

            BinaryObject value = valueBuilder
                    .setField("batchId", new Random().nextInt())
                    .setField("instance", Integer.toString(new 
Random().nextInt()))
                    .setField("nodes", Integer.toString(new Random().nextInt()))
                    .setField("eqtgContext", Integer.toString(new 
Random().nextInt()))
                    .setField("lastUpdateTime", Timestamp.from(Instant.now()))
                    .build();

            valueMap.put(key, value);
        }

        cache.putAll(valueMap);
    }

    private ClientConfiguration constructIgniteThinClientConfig() {
        return
                new ClientConfiguration()
                        .setAddresses("xxx:10800")
                        .setPartitionAwarenessEnabled(false)
                        .setBinaryConfiguration(new 
BinaryConfiguration().setCompactFooter(false))
                        .setUserName("xxx")
                        .setUserPassword("xxx");
    }
}


Regards,
Marcus

-----Original Message-----
From: [External] Maksim Timonin 
<timonin.ma...@gmail.com<mailto:timonin.ma...@gmail.com>>
Sent: Thursday, June 10, 2021 12:31 AM
To: user@ignite.apache.org<mailto:user@ignite.apache.org>
Subject: Re: Ignite crashed with CorruptedTreeException

Hi Marcus!

Could you please provide a complete code that inserts data (either it is SQL, 
or cache put, which types do you use, etc.). I've tried to reproduce your case 
but failed.

Thanks a lot!



--
Sent from: 
https://urldefense.com/v3/__http://apache-ignite-users.70518.x6.nabble.com/__;!!Jkho33Y!2v--HF_tnHWeR_0YefFDx-NcnoY3hkO-9G94IAXG23N6qzB_qz-rSYtuciav3A$<https://urldefense.com/v3/__http:/apache-ignite-users.70518.x6.nabble.com/__;!!Jkho33Y!2v--HF_tnHWeR_0YefFDx-NcnoY3hkO-9G94IAXG23N6qzB_qz-rSYtuciav3A$>

Reply via email to