[Gelistirici] pisi veritabanı sıralama

Faik Uygur faik at pardus.org.tr
2 Eyl 2007 Paz 15:20:37 EEST


Merhaba,

pisi-db dalında bsddb'yi kaldırıp, dosya sistemi + piksemel tabanlı bir 
veritabanı kodu üzerinde çalışıyorum. Şu ana kadar oldukça iyi gidiyor.

Bu çalışmaya iten sebepleri şu şekilde sıralayabilirim:

* depo indexi, paket metadataları dosya sisteminde bulunmasına rağmen
her yeni depo eklendiğinde ya da yeni bir paket eklendiğinde bu bilgilerin
veritabanına yazılması/silinmesi zorunluluğu mevcut. Özellikle depo 
güncellemelerinde oldukça fazla zaman kaybımız oluyor. Zaten elimizde 
olan bir veriyi, veri tabanına yazıp daha sonra tekrar oradan okumaya 
çalışıyoruz.

* CD deposu eklenmesi kolay değil. Paket yöneticisinden cd deposunun 
eklenmesi... ardından buradaki index'in bsddb'ye geçirilmesinin beklenmesi,
CD çıkarıldığında da depo'nun silinmesi lazım. Bunu kullanıcının yapmasının
beklenmesi doğru değil. Yeni yapıda CD'de index dosyası görüldüğü
anda tek yapılması gereken bu dosyanın /var/lib/pisi/index altına - örneğin CD 
ismi depo ismi olacak şekilde bir klasör açılarak -  kopyalanması olacak. Bu 
da CD'nin takıp çıkarıldığını anlayacak betikler ile kolaylıkla 
otomatikleştirilebilecek bir iş. (Bu iş pisi.api dan olacak tabi ki)

* Bir şekilde sık yaşandığı görülen db sorunları ve db ile alakalı olsa da, 
olmasa da her sorunun rebuild-db ile çözülmeye çalışılması hoş değil. 
rebuild-db komutundan da kurtulunması mümkün olacak.

* Segmentation fault sorunlarının ağırlıklı olarak cPickle ve bsddb c 
modüllerinden kaynaklandığı, dolayısıyla da yeni yapı ile bu sorunların 
aşılacağını düşünüyorum.

* Yeni kodun optimizasyona açık, çok daha esnek bir yapısı mevcut olacak.

Gelelim soruma:

Eski kodda depo eklenme sırasına göre paket aranırken ilk bulunduğu depo
kullanılıyordu. Bu sıralamanın korunamaması gibi bir de açık hatamız vardı 
(paket yöneticisi kaynaklı). 

Pisi'nin bu sıralamaya karar vermemesi gerektiğini düşünerek, 
XYZDB.get_xyz(package_name, repo=None) şeklindeki kodu repo'yu zorunlu 
girilmesi gereken bir parametre olarak değiştirdim. Bu bilgi daha üst 
seviyeden gelecek şekilde. Örneğin for repo in repodb.list_repos() gibi bir 
kod ile... En azından düşük seviye db kodu buna karar vermesin, pisi içinden 
bir kod olsa da, daha üst seviyelerden bu iş yapılsın diye düşündüm.

Şimdi sorunum şu ki, bu sıranın nasıl belirlenmesi gerektiğine dair tam bir 
çözüm bulamadım. Bir yapılabilecek /etc/pisi/repos gibi bir dosyada bu 
sıranın belirlenmesi. Bu konuda alternatif bir düşüncesi olan var mı?

Saygılar,
- Faik



Gelistirici mesaj listesiyle ilgili daha fazla bilgi