Merge pull request #2986 from annando/1612-spool
Spool items that weren't stored before
This commit is contained in:
commit
e20e64390b
5 changed files with 103 additions and 6 deletions
30
boot.php
30
boot.php
|
@ -2365,6 +2365,36 @@ function get_lockpath() {
|
|||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the path where spool files are stored
|
||||
*
|
||||
* @return string Spool path
|
||||
*/
|
||||
function get_spoolpath() {
|
||||
$spoolpath = get_config('system','spoolpath');
|
||||
if (($spoolpath != "") AND is_dir($spoolpath) AND is_writable($spoolpath)) {
|
||||
return($spoolpath);
|
||||
}
|
||||
|
||||
$temppath = get_temppath();
|
||||
|
||||
if ($temppath != "") {
|
||||
$spoolpath = $temppath."/spool";
|
||||
|
||||
if (!is_dir($spoolpath)) {
|
||||
mkdir($spoolpath);
|
||||
} elseif (!is_writable($spoolpath)) {
|
||||
$spoolpath = $temppath;
|
||||
}
|
||||
|
||||
if (is_dir($spoolpath) AND is_writable($spoolpath)) {
|
||||
set_config("system", "spoolpath", $spoolpath);
|
||||
return($spoolpath);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function get_temppath() {
|
||||
$a = get_app();
|
||||
|
||||
|
|
|
@ -417,6 +417,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
|
||||
$dsprsig = null;
|
||||
if (x($arr,'dsprsig')) {
|
||||
$encoded_signature = $arr['dsprsig'];
|
||||
$dsprsig = json_decode(base64_decode($arr['dsprsig']));
|
||||
unset($arr['dsprsig']);
|
||||
}
|
||||
|
@ -845,15 +846,27 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
}
|
||||
} else {
|
||||
// This can happen - for example - if there are locking timeouts.
|
||||
logger("Item wasn't stored - we quit here.");
|
||||
q("COMMIT");
|
||||
q("ROLLBACK");
|
||||
|
||||
// Store the data into a spool file so that we can try again later.
|
||||
|
||||
// At first we restore the Diaspora signature that we removed above.
|
||||
if (isset($encoded_signature)) {
|
||||
$arr['dsprsig'] = $encoded_signature;
|
||||
}
|
||||
|
||||
// Now we store the data in the spool directory
|
||||
$file = 'item-'.round(microtime(true) * 10000).".msg";
|
||||
$spool = get_spoolpath().'/'.$file;
|
||||
file_put_contents($spool, json_encode($arr));
|
||||
logger("Item wasn't stored - Item was spooled into file ".$file, LOGGER_DEBUG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ($current_post == 0) {
|
||||
// This is one of these error messages that never should occur.
|
||||
logger("couldn't find created item - we better quit now.");
|
||||
q("COMMIT");
|
||||
q("ROLLBACK");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -868,7 +881,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
if (!dbm::is_result($r)) {
|
||||
// This shouldn't happen, since COUNT always works when the database connection is there.
|
||||
logger("We couldn't count the stored entries. Very strange ...");
|
||||
q("COMMIT");
|
||||
q("ROLLBACK");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -883,7 +896,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
} elseif ($r[0]["entries"] == 0) {
|
||||
// This really should never happen since we quit earlier if there were problems.
|
||||
logger("Something is terribly wrong. We haven't found our created entry.");
|
||||
q("COMMIT");
|
||||
q("ROLLBACK");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -556,6 +556,9 @@ function clear_worker_processes() {
|
|||
function poller_run_cron() {
|
||||
logger('Add cron entries', LOGGER_DEBUG);
|
||||
|
||||
// Check for spooled items
|
||||
proc_run(PRIORITY_HIGH, "include/spool_post.php");
|
||||
|
||||
// Run the cron job that calls all other jobs
|
||||
proc_run(PRIORITY_MEDIUM, "include/cron.php");
|
||||
|
||||
|
|
49
include/spool_post.php
Normal file
49
include/spool_post.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
/**
|
||||
* @file include/spool_post.php
|
||||
* @brief Posts items that wer spooled because they couldn't be posted.
|
||||
*/
|
||||
require_once("boot.php");
|
||||
require_once("include/items.php");
|
||||
|
||||
function spool_post_run($argv, $argc) {
|
||||
global $a, $db;
|
||||
|
||||
if (is_null($a)) {
|
||||
$a = new App;
|
||||
}
|
||||
|
||||
if (is_null($db)) {
|
||||
@include(".htconfig.php");
|
||||
require_once("include/dba.php");
|
||||
$db = new dba($db_host, $db_user, $db_pass, $db_data);
|
||||
unset($db_host, $db_user, $db_pass, $db_data);
|
||||
}
|
||||
|
||||
load_config('config');
|
||||
load_config('system');
|
||||
|
||||
$path = get_spoolpath();
|
||||
|
||||
if (is_writable($path)){
|
||||
if ($dh = opendir($path)) {
|
||||
while (($file = readdir($dh)) !== false) {
|
||||
$fullfile = $path."/".$file;
|
||||
if (filetype($fullfile) != "file") {
|
||||
continue;
|
||||
}
|
||||
$arr = json_decode(file_get_contents($fullfile), true);
|
||||
$result = item_store($arr);
|
||||
logger("Spool file ".$file." stored: ".$result, LOGGER_DEBUG);
|
||||
unlink($fullfile);
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (array_search(__file__, get_included_files()) === 0) {
|
||||
spool_post_run($_SERVER["argv"], $_SERVER["argc"]);
|
||||
killme();
|
||||
}
|
||||
?>
|
|
@ -14,8 +14,10 @@ function worker_init($a){
|
|||
return;
|
||||
}
|
||||
|
||||
// We don't need the following lines if we can execute background jobs
|
||||
// We don't need the following lines if we can execute background jobs.
|
||||
// So we just wake up the worker if it sleeps.
|
||||
if (function_exists("proc_open")) {
|
||||
call_worker_if_idle();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue