Açıklama:


Bilindiği üzere Emakin üzerinde yapılan çoğu iş (commit'lenen formun işlenmesi, aramalarda getirilmek üzere indexlenmesi, mail gönderimi vb) 6kare Agent tarafından arka planda bir sıraya koyularak yapılır. Bu servis bazı durumlarda yaptığı bir işlemde takılıp diğer işlere bir türlü fırsat bulamayabiliyor. Agent'ın ileriki günlerde geliştirilip bu tür sorunların üstesinden gelmesi bekleniyor ama o güne kadar yaşanabilecek problemlerde bu yazı yardımcınız olabilir.


Çözüm:


Servisin takıldığı veya durduğu örnek durumlar ve çözüm önerileri:

  • Herhangi bir süreç içindeki uzun bir döngü, örneğin 500 kere dönen bir for/while loop Agent'ın kilitlenmesine hatta durmasına yol açabiliyor. Bu tür döngülerden başka bir yol olmadığı sürece kaçınmak gerekir.
  • İçeriğindeki bir sorundan dolayı gönderilirken hataya düşen mailler, bu maillerin gönderiliyor (status = 2) statüsünde kalması ve sonradan Agent tarafından defalarca gönderilmeye çalışılıp hata alınması Agent'ı yavaşlatıyor ve yeri gelince kilitleyebiliyor. Bu maillerin gönderilmemesinde bir sakınca yoksa Agent'ı durdurduktan sonra bunların statüsü standart statüler dışında bir sayıya çekilir (örneğin 99) ve Agent tekrar çalıştırıldığında bu mailleri tekrar göndermeye çalışmayacaktır.
  • Tamamlanan formlar index'lenirken karşılaşılan hatalar da Agent'ın takılmasına sebep olabiliyor. Bu formların index'lenmesi gözden çıkarılabiliyorsa (sistemin çalışması için genellikle bu yönde karar almak en sağlıklısı) yapılması gereken Agent'ı durdurduktan sonra aşağıdaki sorgudaki gerekli yerleri doldurup çalıştırarak WorkItems tablosunda olup da FullTextRegistry tablosunda olmayan kayıtları bu tabloya yerleştirmelisiniz. Sonrasında Agent'ı çalıştırdığınızda bu formları indexlemeye çalışmayacaktır tabii ki status'larının standart değerlerden farklı verilmesi gerekmekte, örneğin 99. Unutulmaması gereken bu işlem sonrasında bu formlar aramalarda gelmeyecektir.

 

insert into [ALTIKARE].[dbo].[wFullTextRegistry](Id, ItemId, [NodeName]
      ,[DomainId]
      ,[State])
	  select newid(), Id, 'node_name', 'domain_id', status FROM [ALTIKARE].[dbo].[wWorkItems] Where Id Not IN (SELECT [ItemId]
  FROM [ALTIKARE].[dbo].[wFullTextRegistry])