From 5512af5bb0ebcc8c089a081ec34aae5178d51c12 Mon Sep 17 00:00:00 2001 From: Marius Burkard <m.burkard@pixcept.de> Date: Thu, 18 Feb 2016 04:37:42 -0500 Subject: [PATCH] - lock write access (except delete/drop/truncate) for databases exceeding quota (Fixes #3764) --- server/lib/classes/cron.d/100-monitor_database_size.inc.php | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-) diff --git a/server/lib/classes/cron.d/100-monitor_database_size.inc.php b/server/lib/classes/cron.d/100-monitor_database_size.inc.php index 3e9cecf..5f1f2a0 100644 --- a/server/lib/classes/cron.d/100-monitor_database_size.inc.php +++ b/server/lib/classes/cron.d/100-monitor_database_size.inc.php @@ -78,16 +78,29 @@ $state = 'ok'; /** Fetch the data of all databases into an array */ - $databases = $app->db->queryAllRecords("SELECT database_name, sys_groupid FROM web_database WHERE server_id = ? GROUP BY sys_groupid, database_name ASC", $server_id); + $databases = $app->db->queryAllRecords("SELECT database_id, database_name, sys_groupid, database_quota, quota_exceeded FROM web_database WHERE server_id = ? GROUP BY sys_groupid, database_name ASC", $server_id); if(is_array($databases) && !empty($databases)) { $data = array(); for ($i = 0; $i < sizeof($databases); $i++) { - $data[$i]['database_name']= $databases[$i]['database_name']; - $data[$i]['size'] = $app->db->getDatabaseSize($databases[$i]['database_name']); - $data[$i]['sys_groupid'] = $databases[$i]['sys_groupid']; + $rec = $databases[$i]; + + $data[$i]['database_name']= $rec['database_name']; + $data[$i]['size'] = $app->db->getDatabaseSize($rec['database_name']); + $data[$i]['sys_groupid'] = $rec['sys_groupid']; + + $quota = $rec['database_quota'] * 1024 * 1024; + if (!is_numeric($quota)) continue; + + if($quota < 0 || $quota > $data[$i]['size']) { + if($rec['quota_exceeded'] == 'y') { + $app->dbmaster->datalogUpdate('web_database', array('quota_exceeded' => 'n'), 'database_id', $rec['database_id']); + } + } elseif($rec['quota_exceeded'] == 'n') { + $app->dbmaster->datalogUpdate('web_database', array('quota_exceeded' => 'y'), 'database_id', $rec['database_id']); + } } $res = array(); -- Gitblit v1.9.1