CakePHP 3: SQLSTATE[HY000]: General error: 10 disk I/O error


#1

I’m serving CakePHP 3.x based sites off a Network Load Balanced (NLB) IIS 10 cluster. The php files reside on an external DFS share. When run with debug enabled, CakePHP throws the following error:

2017-08-16 13:45:39 Error: Fixture creation for "requests" failed "SQLSTATE[HY000]: General error: 10 disk I/O error"
2017-08-16 13:45:39 Warning: Warning (512): Fixture creation for "requests" failed "SQLSTATE[HY000]: General error: 10 disk I/O error" in [\\MY.DOMAIN.COM\WEBAPPS\Sites\some_site\vendor\cakephp\cakephp\src\TestSuite\Fixture\TestFixture.php, line 306]
Request URL: /
Client IP: 10.1.2.250
Trace:
Cake\Error\BaseErrorHandler::handleError() - CORE\src\Error\BaseErrorHandler.php, line 146
Cake\TestSuite\Fixture\TestFixture::create() - CORE\src\TestSuite\Fixture\TestFixture.php, line 306
DebugKit\Model\Table\RequestsTable::ensureTables() - ROOT\vendor\cakephp\debug_kit\src\Model\Table\LazyTableTrait.php, line 56
DebugKit\Model\Table\RequestsTable::initialize() - ROOT\vendor\cakephp\debug_kit\src\Model\Table\RequestsTable.php, line 52
Cake\ORM\Table::__construct() - CORE\src\ORM\Table.php, line 290
Cake\ORM\Locator\TableLocator::_create() - CORE\src\ORM\Locator\TableLocator.php, line 212
Cake\ORM\Locator\TableLocator::get() - CORE\src\ORM\Locator\TableLocator.php, line 179
Cake\ORM\TableRegistry::get() - CORE\src\ORM\TableRegistry.php, line 110
DebugKit\ToolbarService::saveData() - ROOT\vendor\cakephp\debug_kit\src\ToolbarService.php, line 172
DebugKit\Routing\Filter\DebugBarFilter::afterDispatch() - ROOT\vendor\cakephp\debug_kit\src\Routing\Filter\DebugBarFilter.php, line 139
Cake\Event\EventManager::_callListener() - CORE\src\Event\EventManager.php, line 426
Cake\Event\EventManager::dispatch() - CORE\src\Event\EventManager.php, line 391
Cake\Http\ActionDispatcher::dispatchEvent() - CORE\src\Event\EventDispatcherTrait.php, line 78
Cake\Http\ActionDispatcher::dispatch() - CORE\src\Http\ActionDispatcher.php, line 100
Cake\Http\BaseApplication::__invoke() - CORE\src\Http\BaseApplication.php, line 83
Cake\Http\Runner::__invoke() - CORE\src\Http\Runner.php, line 65
Cake\Routing\Middleware\RoutingMiddleware::__invoke() - CORE\src\Routing\Middleware\RoutingMiddleware.php, line 62
Cake\Http\Runner::__invoke() - CORE\src\Http\Runner.php, line 65
Cake\Routing\Middleware\AssetMiddleware::__invoke() - CORE\src\Routing\Middleware\AssetMiddleware.php, line 88
Cake\Http\Runner::__invoke() - CORE\src\Http\Runner.php, line 65
AssetCompress\Middleware\AssetCompressMiddleware::__invoke() - ROOT\vendor\markstory\asset_compress\src\Middleware\AssetCompressMiddleware.php, line 56
Cake\Http\Runner::__invoke() - CORE\src\Http\Runner.php, line 65
Cake\Error\Middleware\ErrorHandlerMiddleware::__invoke() - CORE\src\Error\Middleware\ErrorHandlerMiddleware.php, line 81
Cake\Http\Runner::__invoke() - CORE\src\Http\Runner.php, line 65
Cake\Http\Runner::run() - CORE\src\Http\Runner.php, line 51
Cake\Http\Server::run() - CORE\src\Http\Server.php, line 90
require - ROOT\webroot\index.php, line 37
[main] - ROOT\index.php, line 16

IIS has full write permission to the project root folder (on the network share). The fact that CakePHP error log has captured the above info. proves it. So this is definitely not about file / folder permissions.

What’s could be the cause of this error and how to fix?

Thank you.


#2

The error means that SQLite cannot write to it’s DB file. DebugKit uses SQLite to store it’s debugging information, ensure that the tmp/ directory in the application root folder exists and is writable.

If this is your production server then you MUST disable debug mode in the app.php file, otherwise your application will be leaking all sorts of sensitive information.


#3

Hi dakota,
Yes - if I turn off debug, the app works fine. This is good on production server - but I want the debug to be ON in our test servers and that’s where I’m running into this issue. Can’t figure out why it can’t write to the SQLite DB while log files can be written to… they’re on the same network share with same permissions.


#4

Usually just deleting the the tmp/debug_kit.sqlite file and letting it be regenerated fixes the issue.


#5

Thank you. Will try and get back. Never faced this on a LAMP stack… though that never involved running project files off a Network share either.