6 Aralık 2023 Çarşamba

HazelcastAPI ClientSchemaService Sınıfı

Giriş
Şu satırı dahil ederiz
import com.hazelcast.client.impl.clientside.ClientSchemaService;
replicateSchemaInCluster metodu
Call stack şöyle
replicateSchemaInCluster:140, ClientSchemaService (com.hazelcast.client.impl.clientside)
put:85, ClientSchemaService (com.hazelcast.client.impl.clientside)
putToSchemaService:137, CompactStreamSerializer (com.hazelcast.internal.serialization.impl.compact)
writeObject:148, CompactStreamSerializer (com.hazelcast.internal.serialization.impl.compact)
write:116, CompactStreamSerializer (com.hazelcast.internal.serialization.impl.compact)
write:109, CompactStreamSerializer (com.hazelcast.internal.serialization.impl.compact)
write:39, StreamSerializerAdapter (com.hazelcast.internal.serialization.impl)
toBytes:238, AbstractSerializationService (com.hazelcast.internal.serialization.impl)
toBytes:217, AbstractSerializationService (com.hazelcast.internal.serialization.impl)
toData:202, AbstractSerializationService (com.hazelcast.internal.serialization.impl)
toData:157, AbstractSerializationService (com.hazelcast.internal.serialization.impl)
toData:76, ClientProxy (com.hazelcast.client.impl.spi)
putInternal:553, ClientMapProxy (com.hazelcast.client.impl.proxy)
put:275, ClientMapProxy (com.hazelcast.client.impl.proxy)
Client CompactSerializer'ın kullandığı com.hazelcast.internal.serialization.impl.compact.Schema
nesnesini sunucuya gönderir. Böylece sunucu da bu nesnesi okuyabilir.

HazelcastAPI SchemaService Arayüzü

Giriş
Şu satırı dahil ederiz
import com.hazelcast.internal.serialization.impl.compact.SchemaService;
Kalıtım şöyle
SchemaService
  MemberSchemaService
  

5 Aralık 2023 Salı

Compact Serialization Custom Configuration

Örnek
Şu satırı dahil ederiz
import com.hazelcast.nio.serialization.compact.CompactSerializer;
import com.hazelcast.nio.serialization.compact.CompactReader;
import com.hazelcast.nio.serialization.compact.CompactWriter;
Örnek - Member Side Custom Configuration
Şöyle yaparız
public class Employee {
   ...
}

public class EmployeeSerializer implements CompactSerializer<Employee> {
  @Override
  public Employee read(CompactReader reader) {
    long id = reader.readInt64("id");
    String name = reader.readString("name");
    return new Employee(id, name);
  }

  @Override
  public void write(CompactWriter writer, Employee employee) {
    writer.writeInt64("id", employee.getId());
    writer.writeString("name", employee.getName());
  }

  @Override
  public Class<Employee> getCompactClass() {
    return Employee.class;
  }

  @Override
  public String getTypeName() {
    return "employee";
  }
}

Config config = new Config();
config.getSerializationConfig()
        .getCompactSerializationConfig()
        .addSerializer(new EmployeeSerializer());
Örnek - Client Side Custom Configuration
İstemci tarafından IMap.put işlemi için call stack şöyle . Yazılan byte[] nesnesi HeapData nesnesine çevrili.
write:16, MyWorkerSerializer (com.colak.serilization.compact.serializerconfiguration)
write:7, MyWorkerSerializer (com.colak.serilization.compact.serializerconfiguration)
buildSchema:396, CompactStreamSerializer (com.hazelcast.internal.serialization.impl.compact)
writeObject:147, CompactStreamSerializer (com.hazelcast.internal.serialization.impl.compact)
write:116, CompactStreamSerializer (com.hazelcast.internal.serialization.impl.compact)
write:109, CompactStreamSerializer (com.hazelcast.internal.serialization.impl.compact)
write:39, StreamSerializerAdapter (com.hazelcast.internal.serialization.impl)
toBytes:238, AbstractSerializationService (com.hazelcast.internal.serialization.impl)
toBytes:217, AbstractSerializationService (com.hazelcast.internal.serialization.impl)
toData:202, AbstractSerializationService (com.hazelcast.internal.serialization.impl)
toData:157, AbstractSerializationService (com.hazelcast.internal.serialization.impl)
toData:76, ClientProxy (com.hazelcast.client.impl.spi)
putInternal:553, ClientMapProxy (com.hazelcast.client.impl.proxy)
put:275, ClientMapProxy (com.hazelcast.client.impl.proxy)

29 Kasım 2023 Çarşamba

ProcessorMetaSupplier.Context Arayüzü

Giriş
Şu satırı dahil ederiz
import com.hazelcast.jet.core.ProcessorMetaSupplier.Context;
Bu arayüz ProcessorMetaSupplier nesnesinin init() metoduna parametre olarak geçilir. Böylece ProcessorMetaSupplier nesnesi bazı ortam değişkenlerine erişebilir. 

Metodlar şöyle
HazelcastInstance hazelcastInstance();
JetInstance jetInstance();
long jobId();
long executionId();
JobConfig jobConfig();
int totalParallelism();
int localParallelism();
int memberCount();
String vertexName();
ILogger logger();
boolean snapshottingEnabled();
ProcessingGuarantee processingGuarantee();
long maxProcessorAccumulatedRecords();
boolean isLightJob();
Map<Address, int[]> partitionAssignment();
ClassLoader classLoader();
DataConnectionService dataConnectionService();
void checkPermission(@Nonnull Permission permission)


SchedLock

Giriş
Önemli sınıflar şöyle
1. HazelcastLockProvider
2. HazelcastLock

HazelcastLockProvider Sınıfı
lock metodu
Kod şöyle
public Optional<SimpleLock> lock(@NonNull LockConfiguration lockConfiguration) {

  final Instant now = ClockProvider.now();
  final String lockName = lockConfiguration.getName();
  final IMap<String, HazelcastLock> store = getStore();
  try {
    // lock the map key entry
    store.lock(lockName, keyLockTime(lockConfiguration), TimeUnit.MILLISECONDS);
    // just one thread at a time, in the cluster, can run this code
    // each thread waits until the lock to be unlock
    if (tryLock(lockConfiguration, now)) {
      return Optional.of(new HazelcastSimpleLock(this, lockConfiguration));
    }
  } finally {
    // released the map lock for the others threads
    store.unlock(lockName);
  }
  return Optional.empty();
}
  1. shedlock_storage isimli IMap veri yapısında HazelcastLock nesneleri saklanır. 
  2. eyLockTime() metodu now + LockAtMostUntil değerini verir. Yani IMap.lock() çağrısı gelecekteki bir zaman kadar bu key değerini kilitler
  3. tryLock() metodu kilitli olan key değerinde 
    1. HazelcastLock nesnesi yoksa yeni bir tane ekler ve true döner
    2.  HazelcastLock nesnesi varsa ve bayatlamışsa, yeni HazelcastLock  ile değiştirir ve true döner
    3. HazelcastLock nesnesi varsa ve bayatlamamışsa, kilitleyemediği için false döner





28 Kasım 2023 Salı

hazelcast.xml Cache Ayarları

Örnek
Şöyle yaparız
<cache name="*">
  <statistics-enabled>false</statistics-enabled>
  <management-enabled>false</management-enabled>
  <in-memory-format>BINARY</in-memory-format>
  <expiry-policy-factory>
    <timed-expiry-policy-factory expiry-policy-type="ETERNAL"/>
  </expiry-policy-factory>
  <eviction eviction-policy="LRU" max-size-policy="ENTRY_COUNT" size="10000"/>
</cache>

hazelcast.xml - Advanced Network Ayarları

Giriş
Network Join Ayarları yazısına bakabilirsiniz


Örnek
Şöyle yaparız
<advanced-network enabled="true">
  <join>
    <auto-detection enabled="false"/>
    <multicast enabled="true">
      <multicast-group>224.2.2.3</multicast-group>
      <multicast-port>54327</multicast-port>
      <multicast-time-to-live>32</multicast-time-to-live>
      <multicast-timeout-seconds>5</multicast-timeout-seconds>
    </multicast>
  </join>

  <member-server-socket-endpoint-config>
    <port>5701</port>
    <socket-options>
      <keep-alive>true</keep-alive>
      <tcp-no-delay>true</tcp-no-delay>
      <buffer-direct>true</buffer-direct>
    </socket-options>
  </member-server-socket-endpoint-config>
  <client-server-socket-endpoint-config>
    <port>9090</port>
    <socket-options>
    <keep-alive>true</keep-alive>
    <tcp-no-delay>true</tcp-no-delay>
    <buffer-direct>true</buffer-direct>
    </socket-options>
  </client-server-socket-endpoint-config>
</advanced-network>

THIRD-PARTY.txt Dosyası

Kullanılan harici kütüphanelerin sürümleri bu dosyada Dosyanın yolu şöyle hazelcast/licenses/THIRD-PARTY.txt