Skip to content

Instantly share code, notes, and snippets.

@heathdutton
Last active January 3, 2018 14:57
Show Gist options
  • Save heathdutton/6f4f3ada6ea6c27fdc0f1bce58021209 to your computer and use it in GitHub Desktop.
Save heathdutton/6f4f3ada6ea6c27fdc0f1bce58021209 to your computer and use it in GitHub Desktop.
Laravel jobs concurrency untangling
DROP TABLE IF EXISTS jobs_copy;
CREATE TABLE `jobs_copy` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `queue` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `payload` text COLLATE utf8_unicode_ci NOT NULL, `attempts` tinyint(3) unsigned NOT NULL, `reserved` tinyint(3) unsigned NOT NULL, `reserved_at` int(10) unsigned DEFAULT NULL, `available_at` int(10) unsigned NOT NULL, `created_at` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=29972441 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `jobs_copy` SELECT * FROM `jobs`;
DELETE FROM jobs WHERE `reserved` != 1 AND `id` IN (SELECT `id` FROM jobs_copy ORDER BY `id` DESC);
# Repeat ad nauseam:
INSERT INTO `jobs` (SELECT * FROM `jobs_copy` ORDER BY `id` ASC LIMIT 500); DELETE FROM `jobs_copy` ORDER BY `id` ASC LIMIT 500; SELECT SLEEP(18); SELECT COUNT(*) FROM `jobs`;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment