ignite-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Harshil garg <harshilbi...@gmail.com>
Subject Ignite Cache Data Not Available in Other Server Nodes
Date Mon, 11 Dec 2017 14:22:25 GMT
I am trying to access ignite cache data from other nodes , I am able to
access the ignite cache but cache is completely empty and hence throwing
nullpointerException when I am trying to do cache.get(key).

I have tried using both REPLICATED and PARTITONED MODE for workflowRunState
Cache.

Here is the xml configuration

<?xml version="1.0" encoding="UTF-8"?>

<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
       http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<!--
    Ignite configuration with all defaults and enabled p2p deployment
and enabled events.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <context:property-placeholder location="classpath:app.properties"/>
    <bean abstract="true" id="ignite-data.cfg"
class="org.apache.ignite.configuration.IgniteConfiguration">
        <!-- Set to true to enable distributed class loading for
examples, default is false. -->
        <property name="peerClassLoadingEnabled" value="true"/>

        <!-- Ignite predicate filter to separate data nodes from
service nodes -->
        <property name="userAttributes">
            <map key-type="java.lang.String" value-type="java.lang.Boolean">
                <entry key="data.node" value="true"/>
            </map>
        </property>
        <property name="cacheConfiguration">
            <list>
                <bean
class="org.apache.ignite.configuration.CacheConfiguration">
                    <!-- Set a cache name. -->
                    <property name="name" value="${cache.workflow.name}"/>

                    <!-- Set cache mode. -->
                    <property name="cacheMode" value="PARTITIONED"/>

                    <property name="backups" value="2"/>

                    <property name="statisticsEnabled" value="true"/>

                    <property name="nodeFilter">
                        <bean
class="com.mediaiq.caps.platform.choreography.commons.filter.DataNodeFilter"/>
                    </property>
                </bean>
                <bean
class="org.apache.ignite.configuration.CacheConfiguration">
                    <!-- Set a cache name. -->
                    <property name="name" value="${cache.workflow-run.name}"/>

                    <!-- Set cache mode. -->
                    <property name="cacheMode" value="REPLICATED"/>

                    <!-- This is a transactional cache as many keys
need to be updated together -->
                    <property name="atomicityMode" value="TRANSACTIONAL"/>

                    <property name="backups" value="1"/>

                    <property name="statisticsEnabled" value="true"/>

                    <property name="nodeFilter">
                        <bean
class="com.mediaiq.caps.platform.choreography.commons.filter.DataNodeFilter"/>
                    </property>
                </bean>
                <bean
class="org.apache.ignite.configuration.CacheConfiguration">
                    <!-- Set a cache name. -->
                    <property name="name" value="${cache.workflow-pause.name}"/>

                    <!-- Set cache mode. -->
                    <property name="cacheMode" value="PARTITIONED"/>

                    <property name="backups" value="1"/>

                    <property name="statisticsEnabled" value="true"/>

                    <property name="nodeFilter">
                        <bean
class="com.mediaiq.caps.platform.choreography.commons.filter.DataNodeFilter"/>
                    </property>
                </bean>
            </list>
        </property>
        <!-- Explicitly configure TCP discovery SPI to provide list of
initial nodes. -->
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <!--
                        Ignite provides several options for automatic
discovery that can be used
                        instead os static IP based discovery. For
information on all options refer
                        to our documentation:
http://apacheignite.readme.io/docs/cluster-config
                    -->
                    <!-- Uncomment static IP finder to enable
static-based discovery of initial nodes. -->
                    <!--<bean
class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">-->
                    <bean
class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="addresses">
                            <list>
                                <!-- In distributed environment,
replace with actual host IP address. -->
                                <value>127.0.0.1:47500..47509</value>
                            </list>
                        </property>
                    </bean>

                </property>
            </bean>
        </property>
    </bean>
    <bean parent="ignite-data.cfg"/>
</beans>

All these caches are deployed in Data Node.

Now after doing some operations I had populated data in
workflowRunstateCache which I verified in web console as well.

But when I try to access the same cache from different server node , no
data is available in that. In the following code I am trying to access
workflowrunStateCache from different server node , it shows me that
containsKey as false and thows NullpointerException in debug mode when I do
workflowRunStateCache.get();

while (true) {
    try (Transaction tx =
ignite.transactions().txStart(TransactionConcurrency.OPTIMISTIC,
TransactionIsolation.SERIALIZABLE)) {
        System.out.println("Conatins Key" +
workflowRunStateIgniteCache.containsKey(updatedKeys.get(0)));
        System.out.println("Conatins Key" + workflowRunStateIgniteCache);
        Boolean flowProcessable = updatedKeys.stream()
                // check if there is at least one event in each cache
entry to be processed
                .map(updatedKey ->
workflowRunStateIgniteCache.get(updatedKey).getFlowRunEvents().size()
> 0)
                .reduce(true, (a, b) -> a && b).booleanValue();

        List<Event> inputEvents = null;

        if (flowProcessable) {
            inputEvents = updatedKeys
                    .stream()
                    .map(updatedKey -> {
                        try {
                            return
workflowRunStateIgniteCache.get(updatedKey).getFlowRunEvents().take();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        return null;
                    }).collect(Collectors.toList());
        }

        tx.commit();

        break;
    } catch (TransactionOptimisticException e) {
        // todo: emit a monitoring metric TRANSACTIONS_FAILED here
        System.out.println("Transaction failed. Retrying...");
    }
}

System.out logs:

Conatins Keyfalse

Mime
View raw message