aboutsummaryrefslogtreecommitdiffstats
path: root/Zotlabs/Daemon
diff options
context:
space:
mode:
authorMario Vavti <mario@mariovavti.com>2023-04-12 09:29:51 +0200
committerMario Vavti <mario@mariovavti.com>2023-04-12 09:29:51 +0200
commit7ce4175876ce13727432dc839938bb8e486ef406 (patch)
tree5128e5c5d13629628c0e50b4a91935cfeda44a20 /Zotlabs/Daemon
parent03bdbfa705ba490b0450f063753100557f5d8bae (diff)
downloadvolse-hubzilla-7ce4175876ce13727432dc839938bb8e486ef406.tar.gz
volse-hubzilla-7ce4175876ce13727432dc839938bb8e486ef406.tar.bz2
volse-hubzilla-7ce4175876ce13727432dc839938bb8e486ef406.zip
initial commit directory sync rewrite - should work but still requires lots of cleanup
Diffstat (limited to 'Zotlabs/Daemon')
-rw-r--r--Zotlabs/Daemon/Cron.php12
-rw-r--r--Zotlabs/Daemon/Onedirsync.php19
-rw-r--r--Zotlabs/Daemon/Poller.php9
3 files changed, 32 insertions, 8 deletions
diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php
index 640f06102..caae0ce53 100644
--- a/Zotlabs/Daemon/Cron.php
+++ b/Zotlabs/Daemon/Cron.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Daemon;
use Zotlabs\Lib\Libsync;
+use Zotlabs\Lib\Libzotdir;
class Cron {
@@ -35,6 +36,17 @@ class Cron {
logger('cron: start');
+ // If this is a directory server, request a sync with an upstream
+ // directory at least once a day, up to once every poll interval.
+ // Pull remote changes and push local changes.
+ // potential issue: how do we keep from creating an endless update loop?
+
+ $dirmode = get_config('system', 'directory_mode');
+
+ if ($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) {
+ Libzotdir::sync_directories($dirmode);
+ }
+
// run queue delivery process in the background
Master::Summon(array('Queue'));
diff --git a/Zotlabs/Daemon/Onedirsync.php b/Zotlabs/Daemon/Onedirsync.php
index ea995be9e..89f4a40ed 100644
--- a/Zotlabs/Daemon/Onedirsync.php
+++ b/Zotlabs/Daemon/Onedirsync.php
@@ -19,13 +19,14 @@ class Onedirsync {
return;
}
- $r = q("select * from updates where ud_id = %d limit 1",
+ $r = q("select * from updates where ud_id = %d",
intval($update_id)
);
if (!$r)
return;
+/*
if (($r[0]['ud_flags'] & UPDATE_FLAGS_UPDATED) || (!$r[0]['ud_addr']))
return;
@@ -47,22 +48,24 @@ class Onedirsync {
);
return;
}
-
+*/
// ignore doing an update if this ud_addr refers to a known dead hubloc
- $h = q("select * from hubloc where hubloc_addr = '%s'",
+ $h = q("select * from hubloc where hubloc_addr = '%s' order by hubloc_id desc",
dbesc($r[0]['ud_addr']),
);
$h = Libzot::zot_record_preferred($h);
if (($h) && (($h['hubloc_status'] & HUBLOC_OFFLINE) || $h['hubloc_deleted'] || $h['hubloc_error'])) {
- q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and ( ud_flags & %d ) = 0 ",
- intval(UPDATE_FLAGS_DELETED),
- dbesc($r[0]['ud_addr']),
- intval(UPDATE_FLAGS_UPDATED)
+ q("update updates set ud_flags = 9 where ud_hash = '%s' and ud_flags != 9",
+ dbesc($r[0]['ud_hash'])
);
- return;
+
+ // 2023-04-12: Flag the entry deleted but try to update anyway since the info is not always correct
+ // This might change after all directory servers run the new code.
+
+ // return;
}
// we might have to pull this out some day, but for now update_directory_entry()
diff --git a/Zotlabs/Daemon/Poller.php b/Zotlabs/Daemon/Poller.php
index 0fdc3da16..537209530 100644
--- a/Zotlabs/Daemon/Poller.php
+++ b/Zotlabs/Daemon/Poller.php
@@ -183,11 +183,20 @@ class Poller {
$dirmode = intval(get_config('system', 'directory_mode'));
if ($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) {
+/*
$r = q("SELECT u.ud_addr, u.ud_id, u.ud_last FROM updates AS u INNER JOIN (SELECT ud_addr, max(ud_id) AS ud_id FROM updates WHERE ( ud_flags & %d ) = 0 AND ud_addr != '' AND ( ud_last <= '%s' OR ud_last > %s - INTERVAL %s ) GROUP BY ud_addr) AS s ON s.ud_id = u.ud_id ",
intval(UPDATE_FLAGS_UPDATED),
dbesc(NULL_DATE),
db_utcnow(), db_quoteinterval('7 DAY')
);
+*/
+
+ $r = q("SELECT * FROM updates WHERE ud_flags = 1 AND (ud_last = '%s' OR ud_last > %s - INTERVAL %s)",
+ dbesc(NULL_DATE),
+ db_utcnow(),
+ db_quoteinterval('7 DAY')
+ );
+
if ($r) {
foreach ($r as $rr) {