2 Ocak 2023 Pazartesi

HazelcastClientAPI ClientPartitionServiceImpl Sınıfı - Partition ID Hesaplar

Giriş
Şu satırı dahil ederiz
import com.hazelcast.client.impl.spi.impl.ClientPartitionServiceImpl;
Kalıtım şöyle
ClientPartitionService
  ClientPartitionServiceImpl

İskeleti şöyle. Bu sınıfın içinde partitionCount diye bir değişken var ama istemci tarafında bu değişken client protocol içinde gelen bir bir mesajın alanına göre atanıyor. Yani istemci kaç tane partition var sorusunun cevabını aslında Member'ın gönderdiği cevaptan alıyor. Member da cevabı IPartitionService arayüzünü gerçekleştirimi olan InternalPartitionServiceImpl  içinde dolduruyor
public final class ClientPartitionServiceImpl implements ClientPartitionService {

  private final HazelcastClientInstanceImpl client;
  private final ILogger logger;
  private final AtomicReference<PartitionTable> partitionTable =
    new AtomicReference<>(new PartitionTable(null, -1, new Int2ObjectHashMap<>()));
  private final AtomicInteger partitionCount = new AtomicInteger(0);
  ...
}
getPartitionCount metodu
Kod şöyle.
@Override
public int getPartitionCount() {
  return partitionCount.get();
}
getPartitionId metodu
Kod şöyle. Bu metod ClientProxy tarafından kullanılır
@Override
public int getPartitionId(@Nonnull Data key) {
  int pc = getPartitionCount();
  if (pc == 0) {
    // Partition count can not be zero for the sync mode.
    // On the sync mode, we are waiting for the first connection to be established.
    // We are initializing the partition count with // the value coming from the server with authentication.
    // This exception is used only for async mode client.
    throw new HazelcastClientOfflineException();
  }
  int hash = key.getPartitionHash();
  return HashUtil.hashToIndex(hash, pc);
}
invokeOnPartitionOwner metodu
Kod şöyle. Belirtilen partitionId'ye sahip UUID bulunur. Bu UUID ile connection bulunur ve gönderilir.
@Override
public boolean invokeOnPartitionOwner(ClientInvocation invocation, int partitionId) {
  UUID partitionOwner = partitionService.getPartitionOwner(partitionId);
  if (partitionOwner == null) {
    if (invocationLogger.isFinestEnabled()) {
      invocationLogger.finest("Partition owner is not assigned yet");
    }
    return false;
  }
  return invokeOnTarget(invocation, partitionOwner);
}


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