Ç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-identityile 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:
- O andan itibaren projenin hiçbir süreci başlatılmaz ya da yeniden başlatılmaz. Yeniden başlatılacak süreç
blockeddurumunda bekler. - Süreç yöneticisi kilidi 30 saniye boyunca yeniden almaya çalışır. Destek bu süreyi
config\manager.tomliçindekirun_lock_grace_secsile değiştirebilir. - Kilidi geri alırsa bekleyen süreçler kendiliğinden yeniden başlar.
- Kilidi geri alamazsa ya da kilidi başka bir sürüm aldıysa proje durdurulur ve olay
lock_lostolarak 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.