'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