-
Notifications
You must be signed in to change notification settings - Fork 96
/
Copy pathgearman.php
50 lines (39 loc) · 1.65 KB
/
gearman.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
class Gearman_Controller extends Controller
{
public function indexAction()
{
$config = App::instance()->config;
$worker = new GearmanWorker();
$worker->addServer($config['gearman']['host'], $config['gearman']['port']);
$worker->addFunction('delete_keys', array($this, 'deleteKeys'));
$worker->addFunction('move_keys', array($this, 'moveKeys'));
while ($worker->work());
}
public function deleteKeys($job)
{
$data = unserialize($job->workload());
Log::factory()->write(Log::NOTICE, "Try to delete: {$data['key']} at {$data['server']['host']}:{$data['server']['port']}, DB: {$data['server']['database']}", 'Gearman');
$db = Db::factory($data['server']);
$db->changeDB($data['server']['database']);
$keys = $db->keys($data['key']);
$count = count($keys);
if ($count) {
$db->set("phpredmin:gearman:deletecount:{$data['key']}", $count);
$db->del("phpredmin:gearman:deleted:{$data['key']}");
$db->del("phpredmin:gearman:requests:{$data['key']}");
foreach ($keys as $key) {
if ($db->delete($key) !== false) {
$db->incrBy("phpredmin:gearman:deleted:{$data['key']}", 1);
$db->expireAt("phpredmin:gearman:deleted:{$data['key']}", strtotime('+10 minutes'));
} else {
Log::factory()->write(Log::INFO, "Unable to delete {$key}", 'Gearman');
}
}
$db->del("phpredmin:gearman:deletecount:{$data['key']}");
}
}
public function moveKeys($job)
{
}
}