13 Ekim 2021 Çarşamba

ignite komutu

Giriş
ignite sunucusunu başlatır.

-i seçeneği
interactive anlamına gelir. Kullanılacak konfigürasyon dosyası seçilebilir. Eğer hiç bir dosya belirtilmezse 
config/default-config.xml dosyası kullanılır. Bu dosyada da aslında hiç bir ayar yoktur, yani boş sayılır

12 Ekim 2021 Salı

TransactionConfiguration Sınıfı - Thick Client Transaction Ayarları İçindir

Giriş
Şu satırı dahil ederiz
import org.apache.ignite.configuration.TransactionConfiguration;
setUseJtaSynchronization metodu
Örnek
Şöyle yaparız
import org.apache.ignite.cache.jta.jndi.CacheJndiTmFactory;
import org.apache.ignite.transactions.TransactionConcurrency;
import org.apache.ignite.transactions.TransactionIsolation;

TransactionConfiguration transactionConfiguration  = new TransactionConfiguration()
  .setUseJtaSynchronization(Boolean.TRUE)
  .setTxManagerFactory(new CacheJndiTmFactory("java:jboss/TransactionManager"))
  .setDefaultTxConcurrency(TransactionConcurrency.OPTIMISTIC)
  .setDefaultTxIsolation(TransactionIsolation.READ_COMMITTED);

TcpCommunicationSpi tcpCommunicationSpi = ...;
DataStorageConfiguration dsStorageConfigureation = ...;
CacheConfiguration<String, OnboardingProcess> onboardingProcessCacheConfiguration = ...;

IgniteConfiguration cfg = new IgniteConfiguration()
  .setPeerClassLoadingEnabled(true)
  .setClientMode(Boolean.FALSE)
  .setIgniteHome("/Users/vip/workspace/local-ignite-home")
  .setDeploymentMode(DeploymentMode.CONTINUOUS)
  .setMetricsLogFrequency(60*10*1000)
  .setCommunicationSpi(tcpCommunicationSpi)
  .setDiscoverySpi(spi)
  .setDataStorageConfiguration(dsStorageConfigureation)
  .setAuthenticationEnabled(Boolean.TRUE)
  .setClusterStateOnStart(ClusterState.ACTIVE)
  .setClientMode(Boolean.FALSE)
  .setTransactionConfiguration(transactionConfiguration  )
  .setCacheConfiguration(onboardingProcessCacheConfiguration);

IgniteCluster Arayüzü - Thick Client

Giriş
Şu satırı dahil ederiz
import org.apache.ignite.IgniteCluster;
baselineAutoAdjustEnabled metodu
Not : Baseline Topology Ne Demek yazısına bakabilirsiniz.

Baseline Topology değişikliği olunca devreye girer. Böylece "lost partition" olmaz. 

Örnek
Şöyle yaparız
ignite.cluster().baselineAutoAdjustEnabled(false);
state metodu
Örnek
Şöyle yaparız
import org.apache.ignite.cluster.ClusterState;

IgniteConfiguration cfg = ...;
Ignite ignite = Ignition.getOrStart(cfg);
ignite.cluster().state(ClusterState.ACTIVE);

XML SqlConfiguration Bean

Örnek
Burada iki tane schema tanımlanıyor.
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
        Alter configuration below as needed.
    -->
  <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="sqlConfiguration">
      <bean class="org.apache.ignite.configuration.SqlConfiguration">
        <property name="sqlSchemas">
	  <list>
	    <value>MY_SCHEMA</value>
	    <value>MY_SECOND_SCHEMA</value>
          </list>
        </property>
      </bean>
    </property>
  </bean>
</beans>

11 Ekim 2021 Pazartesi

XML TcpDiscoverySpi Bean

Giriş
IgniteConfiguration.discoverySpi alanına atanır

Örnek
Şöyle yaparız
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="workDirectory" value="/gridgain-dev/work"/>
    <property name="shutdownPolicy" value="GRACEFUL"/>
    <property name="igniteInstanceName" value="ScioCardio Gridgain Dev"/>

    <property name="dataStorageConfiguration">
      <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
        ...
      </bean>
    </property>

    <property name="discoverySpi">
      <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
        <property name="ipFinder">
          <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.
            TcpDiscoveryKubernetesIpFinder">
            <property name="namespace" value="gridgain-dev"/>
            <property name="serviceName" value="gridgain-service-dev"/>
          </bean>
        </property>
      </bean>
     </property>
    </bean>
</beans>

TcpDiscoveryKubernetesIpFinder Sınıfı

Giriş
Şu satırı dahil ederiz
import org.apache.ignite.kubernetes.configuration.KubernetesConnectionConfiguration;
constructor - KubernetesConnectionConfiguration 
Örnek
Şöyle yaparız
IgniteConfiguration cfg = new IgniteConfiguration();

cfg.setClientMode(true);
cfg.setShutdownPolicy(ShutdownPolicy.GRACEFUL);


KubernetesConnectionConfiguration connectionConfiguration = new 
  KubernetesConnectionConfiguration();
connectionConfiguration.setNamespace(System.getenv("NAMESPACE"));
connectionConfiguration.setServiceName(System.getenv("SERVICE_NAME"));

TcpDiscoveryKubernetesIpFinder ipFinder = new TcpDiscoveryKubernetesIpFinder(
  connectionConfiguration);
cfg.setMetricsLogFrequency(0);
cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(ipFinder));

ignite = Ignition.start(cfg);

Affinity Arayüzü

Giriş
Şu satırı dahil ederiz
import org.apache.ignite.cache.affinity.Affinity;
mapKeyToNode metodu
Örnek
Şu satırı dahil ederiz
import org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy;

private final IgniteEx ignite = ...;
private final Map<String/*Cache name*/, Affinity<Object>> affinities = 
  new ConcurrentHashMap<>();

String cacheName = headers.getFirst("affinity-cache-name");//table name
String affinityKey = headers.getFirst("affinity-key"); //user id aka data sharding key

Affinity<Object> affinity = affinities.computeIfAbsent(
  cacheName, k -> ((GatewayProtectedCacheProxy)ignite.cache(cacheName)).context().
    cache().affinity()
);

ClusterNode node = affinity.mapKeyToNode(affinityKey);


Ignite Transaction Kullanımı

Giriş Bir tablo 3 tane atomicity değerinden birisine sahip olabilir. 1. ATOMIC 2. TRANSACTIONAL 3. TRANSACTIONAL_SNAPSHOT ATOMIC Açıklaması ...