'Laravel MySQL DB not updating after long process
I'm doing some video encoding using Laravel and FFMpeg using https://github.com/protonemedia/laravel-ffmpeg
During the video conversion, I can perform some db updates to update the percentage complete in hls_percent field:
$ffmpeg_cmd = FFMpeg::fromDisk('local_videos')
->open($video->filename)
->exportForHLS()
->toDisk('local_videos')
->setSegmentLength(3) // optional
->setKeyFrameInterval($key_interval) // optional
->onProgress(function ($percentage, $remaining = 0, $rate = 0) use ($id) {
ItemVideo::where('id', $id)->update(['hls_percent' => $percentage]);
});
This process works fine and the hls_percent value gets updated to 100 and the encoded video files are generated.
After some files are moved, (takes several seconds) a final db update is not done.
ItemVideo::where('id', $id)->update(['hls_complete' => 1]);
The timeout only happens while encoding a large 150MB (10 min duration) mp4 file. Smaller/shorter videos complete the process without any issues.
I have increased the following in php.ini
memory_limit = 512M
post_max_size = 1024M
upload_max_filesize = 1024M
max_execution_time = 2400
max_input_time = 2400
default_socket_timeout = 2400
I modified the global variables in the MySQL database server to higher timeouts as instructed here https://sebhastian.com/lost-connection-mysql-server-during-query/
connect_timeout 2400
delayed_insert_timeout 300
have_statement_timeout YES
innodb_flush_log_at_timeout 1
innodb_lock_wait_timeout 50
innodb_rollback_on_timeout OFF
interactive_timeout 28800
lock_wait_timeout 31536000
mysqlx_connect_timeout 30
mysqlx_idle_worker_thread_timeout 60
mysqlx_interactive_timeout 28800
mysqlx_port_open_timeout 0
mysqlx_read_timeout 30
mysqlx_wait_timeout 28800
mysqlx_write_timeout 60
net_read_timeout 2400
net_write_timeout 2400
replica_net_timeout 2400
rpl_stop_replica_timeout 31536000
rpl_stop_slave_timeout 31536000
slave_net_timeout 2400
ssl_session_cache_timeout 2400
wait_timeout 28800
apache2handler:
Max Requests Per Child: 0 - Keep Alive: on - Max Per Connection: 100 Timeouts Connection: 300 - Keep-Alive: 5
I'm not getting an error messages in laravel or /var/log/apache2/error.log
What else am I missing? How can I keep the MySQL connection alive to make the final update?
Solution 1:[1]
Okay, I figure out finally that the last update query wasn't firing because of a conditional I thought was returning true.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | slanginbits |
