Stiamo spingendo i nuovi membri a completare il tutorial di discobot e diversi hanno riscontrato un problema che avevamo già sperimentato in una precedente istanza Discourse (di staging): il certificato nell’ultimo post impiega molto tempo per essere generato e visualizzato, senza alcuna indicazione che sia in fase di caricamento/generazione. Per “molto tempo” intendo un intervallo di 10-20 secondi, sufficiente per far desistere qualcuno. Ho provato su meta e lì sembra essere istantaneo.
Ho notato che il certificato può essere generato on-demand utilizzando l’URL /discobot/certificate.svg?date=Oct+28+2020&user_id=123, quindi ho effettuato alcuni test. All’inizio era istantaneo. Ma non appena ho utilizzato ID utente che non avevano completato il tutorial di recente, ho dovuto attendere quel periodo di 10-20 secondi (una volta generato la prima volta è veloce, quindi presumo ci sia una cache da qualche parte). Ho anche ricevuto alcuni errori 500 durante il periodo di attesa, che presumo siano stati dei timeout di qualche tipo, dato che ha funzionato al prossimo aggiornamento della pagina.
Nei /logs, vedo un avvertimento di cui non so se sia correlato:
Failed to process hijacked response correctly : Net::ReadTimeout
traceback
/usr/local/lib/ruby/2.6.0/net/protocol.rb:217:in `rbuf_fill'
/usr/local/lib/ruby/2.6.0/net/protocol.rb:191:in `readuntil'
/usr/local/lib/ruby/2.6.0/net/protocol.rb:201:in `readline'
/usr/local/lib/ruby/2.6.0/net/http/response.rb:40:in `read_status_line'
/usr/local/lib/ruby/2.6.0/net/http/response.rb:29:in `read_new'
/usr/local/lib/ruby/2.6.0/net/http.rb:1509:in `block in transport_request'
/usr/local/lib/ruby/2.6.0/net/http.rb:1506:in `catch'
/usr/local/lib/ruby/2.6.0/net/http.rb:1506:in `transport_request'
/usr/local/lib/ruby/2.6.0/net/http.rb:1479:in `request'
rack-mini-profiler-2.0.2/lib/patches/net_patches.rb:9:in `block in request_with_mini_profiler'
rack-mini-profiler-2.0.2/lib/mini_profiler/profiling_methods.rb:39:in `step'
rack-mini-profiler-2.0.2/lib/patches/net_patches.rb:8:in `request_with_mini_profiler'
/var/www/discourse/lib/final_destination.rb:370:in `block in safe_get'
/var/www/discourse/lib/final_destination.rb:414:in `block in safe_session'
/usr/local/lib/ruby/2.6.0/net/http.rb:920:in `start'
/usr/local/lib/ruby/2.6.0/net/http.rb:605:in `start'
/var/www/discourse/lib/final_destination.rb:411:in `safe_session'
/var/www/discourse/lib/final_destination.rb:362:in `safe_get'
/var/www/discourse/lib/final_destination.rb:131:in `get'
/var/www/discourse/lib/final_destination.rb:152:in `get'
/var/www/discourse/lib/file_helper.rb:55:in `download'
/var/www/discourse/plugins/discourse-narrative-bot/plugin.rb:113:in `fetch_avatar'
/var/www/discourse/plugins/discourse-narrative-bot/plugin.rb:98:in `block in generate'
/var/www/discourse/lib/hijack.rb:56:in `instance_eval'
/var/www/discourse/lib/hijack.rb:56:in `block in hijack'
/var/www/discourse/lib/scheduler/defer.rb:94:in `block in do_work'
rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:68:in `with_connection'
/var/www/discourse/lib/scheduler/defer.rb:89:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:79:in `block (2 levels) in start_thread'
Presumo che il certificato venga generato localmente, senza alcuna richiesta di rete esterna?
La macchina è una t3a.medium (4 GB di memoria) e il forum non è particolarmente attivo (~0.4 di carico, ancora molta memoria libera). Durante l’attesa per la generazione del certificato, la CPU non sembrava cambiare per nulla, quindi non sembra essere il collo di bottiglia.
Non siamo gli unici a riscontrare questo problema (non sono sicuro se questo sia correlato), ma non vedo nulla lì che possa aiutare.
Non sono sicuro di aver centrato qualcosa, ma se aggiorno l’URL del certificato alcune volte, alla fine ottengo un errore che mi dice di rallentare. Esiste qualche meccanismo di limitazione della velocità (throttling) per gli URL che potrebbe interferire qui se molte persone stanno generando i certificati allo stesso percorso URL? Probabilmente no, ma sono a un punto morto sul perché ciò stia accadendo. Qualsiasi suggerimento è benvenuto.

