Ana içeriğe geç

Çalışma kilidi ve yan yana sürümler

Bir sunucuya birden çok YTCC sürümü kurulabilir. Her sürümün kendi klasörü, kendi portları ve kendi veritabanları vardır (bkz. Sürümleri yan yana kurma). Süreç yöneticileri aynı anda çalışabilir, ama iki kural sürümlerin sahayı birlikte sürmesini engeller:

  • Bir bilgisayarda, hangi sürüm çizgisinde olursa olsun, aynı anda yalnız bir proje çalışır.
  • Aynı proje aynı anda yalnız tek sürümde çalışır; aynı PostgreSQL sunucusunu paylaşan bilgisayarlar arasında da. Bu, çalışma kilididir.

Aynı saha cihazlarını süren iki sürüm birbiriyle çelişen komutlar gönderebilirdi.

Bilgisayar başına tek proje​

Kural her zaman geçerlidir; kapatan bir ayar yoktur. Eski bir config\projects.toml dosyasındaki concurrency = "multi" satırı okunur ama uygulanmaz; süreç yöneticisi açılışta uyarı yazar.

Bir proje başlamadan önce süreç yöneticisi PostgreSQL'de bir makine kilidi alır ve projenin son süreci durana kadar tutar. Kilit bilgisayar adına bağlıdır; aynı PostgreSQL sunucusunu paylaşan iki bilgisayar birbirini engellemez. Aynı anda başlatılan iki projeden, örneğin iki çizginin servisleri Windows'la birlikte açıldığında, yalnız biri çalışır. Süreç yöneticisi beklenmedik biçimde kapanırsa kilit kendiliğinden düşer.

Süreç yöneticisi, makine kilidi almayan kurulumları da yakalamak için bilgisayardaki diğer YTCC kurulumlarına hangi projeleri çalıştırdıklarını sorar. Yalnız kurulum programının Windows kayıt defterine (HKLM\SOFTWARE\YTControl\YTCC) kaydettiği kurulumlara, başka kurulum köklerindekiler dahil, ve sürüm çizgileri öncesindeki bir kurulum programıyla yapılmış kuruluma (C:\YTCC) sorar. Yalnız kuruluma benzeyen bir klasör, örneğin C:\ytcc altında elle açılmış olan, sayılmaz. Bir kurulum yanıt vermezse başlatmaya izin verilmez, reddedilir: ileti o kurulumun durumunun okunamadığını söyler. O kurulumu ana sayfadaki Settings › YTCC installations on this computer (Ayarlar › Bu bilgisayardaki YTCC kurulumları) içinde denetleyin ya da servisini Services (Hizmetler) içinde durdurun, sonra yeniden başlatın.

Birden çok proje yığınla birlikte başlayacak şekilde işaretliyse (autostart) yalnız başlayabilen ilk proje başlatılır; diğerleri atlanır ve günlüğe yazılır.

Başka bir proje çalışıyorsa başlatma reddedilir ve hiçbir şey durdurulmaz. İleti kurulumu ve çalışan projeyi söyler. Önce o projeyi kendi kurulumunun ana sayfasında durdurun (o çizginin kısayoluyla açın, örneğin YTCC v15 (Edge)), sonra yenisini başlatın. Başka bir kurulum yüzünden olan ret de diğer retler gibi kaydedilir (bkz. Kayıtlar). Ana sayfada, başka bir proje çalışırken aynı kurulumun bir projesini başlatmak onaydan sonra önce çalışan projeyi durdurur; bkz. Projeyi başlatma, durdurma ve yeniden başlatma.

Devralma bunun istisnasıdır: arayüzdeki Stop it there and start here…, aynı proje başka bir sürümde hâlâ çalışırken projeyi başlatabilir, çünkü devralma onu orada durdurur. Başka bir sürümdeki başka bir proje ise başlatmayı yine engeller.

Projenin bir sürücüsünün dinlediği port, başka bir program ya da başka bir YTCC kurulumu tarafından kullanılıyorsa proje yine reddedilir. Projenin hiçbir süreci başlatılmaz, port da başka bir numaraya taşınmaz. Portu boşaltın ya da sürücü ayarlarında değiştirin ve yeniden başlatın.

Çalışma kilidi nasıl işler​

Her projenin PostgreSQL'de bir çalışma kilidi vardır. Projenin ilk süreci başlamadan önce o sürümün süreç yöneticisi kilidi alır. Kilidi ancak projenin son süreci durduktan sonra bırakır. Duramayan bir süreç varsa kilit, süreç çıkana dek tutulur.

  • Kilit, PostgreSQL sunucusuna açılan ayrı bir bağlantıda tutulur. Süreç yöneticisi beklenmedik biçimde kapanırsa bağlantı kopar ve kilit kendiliğinden düşer.
  • Kilit projenin adına değil kimliğine bağlıdır. Yeni sürüme devralınan proje kimliğini korur; bu yüzden eski ve yeni kopya aynı kilidi paylaşır. --new-identity ile içe aktarılan proje ayrı bir projedir ve kendi kilidi vardır.
  • Kilit, aynı PostgreSQL sunucusunu kullanan bütün YTCC kurulumları arasında geçerlidir; kurulumlar farklı bilgisayarlarda çalışsa da.

Proje başka bir sürümde zaten çalışıyorsa başlatma reddedilir. Projenin hiçbir süreci başlatılmaz ve bu yüzden çalışan başka bir proje de durdurulmaz.

Arayüzde ne görünür​

Başka bir sürümde çalışan bir projeyi başlattığınızda ya da açtığınızda Project is running in another version (Türkçe arayüzde: Proje başka bir sürümde çalışıyor) penceresi açılır. Pencere sürümü, klasörünü, süreç yöneticisinin süreç kimliğini ve projenin orada ne zamandan beri çalıştığını gösterir. Cancel (Türkçe arayüzde: İptal) pencereyi kapatır.

Sunucu yöneticileri ayrıca Stop it there and start here… (Türkçe arayüzde: Onu durdur ve burada başlat…) düğmesini görür. Bir onaydan sonra (Communication is interrupted for a few seconds; commands are not sent during that time., Türkçe arayüzde: Haberleşme birkaç saniye kesilir, komutlar o sürede gitmez.; düğmeler Cancel ve Stop and start, Türkçe arayüzde: Vazgeç ve Durdur ve başlat) YTCC diğer sürümden projeyi durdurmasını ister ve ne kadar süredir beklediğini gösterir. En çok 15 saniye bekler.

  • Diğer sürüm projeyi zamanında durdurursa proje burada başlar ve Project started in this version. (Türkçe arayüzde: Proje bu sürümde başlatıldı.) iletisi çıkar.
  • Zamanında durdurmazsa pencere projenin burada başlatılmadığını ve projeyi diğer sürümde kapatmanız gerektiğini söyler. Ask again (Türkçe arayüzde: Yeniden iste) isteği bir kez daha gönderir.
  • Proje başka bir bilgisayarda çalışıyorsa istek gönderilmez. Projeyi önce o bilgisayarda durdurun.

Kimin sunucu yöneticisi olduğu için bkz. Sunucu yöneticileri.

Projeyi komut satırından devralma​

Arayüz aynı işi Stop it there and start here… ile yapar. Komut satırında, örneğin bir betikte, destek mühendisi sunucudaki bir komut penceresinde şunu kullanır:

.\scada-manager start-project <project> --takeover
.\scada-manager start-project <project> --takeover --wait-secs 30

--takeover diğer sürüme projeyi durdurma isteği gönderir ve kilidi bekler, varsayılan olarak 15 saniye. Diğer sürüm projeyi kendisi durdurur ve bunu kaydeder. Hiçbir şey zorla durdurulmaz: diğer sürüm yanıt vermezse ya da zamanında durmazsa proje burada başlatılmaz. Bir sürüm aynı proje için böyle bir isteği en çok 30 saniyede bir kabul eder.

Proje sürümler arasında taşınırken project adopt --takeover ve project reclaim aynı isteği kullanır (bkz. Yeni sürüme yükseltme ve geri dönme).

Önceki sürüm hâlâ çalışıyor görünüyorsa​

Kilidi tutan sürüm proje için her 2 saniyede bir kalp atışı yazar. Kilit yeni alınmış ama önceki sürümün bu projedeki kalp atışı hâlâ tazeyse proje hemen başlatılmaz. YTCC kilidi tutar ve kalp atışı durur durmaz projeyi kendiliğinden başlatır. Arayüz Waiting for the previous version to stop; the project will start by itself within N s. (Türkçe arayüzde: Önceki sürümün durması bekleniyor; proje en çok N sn içinde kendiliğinden başlayacak.) iletisini gösterir. Diğer sürüm projeyi 5 dakika boyunca çalıştırmaya devam ederse başlatma iptal edilir, kilit bırakılır ve bir ret kaydedilir.

Kilit kaybolunca​

Süreç yöneticisi kilit bağlantısını 5 saniyede bir ve projenin bir sürecini başlatmadan ya da yeniden başlatmadan önce yeniden denetler. Bağlantı koparsa, örneğin PostgreSQL yeniden başladıysa ya da ağ kesildiyse:

  1. O andan itibaren projenin hiçbir süreci başlatılmaz ya da yeniden başlatılmaz. Yeniden başlatılacak süreç blocked durumunda bekler.
  2. Süreç yöneticisi kilidi 30 saniye boyunca yeniden almaya çalışır. Destek bu süreyi config\manager.toml içindeki run_lock_grace_secs ile değiştirebilir.
  3. Kilidi geri alırsa bekleyen süreçler kendiliğinden yeniden başlar.
  4. Kilidi geri alamazsa ya da kilidi başka bir sürüm aldıysa proje durdurulur ve olay lock_lost olarak kaydedilir.

Eski YTCC sürümleri​

YTCC v1.5.0 ve öncesi çalışma kilidi almaz. Aynı sunucuda böyle bir kurulum çalışıyorsa destek onun kontrol portunu yeni sürümün config\manager.toml dosyasına, yönetici olarak açılmış bir metin düzenleyicide yazar:

legacy_control_ports = [5000]

Yeni sürüm bir projeyi başlatmadan önce eski kuruluma sorar. Eski kurulum projeyi çalıştırıyorsa başlatma, projenin eski bir YTCC kurulumunda çalıştığı iletisiyle reddedilir. Sürüm çizgileri öncesindeki bir kurulum programıyla yapılmış kurulum, herhangi bir proje çalıştırdığında yukarıdaki tek proje kuralı tarafından yine bulunur.

Kayıtlar​

Her başlatma, durdurma, ret, devralma ve kilit kaybı; zamanı, kullanıcısı ve ilgili sürümlerle projenin veritabanına (t_run_events) yazılır. Komut satırından gelen istekler cli:<Windows kullanıcısı> kullanıcısıyla kaydedilir.