protected function result() { $args = $this->input(); if (!isset($args['queue'])) { return new WP_Error('invalid_queue', 'Queue name is required', 400); } if (!in_array($args['queue'], array('sync', 'full_sync'))) { return new WP_Error('invalid_queue', 'Queue name should be sync or full_sync', 400); } require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-queue.php'; $queue = new Jetpack_Sync_Queue($args['queue']); // False means that there was no lock to delete. $response = $queue->unlock(); return array('success' => $response); }
function continue_enqueuing($configs = null, $enqueue_status = null) { if (!$this->is_started() || $this->get_status_option('queue_finished')) { return; } // if full sync queue is full, don't enqueue more items $max_queue_size_full_sync = Jetpack_Sync_Settings::get_setting('max_queue_size_full_sync'); $full_sync_queue = new Jetpack_Sync_Queue('full_sync'); $available_queue_slots = $max_queue_size_full_sync - $full_sync_queue->size(); if ($available_queue_slots <= 0) { return; } else { $remaining_items_to_enqueue = min(Jetpack_Sync_Settings::get_setting('max_enqueue_full_sync'), $available_queue_slots); } if (!$configs) { $configs = $this->get_config(); } if (!$enqueue_status) { $enqueue_status = $this->get_enqueue_status(); } foreach (Jetpack_Sync_Modules::get_modules() as $module) { $module_name = $module->name(); // skip module if not configured for this sync or module is done if (!isset($configs[$module_name]) || !$configs[$module_name] || !$enqueue_status[$module_name] || true === $enqueue_status[$module_name][2]) { continue; } list($items_enqueued, $next_enqueue_state) = $module->enqueue_full_sync_actions($configs[$module_name], $remaining_items_to_enqueue, $enqueue_status[$module_name][2]); $enqueue_status[$module_name][2] = $next_enqueue_state; // if items were processed, subtract them from the limit if (!is_null($items_enqueued) && $items_enqueued > 0) { $enqueue_status[$module_name][1] += $items_enqueued; $remaining_items_to_enqueue -= $items_enqueued; } // stop processing if we've reached our limit of items to enqueue if (0 >= $remaining_items_to_enqueue) { $this->set_enqueue_status($enqueue_status); return; } } $this->set_enqueue_status($enqueue_status); // setting autoload to true means that it's faster to check whether we should continue enqueuing $this->update_status_option('queue_finished', time(), true); /** * Fires when a full sync ends. This action is serialized * and sent to the server with checksums so that we can confirm the * sync was successful. * * @since 4.2.0 */ do_action('jetpack_full_sync_end', ''); }
function test_queue_is_persisted() { $other_queue = new Jetpack_Sync_Queue($this->queue->id); $this->queue->add('foo'); $this->assertEquals(array('foo'), $other_queue->checkout(5)->get_item_values()); }