Tatilden Sonraki İlk Hatam

June 20, 2019 2 dakika

Üç haftalık tatilimin sonunda görünürde basit bir iş talep edildi. Geliştirdiğimiz projenin yeni sürümünü yayınlayacaktık:

  • Bugün haftanın son çalışma günü mü? Hayır.
  • Unit testlerde sorun var mı? Hayır.
  • Yapılan tüm değişiklikler test sunucusunda ürün yöneticisi tarafından onaylandı mı? Evet.

Ben her şeyi not ederim ve bu yazıyı da aynı amaçla, bu deneyimimi hatırlamak için yazıyorum. Bir diğer alışkanlığım, dosh ile sık kullandığım komutları tüm projelerimde ortak belli başlı alt-komutlar altında toplamak. Proje .NET ile yazılmış, Django olmuş farketmez;

  • dosh start dediğimde o projenin geliştirme ortamımda başlayacağını,
  • dosh build dediğimde build edileceğini,
  • Belli git branch’ları güncellendiğinde, sunucularda dosh deploy çalışacağını biliyorum. Her şey benim için bu kadar standart.

Peki standart olmayan neydi?

Bir projede sunucunun bakımı hariç bütün her şeyi yönetiyorum. İletişim kopukluğu, sitenin bir saat offline kalmasına sebep oldu. Her zaman olmasa da, ara sıra sunucuda küçük ama önemli güncellemeler oluyor. Bu güncelleme, projenin psycopg2 bağımlılığının SSL modülünü tabiri caizse kırdı. Loglarda sadece bu vardı:

DAMN ! worker 1 (pid: 28018) died :( trying respawn ...
Respawned uWSGI worker 1 (new pid: 28021)
!!! uWSGI process 27988 got Segmentation Fault !!!
*** backtrace of 27988 ***
/usr/bin/uwsgi-core(uwsgi_backtrace+0x2a) [0x55a0ad5c498a]
/usr/bin/uwsgi-core(uwsgi_segfault+0x23) [0x55a0ad5c4d73]
/lib/x86_64-linux-gnu/libc.so.6(+0x3ef20) [0x7f4811ecaf20]
/project/venv/lib/python3.6/site-packages/psycopg2/.libs/./libssl-8bb9b3dd.so.1.0.2o(ssl3_cleanup_key_block+0xb) [0x7f480a747cbb]
/project/venv/lib/python3.6/site-packages/psycopg2/.libs/./libssl-8bb9b3dd.so.1.0.2o(ssl3_clear+0x16) [0x7f480a7455b6]
/project/venv/lib/python3.6/site-packages/psycopg2/.libs/./libssl-8bb9b3dd.so.1.0.2o(tls1_clear+0x9) [0x7f480a751229]
/usr/lib/x86_64-linux-gnu/libssl.so.1.1(SSL_new+0x3f2) [0x7f4812b429d2]
/project/venv/lib/python3.6/site-packages/psycopg2/.libs/libpq-239f9ac8.so.5.10(+0x23399) [0x7f480a9dc399]

Segmentation Fault’a ya C programlama dilinden ya da herhangi bir paket yöneticisiyle uğraştıysanız tanık olmuşsunuzdur. Psycopg2’nin binary sürümünü kullandığımız için, içindeki bazı kütüphaneler eski libssl kütüphanesini kullanıyordu ve bu nedenle son sunucu güncellemesi bağımlılıkları kırdı1.

lib/python3.6/site-packages/psycopg2/.libs/libssl-8bb9b3dd.so.1.0.2o   # 1.0'dan
lib/python3.6/site-packages/psycopg2/.libs/libssl-7a80b951.so.1.1.1b   # 1.1'e

Bazı projelerde çeşitli regülasyonlar ve kaynak kısıtları nedeniyle her şeyi istediğimiz gibi çözmek mümkün değil; ama tatil sonrası bende oluşan bir rehavetle, benim kontrolümün dışında ne değişiklikler olduğunu kontrol etmeden sunucuları güncellemeye kalktım ve daha kötüsü bana söylenene kadar sorunu fark etmedim.

Onun için, tatil sonrası ilk iş gününde biraz yavaş olmakta fayda var ve kendime bir kural daha ekledim:

  • Bugün tatilden sonraki ilk çalışma günü mü? Evet (öyleyse yapma).

  1. Özlemişim bu tarz kelimeler kullanmayı. Taa Pardus zamanlarından. [return]
comments powered by Disqus