[Gelistirici] [RFC] COMAR 3.0 - Yeni Veritabanı Düzeni

Bahadır Kandemir bahadir at pardus.org.tr
23 Eki 2008 Per 15:55:19 EEST


Selamlar,

COMAR 2.0 ve öncesinde, veritabanı BSDDB formatındaydı ve 
uygulama/modelleri şu şekilde saklamaktaydı:

app.db:
  __aps__        apache|baselayout|...
  apache         System.Package|System.Service
  baselayout     Net.Stack|User.Manager|System.Package
  ...

model.db:
  System.Service apache|kdebase|mysql-server|...
  System.Package apache|kdebase|mysql-server|...

3.0 sürümünde betik/model düzenleme ve gerektiğinde veritabanına 
müdahalenin kolay olması için, BSDDB yerine aşağıdaki gibi dizin/dosya 
temelli bir veritabanı kullanmayı düşünüyorum:

    COMAR DB
        |
        + modules
        |   |
        |   + core.py
        |   + ...
        |
        + models
        |   |
        |   + System.Package.xml
        |   + System.Service.xml
        |   + User.Manager.xml
        |   + ...
        |
        + applications
        |   |
        |   + apache
        |   |   |
        |   |   + System.Package.py
        |   |   + System.Service.py
        |   |   + ...
        |   |
        |   + baselayout
        |   |   |
        |   |   + System.Package.py
        |   |   + User.Manager.py
        |   |   + ...
        |   |
        |   + ...
        |
        + rev_applications
            |
            + System.Package
            |   |
            |   + apache
            |   + baselayout
            |   + ...
            |
            + ...


Modules dizini, *sadece* COMAR betikleri tarafından kullanılabilecek 
Python modüllerini içeriyor. Modüller, genellikle C'de implement edilmesi 
zor (mesela dekoratörler) ya da edilirse uzun sürecek metod/sınıfları 
içeriyor. 

Models dizininde, COMAR'ın sunacağı sistem modellerine ait tanımlar 
(XML) tutuluyor. Önceki sürümlerin aksine, her model için ayrı 
bir XML dosyası bulunuyor. Model tanımı aşağıdaki gibi, söz dizimi 
2.0'dakinden pek farklı değil:

    <interface name="System.Service">
        <method name="ready"/>
        <method name="start"/>
        <method name="stop"/>
        <method name="reload"/>
        <method name="setState">
            <arg name="state" type="s" direction="in"/>
        </method>
        <method name="info">
            <arg name="type" type="s" direction="out"/>
            <arg name="description" type="s" direction="out"/>
            <arg name="status" type="s" direction="out"/>
        </method>
        <signal name="Changed">
            <arg name="service" type="s"/>
            <arg name="state" type="s"/>
        </signal>
    </interface>

Applications dizini içinde, COMAR betiği bulunan her uygulama için 
bir dizin bulunuyor ve bu dizinler uygulamalara ait betikleri içeriyor. 
Uygulama ve betik kayıt ederken, uygulama ile aynı isimde bir dizin açıp 
betiği içeri yerleştirmek yeterli. Uygulamayı/betiği kaldırmak da 
dizin/dosya silmek kadar basit.

Bir görevi yerine getiren uygulamaları bulmak gerektiğinde (öreğin 
Service Manager ve Network Manager'da buna ihtiyaç duyuyoruz), tüm 
uygulamalara ait dizinleri tarayarak modellerin listesine ulaşmak 
yavaş olacağı için, model isminden uygulama listesine ulaşabilmemiz için 
rev_applications dizini altında model<->uygulama ilişkileri tutulacak. 

Betik kaydı sırasında, bu model dizini altında uygulama ile aynı isimde 
dosya oluşturulacak ve uygulama sistemden kaldırılırken, tüm model 
dizinleri altındaki uygulamaya ait dosyalar silinecek.

BSDDB yerine dosya/dizin temelli bir veritabanı kullanmak beraberinde 
performans problemleri getirecektir elbette. COMAR her başlatıldığında 
veritabanını taramak ve uygulama/betik listesini tutmak yerine, uygulamaya 
ait çağrı yapıldığında dizin/dosya varlığını kontrol edilecek (betiği 
yüklemek için zaten yapılması gerek) ve D-Bus Introspection için her 
açılışta XML üretmek yerine, sadece Introspection çağrısı geldiğinde XML'i 
üretilecek (duruma göre XML cache'lenebilir).

Yorumlar lütfen :)
-------------- sonraki bölüm --------------
A non-text attachment was scrubbed...
Name: kullanılamıyor
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://liste.pardus.org.tr/gelistirici/attachments/20081023/c3322aa0/attachment-0002.pgp>


Gelistirici mesaj listesiyle ilgili daha fazla bilgi