… | |
… | |
79 | |
79 | |
80 | # we don't actually care if it succeeds or not, as we |
80 | # we don't actually care if it succeeds or not, as we |
81 | # will just retry an hour later |
81 | # will just retry an hour later |
82 | BDB::db_txn_finish $txn; |
82 | BDB::db_txn_finish $txn; |
83 | |
83 | |
84 | # warn "tag-updated $file (= $key) $hash\n";#d# |
84 | warn "tag-updated $file (= $key) <@tags>\n" |
|
|
85 | if @tags; |
85 | } |
86 | } |
86 | |
87 | |
87 | sub scan_static { |
88 | sub scan_static { |
88 | my ($dir, $map) = @_; |
89 | my ($dir, $map) = @_; |
89 | |
90 | |
… | |
… | |
101 | &scan_static ("$dir/$_", "$map$_/") |
102 | &scan_static ("$dir/$_", "$map$_/") |
102 | for @$dirs; |
103 | for @$dirs; |
103 | } |
104 | } |
104 | |
105 | |
105 | sub reload { |
106 | sub reload { |
|
|
107 | my $guard = cf::lock_acquire "map-tags::reload"; |
|
|
108 | |
106 | my $start = Event::time; |
109 | my $start = EV::time; |
107 | |
110 | |
108 | # 1. check for maps no longer existing |
111 | # 1. check for maps no longer existing |
109 | { |
112 | { |
110 | my @delkeys; |
113 | my @delkeys; |
111 | |
114 | |
… | |
… | |
166 | # delete $map->{deny_reset}; |
169 | # delete $map->{deny_reset}; |
167 | # } |
170 | # } |
168 | # } |
171 | # } |
169 | # } |
172 | # } |
170 | |
173 | |
171 | warn sprintf "map-tag scan (%fs)", Event::time - $start; |
174 | warn sprintf "map-tag scan (%fs)", EV::time - $start; |
172 | } |
175 | } |
173 | |
176 | |
174 | our $RELOAD_SCHEDULER = Event->timer ( |
177 | our $RELOAD_SCHEDULER = cf::periodic $SCHEDULE_INTERVAL, Coro::unblock_sub { |
175 | after => 0, |
|
|
176 | interval => $SCHEDULE_INTERVAL, |
|
|
177 | data => cf::WF_AUTOCANCEL, |
|
|
178 | cb => Coro::unblock_sub { |
|
|
179 | $Coro::current->prio (Coro::PRIO_MIN); |
178 | $Coro::current->prio (Coro::PRIO_MIN); |
|
|
179 | $Coro::current->desc ("map-tag scanner"); |
180 | reload; |
180 | reload; |
181 | }, |
181 | }; |
182 | ); |
182 | |
|
|
183 | cf::async { reload }; # force at startup |
183 | |
184 | |
184 | # find all objects with the given tag, or at least try to |
185 | # find all objects with the given tag, or at least try to |
185 | sub find($) { |
186 | sub find($) { |
186 | my ($tag) = @_; |
187 | my ($tag) = @_; |
187 | |
188 | |