27 Nisan 2012 Cuma

Bug Böceği

Not: Başlık biraz garip farkındayım :)

Geçengün bir issue geldi bu issueda verilen bilgiler "new relic"'e düşen php hata mesajlarından ibaretti.
Hata "Solr Error 0, HTTP Code 400 url( http://localhost:8080/select****" şeklinde oldukça uzun bir query çıktısını vermiş. Ama bu çıktı yarım gibiydi. Sanki oluşturulan Url fazla uzun olduğu için kesilmiş ve o kesik haliyle tomcat/jetty'e gönderilmiş gibiydi.

Url: /***** gibi çok uzun bir url vardı.

İlk iş olarak url yi kendi tarayıcıma yazıp aynı hatayı tekrar etmek istedim.
Aldığım mesaj:

Forbidden

You don't have permission to access /****

oldu.

Konuyu araştırınca apache mod_rewrite ($1 gibi...) her bir parametrenin maksiumum 255 karakter alabileceğini öğrendim. Bu sebeple nginx kurup php yi de fast-cgi olarak kurdum  (

brew tap josegonzalez/homebrew-php
brew install php --without-apache --with-mysql --with-cgi
brew install nginx
)

Bu kez hatayı tam olarak gördüm özeti şu şekilde;

1. Solr için üretilen sorgu new relic'in gösterdiğinden çok daha büyükmüş.
2. Url aslında kesik değil tam olarak gönderilmiş.
3. Solr'ın gerçek isteği elimize geçtiği için doğrudan sunucuda

GET 'http://localhost:8080(select/***' şeklinde sorgulama yapıp şu sonucu görüp sorunu tesbit ettiğimiz için mutlu oluyoruz :)


400 Bad Request
Connection: close

Bu sorunun çözümü için tomcat de maksimum url uzunluğunu belirlemek gerekiyor. Bunun için aşağıdaki komutu:  

 

 kullanıyoruz. Detaylar.

jetty için ;

      
          
    65536
          
      

         
     

Buda böyle ilginç bir hikayedir...

Önemli Ek 1: (28/05/2012)
HTTP Code 400 hatası alıyorsanız muhtemel sebepler;
1. Solr'a giden sorgu kaldırabileceğinden çok uzun olabilir.
2. Sorguda giden field lardan biri Solr üzerinde bulunmuyor olabilir. (schema.xml de yapılan güncelleme test yapılan yerde olmayabilir, solr yeniden çalıştırılmamış olabilir)
3. Solr'a giden datada Türkçe karakter sorunu olabilir. Bunu genelde IE yapıyor. 





Hiç yorum yok: