Jobs::DownloadAvatarFromUrl va in timeout

Ciao,

abbiamo appena iniziato a utilizzare avatar_url tramite DiscourseConnect. La sovrascrittura dell’avatar è abilitata e l’aggiornamento forzato dell’avatar è impostato su true sul lato SSO.

L’accesso funziona come previsto, ma gli avatar non vengono sincronizzati. Abilitando il verboso per l’accesso SSO, vengono mostrati tutti i parametri corretti, ma otteniamo sempre un errore da Jobs::DownloadAvatarFromUrl che dice “Eccezione del job: esecuzione scaduta”.

Non so cosa possa causare questo problema. L’ho testato su un’istanza locale di Discourse e ha funzionato senza alcun intoppo (ovvero, gli avatar vengono scaricati senza problemi).

Avete qualche idea su come risolvere o su cosa stia causando questo?

Versione attuale di Discourse: 2.8.0.beta1

env:

hostname	docker-app
process_id	127
application_version	96fd202d9cdac98196abd952c53f583b4af9d8f2
current_db	default
current_hostname	*hostname corretto*
job	Jobs::DownloadAvatarFromUrl
problem_db	default
time	10:58
opts	
url	*url corretto*
user_id	*id utente corretto*
override_gravatar	true
current_site_id	default

backtrace:

/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `initialize'
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `open'
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `block in connect'
/usr/local/lib/ruby/2.7.0/timeout.rb:105:in `timeout'
/usr/local/lib/ruby/2.7.0/net/http.rb:958:in `connect'
/usr/local/lib/ruby/2.7.0/net/http.rb:943:in `do_start'
/usr/local/lib/ruby/2.7.0/net/http.rb:932:in `start'
/usr/local/lib/ruby/2.7.0/net/http.rb:606:in `start'
/var/www/discourse/lib/final_destination.rb:443:in `safe_session'
/var/www/discourse/lib/final_destination.rb:394:in `safe_get'
/var/www/discourse/lib/final_destination.rb:133:in `get'
/var/www/discourse/lib/file_helper.rb:56:in `download'
/var/www/discourse/app/models/user_avatar.rb:98:in `import_url_for_user'
/var/www/discourse/app/jobs/regular/download_avatar_from_url.rb:18:in `execute'
/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'
rails_multisite-3.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/app/jobs/base.rb:221:in `block in perform'
/var/www/discourse/app/jobs/base.rb:217:in `each'
/var/www/discourse/app/jobs/base.rb:217:in `perform'
sidekiq-6.2.1/lib/sidekiq/processor.rb:196:in `execute_job'
sidekiq-6.2.1/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
sidekiq-6.2.1/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:138:in `call'
sidekiq-6.2.1/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
sidekiq-6.2.1/lib/sidekiq/middleware/chain.rb:143:in `invoke'
sidekiq-6.2.1/lib/sidekiq/processor.rb:163:in `block in process'
sidekiq-6.2.1/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq/job_retry.rb:112:in `local'
sidekiq-6.2.1/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq.rb:38:in `block in <module:Sidekiq>'
sidekiq-6.2.1/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq/processor.rb:257:in `stats'
sidekiq-6.2.1/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq/job_logger.rb:13:in `call'
sidekiq-6.2.1/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
sidekiq-6.2.1/lib/sidekiq/job_retry.rb:79:in `global'
sidekiq-6.2.1/lib/sidekiq/processor.rb:124:in `block in dispatch'
sidekiq-6.2.1/lib/sidekiq/logger.rb:11:in `with'
sidekiq-6.2.1/lib/sidekiq/job_logger.rb:33:in `prepare'
sidekiq-6.2.1/lib/sidekiq/processor.rb:123:in `dispatch'
sidekiq-6.2.1/lib/sidekiq/processor.rb:162:in `process'
sidekiq-6.2.1/lib/sidekiq/processor.rb:78:in `process_one'
sidekiq-6.2.1/lib/sidekiq/processor.rb:68:in `run'
sidekiq-6.2.1/lib/sidekiq/util.rb:43:in `watchdog'
sidekiq-6.2.1/lib/sidekiq/util.rb:52:in `block in safe_thread'

Modifica: C’è abbastanza RAM e spazio su disco. L’ho già verificato.

Modifica 2: Potrebbe effettivamente essere un problema di memoria. Non ho notato la differenza tra la memoria sulla macchina host e quella allocata per Discourse. Attualmente abbiamo impostato solo 512 MB nel nostro app.yml, anche se devo ancora verificare che questa sia la causa.

Scusa per l’aggiornamento in ritardo.

Ho appena avuto modo di testare con 1024 MB e 2048 MB di memoria allocata, ma il risultato è lo stesso. Qualsiasi ulteriore suggerimento sarebbe molto apprezzato!

Modifica: Quindi, dopo aver esaminato i log più e più volte, ho controllato il codice del job e ho visto che non era intenzionato a essere riprovato. Naturalmente, ho fatto esattamente questo. Ho modificato il file e ho scoperto in Sidekiq che il mio problema è in realtà legato a questioni di rete.

Il job di ripetizione mi restituisce

Jobs::HandledExceptionWrapper: Wrapped Net::OpenTimeout: execution expired

come un errore con cui posso effettivamente lavorare.

La lezione per chiunque in futuro è: se URI.open(your url).read nella console di Rails non funziona, è probabile che si tratti di un problema di rete Ruby invece che di un problema Discourse. Ho avuto l’idea da stackoverflow