29 Kasım 2023 Çarşamba

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





Hiç yorum yok:

Yorum Gönder

THIRD-PARTY.txt Dosyası

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