TFS 2010 Olay Bildirimlerinde Gecikme

   Hatırlarsanız Enterprisecoding video kanalında yayınladığım son videomda sizlere Team Foundation Server 2010 Check-in, Build gibi olay bildirimlerinin (event notifications) nasıl bir eğlenceye dönüştürülebileceğinden bahsetmiştim. Videoda farkedilmese de deneme amaçlı yaptığım check-in işlemine ait olay bildiriminin istemci uygulamama bildirilmesi yaklaşık 2 dakika sürmüştü. Tabi videoda bu kadar süre sizleri bekletmek istemediğim için videoyu düzenlerken bu kısımları kestim.

   Şirketimizde de check-in maillleri benzer şekilde geç gelse de, üye olan insan sayısının büyüklüğü nedeniyle böyle bir durum yaşandığını düşünerek üzerinde durmamıştım; ama evimdeki sunucumda sadece ben vardım… Birazcık araştırma ile, ilginç bulduğum bu gecikmenin aslında bir özellik olduğunu öğrendim.

   Team Foundation Server 2010 sürümü ile birlikte TFS adminleri olay bildirimlerinin geç iletilmesi yetisine sahip oldular. Varsayılan olarak 2 dakika olan bu gecikme süresi, aslında tamamen TFS iş ajanı (Job Agent) üzerindeki iş yükünü hafifletme amaçlı bir özellik. Üstelik büyük ekiplerde bu iki dakikalık bekleme, arka arkaya gönderilmesi gerekecek pek çok mailin önüne geçerek TFS’nin yükünü azaltmak dışında gereksiz mail trafiğinin de önüne geçmekte.

   Her ne kadar bize bu değeri değiştirmek için doğrudan bir arayüz sunulmasa da TFS API’sini kullanarak değiştirebilmemiz münküm. Çok basit olan bu işlemi aşağıdaki kod parçacığında görebilirsiniz;

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;

//…..

TfsConfigurationServer tfsConfigurationServer = new TfsConfigurationServer(new Uri("[SUNUCU ADRESI]"), new UICredentialsProvider());
tfsConfigurationServer.EnsureAuthenticated();

ITeamFoundationRegistry tfsRegistry = tfsConfigurationServer.GetService<ITeamFoundationRegistry>();

tfsRegistry.SetValue("/Service/Integration/Settings/NotificationJobDelay", 60);

   Bu kod parçacığı içerisinde [SUNUCU ADRESI] yazılı bölüme bağlanmak istediğiniz Team Foundation Server sunucu adresini yazmanız yeterli olacaktır. Bu sayede TFS sunucunuz üzerindeki tüm olay bildirimleri 1 dakikalık gecikmelerle size iletilecektir. Her ne kadar bu değere 0 vererek anında bildirim yapılmasının sağlanması mümkün olsa da performans açısından pek tavsiye etmiyorum.

  Yukarıdaki kodu çalıştırmadan önce aşağıdaki kod ile NotificationJobDelay için ne değeri verildiğini inceleyebilirsiniz;

tfsRegistry.GetValue("/Service/Integration/Settings/NotificationJobDelay");

  Pek çoğunuzun bu kodun çalışması sonrasında 120 değerinin geleceğini düşündüğüne eminim; fakat göreceğiniz değer null olacaktır. Peki bu durumda 120 değeri nasıl gelmekte? TFS /Service/Integration/Settings/NotificationJobDelay girdisi için bir değer atanmaması durumunda /Configuration/JobService/DefaultDelayedJobDelay değerini okuyarak bunu kullanacaktır. İşin ilginç tarafı ise, bu değerin de bir varsayılan değeri olmasıdır. DefaultDelayedJobDelay değerinin de bulunmaması durumunda 120 saniye değeri sistem tarafından varsayılan olarak kullanılacaktır.

   NotificationJobDelay ile ilgili bir başka güzel ayrıntı ise bu değerin yukarıda yaptığımız gibi sunucu bazında verilebiliyor olması dışında her bir kolleksiyon için ayrı ayrı verilebiliyor olmasıdır. Aynı sunucu seviyesinde olduğu gibi koleksiyon seviyesinde de DefaultDelayedJobDelay değeri bulunmaktadır. Team Foundation Server’da her bir koleksiyon için bu değeri nasıl değiştirebileceğinize dair örnek bir kod parçacığını aşağıda bulabilirsiniz;

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;

//…

TfsTeamProjectCollection tfsTeamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/DefaultCollection"), new UICredentialsProvider());
var tfsRegistry = tfsTeamProjectCollection.GetService<ITeamFoundationRegistry>();
tfsRegistry.SetValue("/Service/Integration/Settings/NotificationJobDelay", 60);

   NotificationJobDelay ya da DefaultDelayedJobDelay değerleri TFS tarafından değişiklikler için otomatik olarak takip edilen değerler değildirler, bu sebeple yapılan değişikliğin TFS tarafından algılanabilmesi için TFS web uygulamasının yeniden başlatılması gereklidir. Bunun en basit yolu ise TFS uygulama katmanı sunucularında iisreset komutunu çalıştırmak olacaktır.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir