rq 0.1.7 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/INSTALL +21 -0
- data/README +752 -190
- data/TODO +18 -11
- data/TUTORIAL +230 -0
- data/all/install.rb +127 -0
- data/all/install.sh +165 -0
- data/all/packages/INSTALL +5 -0
- data/all/packages/arrayfields-3.6.0.tgz +0 -0
- data/all/packages/lockfile-1.4.1.tgz +0 -0
- data/all/packages/posixlock-0.0.1.tgz +0 -0
- data/all/packages/ruby-1.8.6.tgz +0 -0
- data/all/packages/rubygems-0.9.2.tgz +0 -0
- data/all/packages/sqlite-2.8.15.tar.gz +0 -0
- data/all/packages/sqlite-ruby-1.3.1.tar.gz +0 -0
- data/bin/rq +830 -361
- data/bin/rq-3.0.0 +860 -0
- data/doc/classes/ARGV.html +134 -0
- data/doc/classes/ARGV.src/M000036.html +36 -0
- data/doc/classes/ARGV.src/M000037.html +25 -0
- data/doc/classes/OrderedHash.html +1043 -0
- data/doc/classes/OrderedHash.src/M000003.html +26 -0
- data/doc/classes/OrderedHash.src/M000004.html +31 -0
- data/doc/classes/OrderedHash.src/M000005.html +23 -0
- data/doc/classes/OrderedHash.src/M000006.html +23 -0
- data/doc/classes/OrderedHash.src/M000007.html +24 -0
- data/doc/classes/OrderedHash.src/M000009.html +24 -0
- data/doc/classes/OrderedHash.src/M000010.html +24 -0
- data/doc/classes/OrderedHash.src/M000011.html +24 -0
- data/doc/classes/OrderedHash.src/M000012.html +24 -0
- data/doc/classes/OrderedHash.src/M000013.html +24 -0
- data/doc/classes/OrderedHash.src/M000014.html +24 -0
- data/doc/classes/OrderedHash.src/M000016.html +26 -0
- data/doc/classes/OrderedHash.src/M000017.html +25 -0
- data/doc/classes/OrderedHash.src/M000018.html +23 -0
- data/doc/classes/OrderedHash.src/M000019.html +25 -0
- data/doc/classes/OrderedHash.src/M000020.html +23 -0
- data/doc/classes/OrderedHash.src/M000021.html +24 -0
- data/doc/classes/OrderedHash.src/M000022.html +24 -0
- data/doc/classes/OrderedHash.src/M000023.html +24 -0
- data/doc/classes/OrderedHash.src/M000024.html +29 -0
- data/doc/classes/OrderedHash.src/M000025.html +29 -0
- data/doc/classes/OrderedHash.src/M000026.html +24 -0
- data/doc/classes/OrderedHash.src/M000027.html +25 -0
- data/doc/classes/OrderedHash.src/M000028.html +23 -0
- data/doc/classes/OrderedHash.src/M000029.html +25 -0
- data/doc/classes/OrderedHash.src/M000030.html +24 -0
- data/doc/classes/OrderedHash.src/M000032.html +23 -0
- data/doc/classes/OrderedHash.src/M000033.html +25 -0
- data/doc/classes/OrderedHash.src/M000034.html +36 -0
- data/doc/classes/OrderedHash.src/M000035.html +23 -0
- data/doc/classes/RQ.html +647 -0
- data/doc/classes/RQ/Backer.html +240 -0
- data/doc/classes/RQ/Backer.src/M000121.html +31 -0
- data/doc/classes/RQ/ConfigFile.html +416 -0
- data/doc/classes/RQ/ConfigFile.src/M000100.html +34 -0
- data/doc/classes/RQ/ConfigFile.src/M000101.html +26 -0
- data/doc/classes/RQ/ConfigFile.src/M000102.html +33 -0
- data/doc/classes/RQ/ConfigFile.src/M000103.html +25 -0
- data/doc/classes/RQ/ConfigFile.src/M000104.html +34 -0
- data/doc/classes/RQ/ConfigFile.src/M000105.html +25 -0
- data/doc/classes/RQ/Configurator.html +249 -0
- data/doc/classes/RQ/Configurator.src/M000122.html +40 -0
- data/doc/classes/RQ/Creator.html +264 -0
- data/doc/classes/RQ/Creator.src/M000157.html +32 -0
- data/doc/classes/RQ/Cron.html +461 -0
- data/doc/classes/RQ/Deleter.html +259 -0
- data/doc/classes/RQ/Deleter.src/M000078.html +52 -0
- data/doc/classes/RQ/Executor.html +249 -0
- data/doc/classes/RQ/Executor.src/M000099.html +45 -0
- data/doc/classes/RQ/Feeder.html +1131 -0
- data/doc/classes/RQ/Feeder.src/M000079.html +67 -0
- data/doc/classes/RQ/Feeder.src/M000080.html +47 -0
- data/doc/classes/RQ/Feeder.src/M000081.html +98 -0
- data/doc/classes/RQ/Feeder.src/M000082.html +25 -0
- data/doc/classes/RQ/Feeder.src/M000083.html +30 -0
- data/doc/classes/RQ/Feeder.src/M000084.html +58 -0
- data/doc/classes/RQ/Feeder.src/M000085.html +37 -0
- data/doc/classes/RQ/Feeder.src/M000086.html +40 -0
- data/doc/classes/RQ/Feeder.src/M000087.html +37 -0
- data/doc/classes/RQ/Feeder.src/M000088.html +35 -0
- data/doc/classes/RQ/Feeder.src/M000089.html +47 -0
- data/doc/classes/RQ/Feeder.src/M000090.html +25 -0
- data/doc/classes/RQ/Feeder.src/M000091.html +78 -0
- data/doc/classes/RQ/Feeder.src/M000092.html +34 -0
- data/doc/classes/RQ/Feeder.src/M000093.html +36 -0
- data/doc/classes/RQ/Feeder.src/M000094.html +25 -0
- data/doc/classes/RQ/Feeder.src/M000095.html +27 -0
- data/doc/classes/RQ/IOViewer.html +256 -0
- data/doc/classes/RQ/Job.html +304 -0
- data/doc/classes/RQ/Job.src/M000168.html +26 -0
- data/doc/classes/RQ/Job.src/M000169.html +37 -0
- data/doc/classes/RQ/Job.src/M000170.html +23 -0
- data/doc/classes/RQ/Job/Methods.html +210 -0
- data/doc/classes/RQ/JobQueue.html +1780 -0
- data/doc/classes/RQ/JobQueue.src/M000176.html +31 -0
- data/doc/classes/RQ/JobQueue.src/M000177.html +34 -0
- data/doc/classes/RQ/JobQueue.src/M000178.html +60 -0
- data/doc/classes/RQ/JobQueue.src/M000179.html +63 -0
- data/doc/classes/RQ/JobQueue.src/M000180.html +73 -0
- data/doc/classes/RQ/JobQueue.src/M000181.html +217 -0
- data/doc/classes/RQ/JobQueue.src/M000182.html +50 -0
- data/doc/classes/RQ/JobQueue.src/M000183.html +83 -0
- data/doc/classes/RQ/JobQueue.src/M000184.html +25 -0
- data/doc/classes/RQ/JobQueue.src/M000185.html +83 -0
- data/doc/classes/RQ/JobQueue.src/M000186.html +28 -0
- data/doc/classes/RQ/JobQueue.src/M000187.html +26 -0
- data/doc/classes/RQ/JobQueue.src/M000188.html +26 -0
- data/doc/classes/RQ/JobQueue.src/M000189.html +32 -0
- data/doc/classes/RQ/JobQueue.src/M000190.html +30 -0
- data/doc/classes/RQ/JobQueue.src/M000191.html +37 -0
- data/doc/classes/RQ/JobQueue.src/M000192.html +36 -0
- data/doc/classes/RQ/JobQueue.src/M000193.html +25 -0
- data/doc/classes/RQ/JobQueue.src/M000194.html +25 -0
- data/doc/classes/RQ/JobQueue.src/M000195.html +25 -0
- data/doc/classes/RQ/JobQueue.src/M000196.html +25 -0
- data/doc/classes/RQ/JobQueue.src/M000197.html +25 -0
- data/doc/classes/RQ/JobQueue.src/M000198.html +73 -0
- data/doc/classes/RQ/JobQueue.src/M000199.html +25 -0
- data/doc/classes/RQ/JobQueue.src/M000200.html +38 -0
- data/doc/classes/RQ/JobQueue.src/M000201.html +28 -0
- data/doc/classes/RQ/JobQueue/Error.html +187 -0
- data/doc/classes/RQ/JobRunner.html +386 -0
- data/doc/classes/RQ/JobRunner.src/M000117.html +53 -0
- data/doc/classes/RQ/JobRunner.src/M000118.html +26 -0
- data/doc/classes/RQ/JobRunnerDaemon.html +590 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000159.html +94 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000160.html +27 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000161.html +39 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000162.html +27 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000163.html +27 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000164.html +28 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000165.html +28 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000166.html +37 -0
- data/doc/classes/RQ/JobRunnerDaemon.src/M000167.html +25 -0
- data/doc/classes/RQ/Lister.html +256 -0
- data/doc/classes/RQ/Lister.src/M000156.html +52 -0
- data/doc/classes/RQ/Locker.html +250 -0
- data/doc/classes/RQ/Locker.src/M000120.html +40 -0
- data/doc/classes/RQ/Logging.html +296 -0
- data/doc/classes/RQ/Logging.src/M000067.html +28 -0
- data/doc/classes/RQ/Logging/LogClassMethods.html +254 -0
- data/doc/classes/RQ/Logging/LogClassMethods.src/M000068.html +32 -0
- data/doc/classes/RQ/Logging/LogClassMethods.src/M000069.html +28 -0
- data/doc/classes/RQ/Logging/LogMethods.html +404 -0
- data/doc/classes/RQ/Logging/LogMethods.src/M000070.html +35 -0
- data/doc/classes/RQ/Logging/LogMethods.src/M000071.html +28 -0
- data/doc/classes/RQ/Logging/LogMethods.src/M000072.html +21 -0
- data/doc/classes/RQ/Logging/LogMethods.src/M000073.html +21 -0
- data/doc/classes/RQ/Logging/LogMethods.src/M000074.html +21 -0
- data/doc/classes/RQ/Logging/LogMethods.src/M000075.html +21 -0
- data/doc/classes/RQ/Logging/LogMethods.src/M000076.html +21 -0
- data/doc/classes/RQ/Logging/LogMethods.src/M000077.html +29 -0
- data/doc/classes/RQ/Logging/LoggerExt.html +194 -0
- data/doc/classes/RQ/Main.html +2110 -0
- data/doc/classes/RQ/MainHelper.html +607 -0
- data/doc/classes/RQ/MainHelper.src/M000171.html +33 -0
- data/doc/classes/RQ/MainHelper.src/M000172.html +32 -0
- data/doc/classes/RQ/MainHelper.src/M000173.html +44 -0
- data/doc/classes/RQ/OrderedAutoHash.html +258 -0
- data/doc/classes/RQ/OrderedAutoHash.src/M000205.html +25 -0
- data/doc/classes/RQ/OrderedAutoHash.src/M000206.html +25 -0
- data/doc/classes/RQ/QDB.html +1653 -0
- data/doc/classes/RQ/QDB.src/M000126.html +25 -0
- data/doc/classes/RQ/QDB.src/M000127.html +37 -0
- data/doc/classes/RQ/QDB.src/M000128.html +27 -0
- data/doc/classes/RQ/QDB.src/M000129.html +27 -0
- data/doc/classes/RQ/QDB.src/M000130.html +27 -0
- data/doc/classes/RQ/QDB.src/M000131.html +31 -0
- data/doc/classes/RQ/QDB.src/M000132.html +32 -0
- data/doc/classes/RQ/QDB.src/M000133.html +30 -0
- data/doc/classes/RQ/QDB.src/M000134.html +91 -0
- data/doc/classes/RQ/QDB.src/M000135.html +26 -0
- data/doc/classes/RQ/QDB.src/M000136.html +46 -0
- data/doc/classes/RQ/QDB.src/M000137.html +26 -0
- data/doc/classes/RQ/QDB.src/M000138.html +51 -0
- data/doc/classes/RQ/QDB.src/M000139.html +61 -0
- data/doc/classes/RQ/QDB.src/M000140.html +57 -0
- data/doc/classes/RQ/QDB.src/M000141.html +25 -0
- data/doc/classes/RQ/QDB.src/M000142.html +25 -0
- data/doc/classes/RQ/QDB.src/M000143.html +37 -0
- data/doc/classes/RQ/QDB.src/M000144.html +107 -0
- data/doc/classes/RQ/QDB.src/M000145.html +40 -0
- data/doc/classes/RQ/QDB.src/M000146.html +34 -0
- data/doc/classes/RQ/QDB.src/M000147.html +33 -0
- data/doc/classes/RQ/QDB.src/M000148.html +32 -0
- data/doc/classes/RQ/QDB.src/M000149.html +98 -0
- data/doc/classes/RQ/QDB.src/M000150.html +26 -0
- data/doc/classes/RQ/QDB.src/M000151.html +31 -0
- data/doc/classes/RQ/QDB.src/M000154.html +26 -0
- data/doc/classes/RQ/QDB/AbortedTransactionError.html +187 -0
- data/doc/classes/RQ/QDB/RollbackTransactionError.html +187 -0
- data/doc/classes/RQ/Querier.html +328 -0
- data/doc/classes/RQ/Querier.src/M000203.html +45 -0
- data/doc/classes/RQ/Querier.src/M000204.html +78 -0
- data/doc/classes/RQ/ReSubmitter.html +307 -0
- data/doc/classes/RQ/ReSubmitter.src/M000098.html +111 -0
- data/doc/classes/RQ/Recoverer.html +247 -0
- data/doc/classes/RQ/Refresher.html +346 -0
- data/doc/classes/RQ/Refresher.src/M000174.html +51 -0
- data/doc/classes/RQ/Refresher.src/M000175.html +44 -0
- data/doc/classes/RQ/Relayer.html +723 -0
- data/doc/classes/RQ/Relayer.src/M000106.html +91 -0
- data/doc/classes/RQ/Relayer.src/M000107.html +47 -0
- data/doc/classes/RQ/Relayer.src/M000108.html +46 -0
- data/doc/classes/RQ/Relayer.src/M000109.html +26 -0
- data/doc/classes/RQ/Relayer.src/M000110.html +46 -0
- data/doc/classes/RQ/Relayer.src/M000111.html +40 -0
- data/doc/classes/RQ/Relayer.src/M000112.html +37 -0
- data/doc/classes/RQ/Relayer.src/M000113.html +40 -0
- data/doc/classes/RQ/Relayer.src/M000114.html +27 -0
- data/doc/classes/RQ/Relayer.src/M000115.html +25 -0
- data/doc/classes/RQ/Relayer.src/M000116.html +38 -0
- data/doc/classes/RQ/Resource.html +187 -0
- data/doc/classes/RQ/ResourceManager.html +276 -0
- data/doc/classes/RQ/Rotater.html +324 -0
- data/doc/classes/RQ/Rotater.src/M000158.html +71 -0
- data/doc/classes/RQ/SleepCycle.html +322 -0
- data/doc/classes/RQ/SleepCycle.src/M000123.html +32 -0
- data/doc/classes/RQ/SleepCycle.src/M000124.html +27 -0
- data/doc/classes/RQ/SleepCycle.src/M000125.html +25 -0
- data/doc/classes/RQ/Snapshotter.html +250 -0
- data/doc/classes/RQ/Snapshotter.src/M000097.html +35 -0
- data/doc/classes/RQ/StatusLister.html +289 -0
- data/doc/classes/RQ/StatusLister.src/M000096.html +26 -0
- data/doc/classes/RQ/Submitter.html +319 -0
- data/doc/classes/RQ/Submitter.src/M000119.html +92 -0
- data/doc/classes/RQ/Toucher.html +384 -0
- data/doc/classes/RQ/Updater.html +304 -0
- data/doc/classes/RQ/Updater.src/M000202.html +97 -0
- data/doc/classes/RQ/Usage.html +346 -0
- data/doc/classes/RQ/Usage.src/M000038.html +29 -0
- data/doc/classes/RQ/Usage.src/M000039.html +72 -0
- data/doc/classes/RQ/Util.html +1043 -0
- data/doc/classes/RQ/Util.src/M000040.html +27 -0
- data/doc/classes/RQ/Util.src/M000041.html +26 -0
- data/doc/classes/RQ/Util.src/M000042.html +25 -0
- data/doc/classes/RQ/Util.src/M000043.html +25 -0
- data/doc/classes/RQ/Util.src/M000044.html +30 -0
- data/doc/classes/RQ/Util.src/M000045.html +25 -0
- data/doc/classes/RQ/Util.src/M000046.html +34 -0
- data/doc/classes/RQ/Util.src/M000047.html +31 -0
- data/doc/classes/RQ/Util.src/M000048.html +41 -0
- data/doc/classes/RQ/Util.src/M000049.html +27 -0
- data/doc/classes/RQ/Util.src/M000050.html +34 -0
- data/doc/classes/RQ/Util.src/M000051.html +28 -0
- data/doc/classes/RQ/Util.src/M000052.html +27 -0
- data/doc/classes/RQ/Util.src/M000053.html +31 -0
- data/doc/classes/RQ/Util.src/M000054.html +31 -0
- data/doc/classes/RQ/Util.src/M000055.html +31 -0
- data/doc/classes/RQ/Util.src/M000056.html +25 -0
- data/doc/classes/RQ/Util.src/M000057.html +25 -0
- data/doc/classes/RQ/Util.src/M000058.html +25 -0
- data/doc/classes/RQ/Util.src/M000059.html +25 -0
- data/doc/classes/RQ/Util.src/M000060.html +25 -0
- data/doc/classes/RQ/Util.src/M000061.html +27 -0
- data/doc/classes/RQ/Util.src/M000062.html +28 -0
- data/doc/classes/RQ/Util.src/M000063.html +39 -0
- data/doc/classes/RQ/Util.src/M000064.html +39 -0
- data/doc/classes/RQ/Util.src/M000065.html +31 -0
- data/doc/classes/RQ/Util.src/M000066.html +29 -0
- data/doc/classes/SQLite.html +120 -0
- data/doc/classes/SQLite/Database.html +546 -0
- data/doc/classes/SQLite/TypeTranslator.html +221 -0
- data/doc/created.rid +1 -0
- data/doc/dot/f_0.dot +14 -0
- data/doc/dot/f_0.jpg +0 -0
- data/doc/dot/f_1.dot +14 -0
- data/doc/dot/f_1.jpg +0 -0
- data/doc/dot/f_10.dot +802 -0
- data/doc/dot/f_10.jpg +0 -0
- data/doc/dot/f_11.dot +14 -0
- data/doc/dot/f_11.jpg +0 -0
- data/doc/dot/f_12.dot +802 -0
- data/doc/dot/f_12.jpg +0 -0
- data/doc/dot/f_13.dot +802 -0
- data/doc/dot/f_13.jpg +0 -0
- data/doc/dot/f_14.dot +802 -0
- data/doc/dot/f_14.jpg +0 -0
- data/doc/dot/f_15.dot +802 -0
- data/doc/dot/f_15.jpg +0 -0
- data/doc/dot/f_16.dot +802 -0
- data/doc/dot/f_16.jpg +0 -0
- data/doc/dot/f_17.dot +802 -0
- data/doc/dot/f_17.jpg +0 -0
- data/doc/dot/f_18.dot +14 -0
- data/doc/dot/f_18.jpg +0 -0
- data/doc/dot/f_19.dot +802 -0
- data/doc/dot/f_19.jpg +0 -0
- data/doc/dot/f_2.dot +14 -0
- data/doc/dot/f_2.jpg +0 -0
- data/doc/dot/f_20.dot +802 -0
- data/doc/dot/f_20.jpg +0 -0
- data/doc/dot/f_21.dot +802 -0
- data/doc/dot/f_21.jpg +0 -0
- data/doc/dot/f_22.dot +802 -0
- data/doc/dot/f_22.jpg +0 -0
- data/doc/dot/f_23.dot +802 -0
- data/doc/dot/f_23.jpg +0 -0
- data/doc/dot/f_24.dot +802 -0
- data/doc/dot/f_24.jpg +0 -0
- data/doc/dot/f_25.dot +817 -0
- data/doc/dot/f_25.jpg +0 -0
- data/doc/dot/f_26.dot +29 -0
- data/doc/dot/f_26.jpg +0 -0
- data/doc/dot/f_27.dot +802 -0
- data/doc/dot/f_27.jpg +0 -0
- data/doc/dot/f_28.dot +802 -0
- data/doc/dot/f_28.jpg +0 -0
- data/doc/dot/f_29.dot +802 -0
- data/doc/dot/f_29.jpg +0 -0
- data/doc/dot/f_3.dot +14 -0
- data/doc/dot/f_3.jpg +0 -0
- data/doc/dot/f_30.dot +802 -0
- data/doc/dot/f_30.jpg +0 -0
- data/doc/dot/f_31.dot +802 -0
- data/doc/dot/f_31.jpg +0 -0
- data/doc/dot/f_32.dot +802 -0
- data/doc/dot/f_32.jpg +0 -0
- data/doc/dot/f_33.dot +802 -0
- data/doc/dot/f_33.jpg +0 -0
- data/doc/dot/f_34.dot +802 -0
- data/doc/dot/f_34.jpg +0 -0
- data/doc/dot/f_35.dot +802 -0
- data/doc/dot/f_35.jpg +0 -0
- data/doc/dot/f_36.dot +802 -0
- data/doc/dot/f_36.jpg +0 -0
- data/doc/dot/f_37.dot +802 -0
- data/doc/dot/f_37.jpg +0 -0
- data/doc/dot/f_38.dot +54 -0
- data/doc/dot/f_38.jpg +0 -0
- data/doc/dot/f_39.dot +802 -0
- data/doc/dot/f_39.jpg +0 -0
- data/doc/dot/f_4.dot +802 -0
- data/doc/dot/f_4.jpg +0 -0
- data/doc/dot/f_40.dot +802 -0
- data/doc/dot/f_40.jpg +0 -0
- data/doc/dot/f_41.dot +802 -0
- data/doc/dot/f_41.jpg +0 -0
- data/doc/dot/f_42.dot +802 -0
- data/doc/dot/f_42.jpg +0 -0
- data/doc/dot/f_43.dot +802 -0
- data/doc/dot/f_43.jpg +0 -0
- data/doc/dot/f_44.dot +802 -0
- data/doc/dot/f_44.jpg +0 -0
- data/doc/dot/f_5.dot +802 -0
- data/doc/dot/f_5.jpg +0 -0
- data/doc/dot/f_6.dot +802 -0
- data/doc/dot/f_6.jpg +0 -0
- data/doc/dot/f_7.dot +802 -0
- data/doc/dot/f_7.jpg +0 -0
- data/doc/dot/f_8.dot +802 -0
- data/doc/dot/f_8.jpg +0 -0
- data/doc/dot/f_9.dot +802 -0
- data/doc/dot/f_9.jpg +0 -0
- data/doc/dot/m_10_0.dot +802 -0
- data/doc/dot/m_10_0.jpg +0 -0
- data/doc/dot/m_11_0.dot +734 -0
- data/doc/dot/m_11_0.jpg +0 -0
- data/doc/dot/m_12_0.dot +802 -0
- data/doc/dot/m_12_0.jpg +0 -0
- data/doc/dot/m_13_0.dot +802 -0
- data/doc/dot/m_13_0.jpg +0 -0
- data/doc/dot/m_14_0.dot +802 -0
- data/doc/dot/m_14_0.jpg +0 -0
- data/doc/dot/m_15_0.dot +802 -0
- data/doc/dot/m_15_0.jpg +0 -0
- data/doc/dot/m_16_0.dot +802 -0
- data/doc/dot/m_16_0.jpg +0 -0
- data/doc/dot/m_17_0.dot +802 -0
- data/doc/dot/m_17_0.jpg +0 -0
- data/doc/dot/m_18_0.dot +734 -0
- data/doc/dot/m_18_0.jpg +0 -0
- data/doc/dot/m_19_0.dot +802 -0
- data/doc/dot/m_19_0.jpg +0 -0
- data/doc/dot/m_20_0.dot +802 -0
- data/doc/dot/m_20_0.jpg +0 -0
- data/doc/dot/m_21_0.dot +802 -0
- data/doc/dot/m_21_0.jpg +0 -0
- data/doc/dot/m_22_0.dot +802 -0
- data/doc/dot/m_22_0.jpg +0 -0
- data/doc/dot/m_23_0.dot +802 -0
- data/doc/dot/m_23_0.jpg +0 -0
- data/doc/dot/m_24_0.dot +802 -0
- data/doc/dot/m_24_0.jpg +0 -0
- data/doc/dot/m_25_0.dot +802 -0
- data/doc/dot/m_25_0.jpg +0 -0
- data/doc/dot/m_26_0.dot +734 -0
- data/doc/dot/m_26_0.jpg +0 -0
- data/doc/dot/m_27_0.dot +802 -0
- data/doc/dot/m_27_0.jpg +0 -0
- data/doc/dot/m_28_0.dot +802 -0
- data/doc/dot/m_28_0.jpg +0 -0
- data/doc/dot/m_29_0.dot +802 -0
- data/doc/dot/m_29_0.jpg +0 -0
- data/doc/dot/m_30_0.dot +802 -0
- data/doc/dot/m_30_0.jpg +0 -0
- data/doc/dot/m_31_0.dot +802 -0
- data/doc/dot/m_31_0.jpg +0 -0
- data/doc/dot/m_32_0.dot +802 -0
- data/doc/dot/m_32_0.jpg +0 -0
- data/doc/dot/m_33_0.dot +802 -0
- data/doc/dot/m_33_0.jpg +0 -0
- data/doc/dot/m_34_0.dot +802 -0
- data/doc/dot/m_34_0.jpg +0 -0
- data/doc/dot/m_35_0.dot +802 -0
- data/doc/dot/m_35_0.jpg +0 -0
- data/doc/dot/m_36_0.dot +802 -0
- data/doc/dot/m_36_0.jpg +0 -0
- data/doc/dot/m_37_0.dot +802 -0
- data/doc/dot/m_37_0.jpg +0 -0
- data/doc/dot/m_38_0.dot +54 -0
- data/doc/dot/m_38_0.jpg +0 -0
- data/doc/dot/m_39_0.dot +802 -0
- data/doc/dot/m_39_0.jpg +0 -0
- data/doc/dot/m_40_0.dot +802 -0
- data/doc/dot/m_40_0.jpg +0 -0
- data/doc/dot/m_41_0.dot +802 -0
- data/doc/dot/m_41_0.jpg +0 -0
- data/doc/dot/m_42_0.dot +802 -0
- data/doc/dot/m_42_0.jpg +0 -0
- data/doc/dot/m_43_0.dot +802 -0
- data/doc/dot/m_43_0.jpg +0 -0
- data/doc/dot/m_44_0.dot +802 -0
- data/doc/dot/m_44_0.jpg +0 -0
- data/doc/dot/m_4_0.dot +802 -0
- data/doc/dot/m_4_0.jpg +0 -0
- data/doc/dot/m_5_0.dot +802 -0
- data/doc/dot/m_5_0.jpg +0 -0
- data/doc/dot/m_6_0.dot +802 -0
- data/doc/dot/m_6_0.jpg +0 -0
- data/doc/dot/m_7_0.dot +802 -0
- data/doc/dot/m_7_0.jpg +0 -0
- data/doc/dot/m_8_0.dot +802 -0
- data/doc/dot/m_8_0.jpg +0 -0
- data/doc/dot/m_9_0.dot +802 -0
- data/doc/dot/m_9_0.jpg +0 -0
- data/doc/files/DEPENDS.html +107 -0
- data/doc/files/HISTORY.html +316 -0
- data/doc/files/INSTALL.html +126 -0
- data/doc/files/README.html +1223 -0
- data/doc/files/TODO.html +148 -0
- data/doc/files/TUTORIAL.html +392 -0
- data/doc/files/VERSION.html +107 -0
- data/doc/files/bin/rq_rb.html +231 -0
- data/doc/files/install_rb.html +188 -0
- data/doc/files/install_rb.src/M000001.html +53 -0
- data/doc/files/install_rb.src/M000002.html +43 -0
- data/doc/files/lib/rq-1_0_0/backer_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/configfile_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/configurator_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/creator_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/defaultconfig_txt.html +110 -0
- data/doc/files/lib/rq-1_0_0/deleter_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/executor_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/feeder_rb.html +178 -0
- data/doc/files/lib/rq-1_0_0/job_rb.html +176 -0
- data/doc/files/lib/rq-1_0_0/jobqueue_rb.html +177 -0
- data/doc/files/lib/rq-1_0_0/jobrunner_rb.html +175 -0
- data/doc/files/lib/rq-1_0_0/jobrunnerdaemon_rb.html +179 -0
- data/doc/files/lib/rq-1_0_0/lister_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/locker_rb.html +175 -0
- data/doc/files/lib/rq-1_0_0/logging_rb.html +178 -0
- data/doc/files/lib/rq-1_0_0/mainhelper_rb.html +175 -0
- data/doc/files/lib/rq-1_0_0/qdb_rb.html +177 -0
- data/doc/files/lib/rq-1_0_0/querier_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/refresher_rb.html +167 -0
- data/doc/files/lib/rq-1_0_0/relayer_rb.html +178 -0
- data/doc/files/lib/rq-1_0_0/sleepcycle_rb.html +167 -0
- data/doc/files/lib/rq-1_0_0/snapshotter_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/statuslister_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/submitter_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/updater_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/usage_rb.html +174 -0
- data/doc/files/lib/rq-1_0_0/util_rb.html +176 -0
- data/doc/files/lib/rq-2_0_0/backer_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/configfile_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/configurator_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/creator_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/defaultconfig_txt.html +110 -0
- data/doc/files/lib/rq-2_0_0/deleter_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/executor_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/feeder_rb.html +184 -0
- data/doc/files/lib/rq-2_0_0/job_rb.html +182 -0
- data/doc/files/lib/rq-2_0_0/jobqueue_rb.html +185 -0
- data/doc/files/lib/rq-2_0_0/jobrunner_rb.html +181 -0
- data/doc/files/lib/rq-2_0_0/jobrunnerdaemon_rb.html +185 -0
- data/doc/files/lib/rq-2_0_0/lister_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/locker_rb.html +181 -0
- data/doc/files/lib/rq-2_0_0/logging_rb.html +184 -0
- data/doc/files/lib/rq-2_0_0/mainhelper_rb.html +181 -0
- data/doc/files/lib/rq-2_0_0/orderedautohash_rb.html +182 -0
- data/doc/files/lib/rq-2_0_0/orderedhash_rb.html +138 -0
- data/doc/files/lib/rq-2_0_0/qdb_rb.html +184 -0
- data/doc/files/lib/rq-2_0_0/querier_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/refresher_rb.html +173 -0
- data/doc/files/lib/rq-2_0_0/relayer_rb.html +184 -0
- data/doc/files/lib/rq-2_0_0/rotater_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/sleepcycle_rb.html +173 -0
- data/doc/files/lib/rq-2_0_0/snapshotter_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/statuslister_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/submitter_rb.html +181 -0
- data/doc/files/lib/rq-2_0_0/updater_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/usage_rb.html +180 -0
- data/doc/files/lib/rq-2_0_0/util_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/backer_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/configfile_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/configurator_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/creator_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/defaultconfig_txt.html +110 -0
- data/doc/files/lib/rq-2_3_1/deleter_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/executor_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/feeder_rb.html +187 -0
- data/doc/files/lib/rq-2_3_1/job_rb.html +185 -0
- data/doc/files/lib/rq-2_3_1/jobqueue_rb.html +187 -0
- data/doc/files/lib/rq-2_3_1/jobrunner_rb.html +184 -0
- data/doc/files/lib/rq-2_3_1/jobrunnerdaemon_rb.html +187 -0
- data/doc/files/lib/rq-2_3_1/lister_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/locker_rb.html +183 -0
- data/doc/files/lib/rq-2_3_1/logging_rb.html +186 -0
- data/doc/files/lib/rq-2_3_1/mainhelper_rb.html +183 -0
- data/doc/files/lib/rq-2_3_1/orderedautohash_rb.html +184 -0
- data/doc/files/lib/rq-2_3_1/orderedhash_rb.html +138 -0
- data/doc/files/lib/rq-2_3_1/qdb_rb.html +188 -0
- data/doc/files/lib/rq-2_3_1/querier_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/refresher_rb.html +175 -0
- data/doc/files/lib/rq-2_3_1/relayer_rb.html +186 -0
- data/doc/files/lib/rq-2_3_1/resubmitter_rb.html +183 -0
- data/doc/files/lib/rq-2_3_1/rotater_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/sleepcycle_rb.html +175 -0
- data/doc/files/lib/rq-2_3_1/snapshotter_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/statuslister_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/submitter_rb.html +183 -0
- data/doc/files/lib/rq-2_3_1/updater_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/usage_rb.html +182 -0
- data/doc/files/lib/rq-2_3_1/util_rb.html +184 -0
- data/doc/files/lib/rq-2_3_1_rb.html +153 -0
- data/doc/files/lib/rq-2_3_2/backer_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/configfile_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/configurator_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/creator_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/defaultconfig_txt.html +110 -0
- data/doc/files/lib/rq-2_3_2/deleter_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/executor_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/feeder_rb.html +191 -0
- data/doc/files/lib/rq-2_3_2/ioviewer_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/job_rb.html +189 -0
- data/doc/files/lib/rq-2_3_2/jobqueue_rb.html +192 -0
- data/doc/files/lib/rq-2_3_2/jobrunner_rb.html +188 -0
- data/doc/files/lib/rq-2_3_2/jobrunnerdaemon_rb.html +191 -0
- data/doc/files/lib/rq-2_3_2/lister_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/locker_rb.html +187 -0
- data/doc/files/lib/rq-2_3_2/logging_rb.html +190 -0
- data/doc/files/lib/rq-2_3_2/mainhelper_rb.html +188 -0
- data/doc/files/lib/rq-2_3_2/orderedautohash_rb.html +188 -0
- data/doc/files/lib/rq-2_3_2/orderedhash_rb.html +138 -0
- data/doc/files/lib/rq-2_3_2/qdb_rb.html +193 -0
- data/doc/files/lib/rq-2_3_2/querier_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/recoverer_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/refresher_rb.html +179 -0
- data/doc/files/lib/rq-2_3_2/relayer_rb.html +190 -0
- data/doc/files/lib/rq-2_3_2/resubmitter_rb.html +187 -0
- data/doc/files/lib/rq-2_3_2/rotater_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/sleepcycle_rb.html +179 -0
- data/doc/files/lib/rq-2_3_2/snapshotter_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/statuslister_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/submitter_rb.html +187 -0
- data/doc/files/lib/rq-2_3_2/updater_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/usage_rb.html +186 -0
- data/doc/files/lib/rq-2_3_2/util_rb.html +188 -0
- data/doc/files/lib/rq-2_3_3/backer_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/configfile_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/configurator_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/creator_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/defaultconfig_txt.html +110 -0
- data/doc/files/lib/rq-2_3_3/deleter_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/executor_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/feeder_rb.html +191 -0
- data/doc/files/lib/rq-2_3_3/ioviewer_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/job_rb.html +189 -0
- data/doc/files/lib/rq-2_3_3/jobqueue_rb.html +192 -0
- data/doc/files/lib/rq-2_3_3/jobrunner_rb.html +188 -0
- data/doc/files/lib/rq-2_3_3/jobrunnerdaemon_rb.html +191 -0
- data/doc/files/lib/rq-2_3_3/lister_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/locker_rb.html +187 -0
- data/doc/files/lib/rq-2_3_3/logging_rb.html +190 -0
- data/doc/files/lib/rq-2_3_3/mainhelper_rb.html +188 -0
- data/doc/files/lib/rq-2_3_3/orderedautohash_rb.html +188 -0
- data/doc/files/lib/rq-2_3_3/orderedhash_rb.html +138 -0
- data/doc/files/lib/rq-2_3_3/qdb_rb.html +193 -0
- data/doc/files/lib/rq-2_3_3/querier_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/recoverer_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/refresher_rb.html +179 -0
- data/doc/files/lib/rq-2_3_3/relayer_rb.html +190 -0
- data/doc/files/lib/rq-2_3_3/resubmitter_rb.html +187 -0
- data/doc/files/lib/rq-2_3_3/rotater_rb.html +187 -0
- data/doc/files/lib/rq-2_3_3/sleepcycle_rb.html +179 -0
- data/doc/files/lib/rq-2_3_3/snapshotter_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/statuslister_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/submitter_rb.html +187 -0
- data/doc/files/lib/rq-2_3_3/updater_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/usage_rb.html +186 -0
- data/doc/files/lib/rq-2_3_3/util_rb.html +188 -0
- data/doc/files/lib/rq-3_0_0/backer_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/configfile_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/configurator_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/creator_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/cron_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/defaultconfig_txt.html +110 -0
- data/doc/files/lib/rq-3_0_0/deleter_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/executor_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/feeder_rb.html +199 -0
- data/doc/files/lib/rq-3_0_0/ioviewer_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/job_rb.html +197 -0
- data/doc/files/lib/rq-3_0_0/jobqueue_rb.html +200 -0
- data/doc/files/lib/rq-3_0_0/jobrunner_rb.html +196 -0
- data/doc/files/lib/rq-3_0_0/jobrunnerdaemon_rb.html +199 -0
- data/doc/files/lib/rq-3_0_0/lister_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/locker_rb.html +195 -0
- data/doc/files/lib/rq-3_0_0/logging_rb.html +198 -0
- data/doc/files/lib/rq-3_0_0/mainhelper_rb.html +196 -0
- data/doc/files/lib/rq-3_0_0/orderedautohash_rb.html +196 -0
- data/doc/files/lib/rq-3_0_0/orderedhash_rb.html +138 -0
- data/doc/files/lib/rq-3_0_0/qdb_rb.html +201 -0
- data/doc/files/lib/rq-3_0_0/querier_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/recoverer_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/refresher_rb.html +187 -0
- data/doc/files/lib/rq-3_0_0/relayer_rb.html +198 -0
- data/doc/files/lib/rq-3_0_0/resource_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/resourcemanager_rb.html +187 -0
- data/doc/files/lib/rq-3_0_0/resubmitter_rb.html +195 -0
- data/doc/files/lib/rq-3_0_0/rotater_rb.html +195 -0
- data/doc/files/lib/rq-3_0_0/sleepcycle_rb.html +187 -0
- data/doc/files/lib/rq-3_0_0/snapshotter_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/sqlite_rb.html +160 -0
- data/doc/files/lib/rq-3_0_0/statuslister_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/submitter_rb.html +195 -0
- data/doc/files/lib/rq-3_0_0/toucher_rb.html +195 -0
- data/doc/files/lib/rq-3_0_0/updater_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/usage_rb.html +194 -0
- data/doc/files/lib/rq-3_0_0/util_rb.html +196 -0
- data/doc/files/lib/rq_rb.html +244 -0
- data/doc/fr_class_index.html +73 -0
- data/doc/fr_file_index.html +71 -0
- data/doc/fr_method_index.html +323 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +172 -0
- data/extconf.rb +150 -0
- data/gemspec.rb +32 -0
- data/install.rb +75 -8
- data/lib/{rq-0.1.7.rb → rq-3.0.0.rb} +52 -10
- data/lib/{rq-0.1.7 → rq-3.0.0}/backer.rb +11 -7
- data/lib/{rq-0.1.7 → rq-3.0.0}/configfile.rb +21 -17
- data/lib/{rq-0.1.7 → rq-3.0.0}/configurator.rb +10 -6
- data/lib/rq-3.0.0/creator.rb +46 -0
- data/lib/rq-3.0.0/cron.rb +125 -0
- data/lib/{rq-0.1.7 → rq-3.0.0}/defaultconfig.txt +0 -0
- data/lib/rq-3.0.0/deleter.rb +51 -0
- data/lib/rq-3.0.0/executor.rb +40 -0
- data/lib/{rq-0.1.7 → rq-3.0.0}/feeder.rb +245 -91
- data/lib/rq-3.0.0/i686-linux/_sqlite.so +0 -0
- data/lib/rq-3.0.0/ioviewer.rb +48 -0
- data/lib/rq-3.0.0/job.rb +51 -0
- data/lib/rq-3.0.0/jobqueue.rb +899 -0
- data/lib/rq-3.0.0/jobrunner.rb +104 -0
- data/lib/{rq-0.1.7 → rq-3.0.0}/jobrunnerdaemon.rb +41 -27
- data/lib/rq-3.0.0/lister.rb +47 -0
- data/lib/rq-3.0.0/local/bin/sqlite +0 -0
- data/lib/rq-3.0.0/local/include/sqlite.h +868 -0
- data/lib/rq-3.0.0/local/lib/libsqlite.a +0 -0
- data/lib/rq-3.0.0/local/lib/libsqlite.la +35 -0
- data/lib/rq-3.0.0/local/lib/libsqlite.so +0 -0
- data/lib/rq-3.0.0/local/lib/libsqlite.so.0 +0 -0
- data/lib/rq-3.0.0/local/lib/libsqlite.so.0.8.6 +0 -0
- data/lib/rq-3.0.0/local/lib/pkgconfig/sqlite.pc +12 -0
- data/lib/{rq-0.1.7 → rq-3.0.0}/locker.rb +12 -6
- data/lib/{rq-0.1.7 → rq-3.0.0}/logging.rb +49 -42
- data/lib/rq-3.0.0/mainhelper.rb +184 -0
- data/lib/rq-3.0.0/orderedautohash.rb +39 -0
- data/lib/rq-3.0.0/orderedhash.rb +240 -0
- data/lib/{rq-0.1.7 → rq-3.0.0}/qdb.rb +183 -84
- data/lib/rq-3.0.0/querier.rb +98 -0
- data/lib/rq-3.0.0/recoverer.rb +28 -0
- data/lib/{rq-0.1.7 → rq-3.0.0}/refresher.rb +16 -8
- data/lib/rq-3.0.0/relayer.rb +283 -0
- data/lib/rq-3.0.0/resource.rb +22 -0
- data/lib/rq-3.0.0/resourcemanager.rb +40 -0
- data/lib/rq-3.0.0/resubmitter.rb +96 -0
- data/lib/rq-3.0.0/rotater.rb +98 -0
- data/lib/{rq-0.1.7 → rq-3.0.0}/sleepcycle.rb +14 -14
- data/lib/rq-3.0.0/snapshotter.rb +40 -0
- data/lib/rq-3.0.0/sqlite.rb +293 -0
- data/lib/rq-3.0.0/statuslister.rb +48 -0
- data/lib/rq-3.0.0/submitter.rb +109 -0
- data/lib/rq-3.0.0/toucher.rb +177 -0
- data/lib/rq-3.0.0/updater.rb +95 -0
- data/lib/rq-3.0.0/usage.rb +1157 -0
- data/lib/{rq-0.1.7 → rq-3.0.0}/util.rb +74 -56
- data/lib/rq.rb +52 -12
- data/rdoc.sh +17 -0
- data/rq +3 -1
- data/white_box/joblist +8 -0
- metadata +779 -96
- data/DEPENDS +0 -5
- data/HISTORY +0 -26
- data/VERSION +0 -1
- data/bin/rq-0.1.7 +0 -410
- data/lib/rq-0.1.7/creator.rb +0 -23
- data/lib/rq-0.1.7/deleter.rb +0 -39
- data/lib/rq-0.1.7/executor.rb +0 -41
- data/lib/rq-0.1.7/job.rb +0 -51
- data/lib/rq-0.1.7/jobqueue.rb +0 -432
- data/lib/rq-0.1.7/jobrunner.rb +0 -63
- data/lib/rq-0.1.7/lister.rb +0 -22
- data/lib/rq-0.1.7/mainhelper.rb +0 -53
- data/lib/rq-0.1.7/querier.rb +0 -33
- data/lib/rq-0.1.7/snapshotter.rb +0 -25
- data/lib/rq-0.1.7/statuslister.rb +0 -22
- data/lib/rq-0.1.7/submitter.rb +0 -90
- data/lib/rq-0.1.7/updater.rb +0 -95
- data/lib/rq-0.1.7/usage.rb +0 -609
- data/rdoc.cmd +0 -2
- data/rq.gemspec +0 -36
- data/rq.help +0 -552
@@ -1,18 +1,22 @@
|
|
1
1
|
unless defined? $__rq_configfile__
|
2
2
|
module RQ
|
3
|
-
|
3
|
+
#--{{{
|
4
4
|
LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless
|
5
5
|
defined? LIBDIR
|
6
6
|
|
7
7
|
require 'yaml'
|
8
8
|
|
9
|
-
|
10
|
-
#
|
9
|
+
#
|
10
|
+
# the ConfigFile class is a thin class that munges yaml input and populates
|
11
|
+
# itself
|
12
|
+
#
|
13
|
+
class ConfigFile < ::Hash
|
14
|
+
#--{{{
|
11
15
|
DEFAULT_CONFIG = LIBDIR + 'defaultconfig.txt'
|
12
16
|
|
13
17
|
class << self
|
14
18
|
def gen_template(arg = nil)
|
15
|
-
|
19
|
+
#--{{{
|
16
20
|
@data ||= IO::read(DEFAULT_CONFIG)
|
17
21
|
case arg
|
18
22
|
when IO
|
@@ -23,16 +27,16 @@ unless defined? $__rq_configfile__
|
|
23
27
|
STDOUT.write @data
|
24
28
|
end
|
25
29
|
self
|
26
|
-
|
30
|
+
#--}}}
|
27
31
|
end
|
28
32
|
def load_default
|
29
|
-
|
33
|
+
#--{{{
|
30
34
|
@data ||= IO::read(DEFAULT_CONFIG)
|
31
35
|
@default ||= YAML::load(munge(@data)) || {}
|
32
|
-
|
36
|
+
#--}}}
|
33
37
|
end
|
34
38
|
def any(basename, *dirnames)
|
35
|
-
|
39
|
+
#--{{{
|
36
40
|
config = nil
|
37
41
|
dirnames.each do |dirname|
|
38
42
|
path = File::join dirname, basename
|
@@ -42,17 +46,17 @@ unless defined? $__rq_configfile__
|
|
42
46
|
end
|
43
47
|
end
|
44
48
|
config || self::new('default')
|
45
|
-
|
49
|
+
#--}}}
|
46
50
|
end
|
47
51
|
def munge buf
|
48
|
-
|
52
|
+
#--{{{
|
49
53
|
buf.gsub(%r/\t/o,' ')
|
50
|
-
|
54
|
+
#--}}}
|
51
55
|
end
|
52
56
|
end
|
53
57
|
attr :path
|
54
58
|
def initialize path
|
55
|
-
|
59
|
+
#--{{{
|
56
60
|
@path = nil
|
57
61
|
yaml = nil
|
58
62
|
if path.nil? or path and path =~ /^\s*default/io
|
@@ -63,16 +67,16 @@ unless defined? $__rq_configfile__
|
|
63
67
|
@path = path
|
64
68
|
end
|
65
69
|
self.update yaml
|
66
|
-
|
70
|
+
#--}}}
|
67
71
|
end
|
68
72
|
def to_hash
|
69
|
-
|
73
|
+
#--{{{
|
70
74
|
{}.update self
|
71
|
-
|
75
|
+
#--}}}
|
72
76
|
end
|
73
|
-
|
77
|
+
#--}}}
|
74
78
|
end # class ConfigFile
|
75
|
-
|
79
|
+
#--}}}
|
76
80
|
end # module RQ
|
77
81
|
$__rq_configfile__ = __FILE__
|
78
82
|
end
|
@@ -1,16 +1,20 @@
|
|
1
1
|
unless defined? $__rq_configurator__
|
2
2
|
module RQ
|
3
|
-
|
3
|
+
#--{{{
|
4
4
|
LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless
|
5
5
|
defined? LIBDIR
|
6
6
|
|
7
7
|
require LIBDIR + 'mainhelper'
|
8
8
|
|
9
|
+
#
|
10
|
+
# a Configurator adds key/value pairs to a queue's configuration. these
|
11
|
+
# key/value pairs are not currently used, but will be in a future release
|
12
|
+
#
|
9
13
|
class Configurator < MainHelper
|
10
|
-
|
11
|
-
|
14
|
+
#--{{{
|
15
|
+
#--}}}
|
12
16
|
def configure
|
13
|
-
|
17
|
+
#--{{{
|
14
18
|
set_q
|
15
19
|
attributes = {}
|
16
20
|
unless @argv.empty?
|
@@ -27,10 +31,10 @@ unless defined? $__rq_configurator__
|
|
27
31
|
end
|
28
32
|
end
|
29
33
|
y attributes
|
30
|
-
|
34
|
+
#--}}}
|
31
35
|
end
|
32
36
|
end # class Configurator
|
33
|
-
|
37
|
+
#--}}}
|
34
38
|
end # module RQ
|
35
39
|
$__rq_configurator__ = __FILE__
|
36
40
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
unless defined? $__rq_creator__
|
2
|
+
module RQ
|
3
|
+
#--{{{
|
4
|
+
LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless
|
5
|
+
defined? LIBDIR
|
6
|
+
|
7
|
+
require LIBDIR + 'mainhelper'
|
8
|
+
|
9
|
+
#
|
10
|
+
# a queue is a directory
|
11
|
+
#
|
12
|
+
# the Creator class is responsible for initializing the queue directory and
|
13
|
+
# all supporting files. these include:
|
14
|
+
# * the sqlite database (binary)
|
15
|
+
# * the sqlite database schema description file (text)
|
16
|
+
# * the empty sentinel file used for locking (text - empty)
|
17
|
+
#
|
18
|
+
# it is an error to attempt to initialize a queue which already exists
|
19
|
+
#
|
20
|
+
class Creator < MainHelper
|
21
|
+
#--{{{
|
22
|
+
def create
|
23
|
+
#--{{{
|
24
|
+
raise "q <#{ @qpath }> exists!" if test ?e, @qpath
|
25
|
+
@q = JobQueue::create @qpath, 'logger' => @logger
|
26
|
+
|
27
|
+
unless quiet?
|
28
|
+
puts '---'
|
29
|
+
puts "q: #{ @q.path }"
|
30
|
+
puts "db: #{ @q.db.path }"
|
31
|
+
puts "schema: #{ @q.db.schema }"
|
32
|
+
puts "lock: #{ @q.db.lockfile }"
|
33
|
+
puts "bin: #{ @q.bin }"
|
34
|
+
puts "stdin: #{ @q.stdin }"
|
35
|
+
puts "stdout: #{ @q.stdout }"
|
36
|
+
puts "stderr: #{ @q.stderr }"
|
37
|
+
end
|
38
|
+
self
|
39
|
+
#--}}}
|
40
|
+
end
|
41
|
+
#--}}}
|
42
|
+
end # class Creator
|
43
|
+
#--}}}
|
44
|
+
end # module RQ
|
45
|
+
$__rq_creator__ = __FILE__
|
46
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
unless defined? $__rq_cron__
|
2
|
+
module RQ
|
3
|
+
#--{{{
|
4
|
+
LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless
|
5
|
+
defined? LIBDIR
|
6
|
+
|
7
|
+
require LIBDIR + 'mainhelper'
|
8
|
+
|
9
|
+
#
|
10
|
+
# a class for managing crontab entries and to start/stop rq
|
11
|
+
#
|
12
|
+
class Cron < MainHelper
|
13
|
+
#--{{{
|
14
|
+
def initialize *a, &b
|
15
|
+
#--{{{
|
16
|
+
super
|
17
|
+
ruby = Util::which_ruby
|
18
|
+
this = Util::realpath( File.expand_path( $0 ) )
|
19
|
+
q = qpath
|
20
|
+
|
21
|
+
@cmd = "#{ ruby } #{ this } #{ q }"
|
22
|
+
@md5 = lambda{|mode| Digest::MD5::hexdigest "#{ @cmd } #{ mode }" }
|
23
|
+
#--}}}
|
24
|
+
end
|
25
|
+
def cron
|
26
|
+
#--{{{
|
27
|
+
which = @argv.shift || 'start'
|
28
|
+
which = which.strip.downcase
|
29
|
+
#abort "arg not add|start|shutdown|stop" unless %w( start shutdown stop ).include? which
|
30
|
+
msg = "cron_#{ which }"
|
31
|
+
begin
|
32
|
+
send msg
|
33
|
+
rescue NoMethodError
|
34
|
+
raise ArgumentError, which
|
35
|
+
end
|
36
|
+
self
|
37
|
+
#--}}}
|
38
|
+
end
|
39
|
+
def cron_add
|
40
|
+
#--{{{
|
41
|
+
lines = `crontab -l`.split "\n"
|
42
|
+
|
43
|
+
found = nil
|
44
|
+
|
45
|
+
re = %r/###\s*md5:#{ @md5[:start] }/
|
46
|
+
|
47
|
+
lines.each do |line|
|
48
|
+
line.strip!
|
49
|
+
next if line[ %r/^\s*#/ ]
|
50
|
+
min, hour, dom, mon, dow, entry = line.split %r/\s+/, 6
|
51
|
+
next unless entry
|
52
|
+
entry.strip!
|
53
|
+
entry.gsub! %r/#[^'"]$/, ''
|
54
|
+
entry.strip!
|
55
|
+
found = re.match entry
|
56
|
+
break if found
|
57
|
+
end
|
58
|
+
|
59
|
+
unless found
|
60
|
+
tmp = Tempfile::new Process::pid.to_s
|
61
|
+
lines.each{|line| tmp << "#{ line }\n"}
|
62
|
+
opts = @options.map{|kv| "'--#{ kv.join('=') }'" }.join(' ')
|
63
|
+
entry = "*/15 * * * * #{ @cmd } start #{ opts } ###md5:#{ @md5[:start] }\n"
|
64
|
+
tmp << entry
|
65
|
+
tmp.close
|
66
|
+
system("crontab #{ tmp.path }") or abort("failed to cronify!")
|
67
|
+
tmp.close!
|
68
|
+
puts entry
|
69
|
+
end
|
70
|
+
#--}}}
|
71
|
+
end
|
72
|
+
def cron_start
|
73
|
+
#--{{{
|
74
|
+
cron_add
|
75
|
+
main.start
|
76
|
+
#--}}}
|
77
|
+
end
|
78
|
+
def cron_delete
|
79
|
+
#--{{{
|
80
|
+
lines = `crontab -l`.split "\n"
|
81
|
+
|
82
|
+
re = %r/###\s*md5:#{ @md5[:start] }/
|
83
|
+
found = []
|
84
|
+
|
85
|
+
lines.each_with_index do |line, idx|
|
86
|
+
line.strip!
|
87
|
+
next if line[ %r/^\s*#/ ]
|
88
|
+
min, hour, dom, mon, dow, entry = line.split %r/\s+/, 6
|
89
|
+
next unless entry
|
90
|
+
entry.strip!
|
91
|
+
entry.gsub! %r/#[^'"]$/, ''
|
92
|
+
entry.strip!
|
93
|
+
found << idx if(re.match entry)
|
94
|
+
end
|
95
|
+
|
96
|
+
unless found.empty?
|
97
|
+
deleted = lines[*found]
|
98
|
+
lines.delete_at *found
|
99
|
+
tmp = Tempfile::new Process::pid.to_s
|
100
|
+
lines.each{|line| tmp << "#{ line }\n"}
|
101
|
+
tmp.close
|
102
|
+
system("crontab #{ tmp.path }") or abort("failed to cronify!")
|
103
|
+
tmp.close!
|
104
|
+
puts deleted
|
105
|
+
end
|
106
|
+
#--}}}
|
107
|
+
end
|
108
|
+
def cron_shutdown
|
109
|
+
#--{{{
|
110
|
+
cron_delete
|
111
|
+
main.shutdown
|
112
|
+
#--}}}
|
113
|
+
end
|
114
|
+
def cron_stop
|
115
|
+
#--{{{
|
116
|
+
cron_delete
|
117
|
+
main.stop
|
118
|
+
#--}}}
|
119
|
+
end
|
120
|
+
#--}}}
|
121
|
+
end # class Cron
|
122
|
+
#--}}}
|
123
|
+
end # module RQ
|
124
|
+
$__rq_cron__ = __FILE__
|
125
|
+
end
|
File without changes
|
@@ -0,0 +1,51 @@
|
|
1
|
+
unless defined? $__rq_deleter__
|
2
|
+
module RQ
|
3
|
+
#--{{{
|
4
|
+
LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless
|
5
|
+
defined? LIBDIR
|
6
|
+
|
7
|
+
require LIBDIR + 'mainhelper'
|
8
|
+
|
9
|
+
#
|
10
|
+
# the Deleter class reads the command line, stdin, or an infile to determine
|
11
|
+
# the job ids (jid) of jobs to be deleted from the queue. jids may be
|
12
|
+
# specified on the command line or parsed from stdin or the infile. any
|
13
|
+
# input line matching 'jid : number' or 'number' is taken to be a line
|
14
|
+
# indicating a jid to delete.
|
15
|
+
#
|
16
|
+
class Deleter < MainHelper
|
17
|
+
#--{{{
|
18
|
+
def delete
|
19
|
+
#--{{{
|
20
|
+
set_q
|
21
|
+
|
22
|
+
whats = @argv
|
23
|
+
|
24
|
+
if whats.empty? and stdin?
|
25
|
+
pat = %r/^(?:\s*jid\s*:)?\s*(\d+)\s*$|^\s*(all)\s*$/io
|
26
|
+
while((line = stdin.gets))
|
27
|
+
match = pat.match line
|
28
|
+
next unless match
|
29
|
+
whats << (match[1] || match[2])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
#whats.map!{|what| what =~ %r/^\s*\d+\s*$/o ? Integer(what) : what}
|
34
|
+
|
35
|
+
raise "nothing to delete" if whats.empty?
|
36
|
+
|
37
|
+
if @options['quiet']
|
38
|
+
@q.delete(*whats)
|
39
|
+
else
|
40
|
+
@q.delete(*whats, &dumping_yaml_tuples)
|
41
|
+
end
|
42
|
+
|
43
|
+
@q.vacuum
|
44
|
+
#--}}}
|
45
|
+
end
|
46
|
+
#--}}}
|
47
|
+
end # class Deleter
|
48
|
+
#--}}}
|
49
|
+
end # module RQ
|
50
|
+
$__rq_deleter__ = __FILE__
|
51
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
unless defined? $__rq_executor__
|
2
|
+
module RQ
|
3
|
+
#--{{{
|
4
|
+
LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless
|
5
|
+
defined? LIBDIR
|
6
|
+
|
7
|
+
require LIBDIR + 'mainhelper'
|
8
|
+
|
9
|
+
#
|
10
|
+
# the Executor is for expert use only and executes arbitrary sql on the
|
11
|
+
# queue's db. the reason one should not do this directly with the sqlite
|
12
|
+
# command line program is that it will not respect the locking subsystem
|
13
|
+
# used in RQ - the Executor method will
|
14
|
+
#
|
15
|
+
class Executor < MainHelper
|
16
|
+
#--{{{
|
17
|
+
def execute
|
18
|
+
#--{{{
|
19
|
+
set_q
|
20
|
+
sql = @argv.join ' '
|
21
|
+
if sql.empty? and stdin?
|
22
|
+
debug{ "reading sql from stdin" }
|
23
|
+
while((buf = stdin.gets))
|
24
|
+
buf.strip!
|
25
|
+
buf.gsub! %r/#.*$/o, ''
|
26
|
+
next if buf.empty?
|
27
|
+
sql << "#{ buf } "
|
28
|
+
end
|
29
|
+
end
|
30
|
+
abort "no sql to execute" if sql.empty?
|
31
|
+
@q.qdb.transaction_retries = 0
|
32
|
+
@q.transaction{@q.execute(sql, &dumping_yaml_tuples)}
|
33
|
+
#--}}}
|
34
|
+
end
|
35
|
+
#--}}}
|
36
|
+
end # class Executor
|
37
|
+
#--}}}
|
38
|
+
end # module RQ
|
39
|
+
$__rq_executor__ = __FILE__
|
40
|
+
end
|
@@ -1,31 +1,45 @@
|
|
1
1
|
unless defined? $__rq_feeder__
|
2
2
|
module RQ
|
3
|
-
|
3
|
+
#--{{{
|
4
4
|
LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless
|
5
5
|
defined? LIBDIR
|
6
6
|
|
7
|
+
require 'fileutils'
|
8
|
+
|
7
9
|
require LIBDIR + 'mainhelper'
|
8
10
|
require LIBDIR + 'job'
|
9
11
|
require LIBDIR + 'jobrunner'
|
10
12
|
require LIBDIR + 'jobrunnerdaemon'
|
11
13
|
require LIBDIR + 'jobqueue'
|
12
14
|
|
15
|
+
|
16
|
+
#
|
17
|
+
# TODO - resolve elapsed time bug with throttle/sleep
|
18
|
+
#
|
19
|
+
|
20
|
+
#
|
21
|
+
# the Feeder class is responsible for running jobs from a queue - or
|
22
|
+
# 'feeding' from that queue. the mode of operation is essentially to run
|
23
|
+
# jobs as quickly as possible, return them to the queue, and then to run
|
24
|
+
# more jobs if any exist. if no jobs exist the Feeder will periodically
|
25
|
+
# poll the queue to see if any new jobs have arrived.
|
26
|
+
#
|
13
27
|
class Feeder < MainHelper
|
14
|
-
|
28
|
+
#--{{{
|
15
29
|
DEFAULT_MIN_SLEEP = 42
|
16
30
|
DEFAULT_MAX_SLEEP = 240
|
17
31
|
DEFAULT_FEED = 2
|
18
32
|
|
19
33
|
class << self
|
20
|
-
|
34
|
+
#--{{{
|
21
35
|
attr :min_sleep, true
|
22
36
|
attr :max_sleep, true
|
23
37
|
attr :feed, true
|
24
|
-
|
38
|
+
#--}}}
|
25
39
|
end
|
26
40
|
|
27
41
|
def feed
|
28
|
-
|
42
|
+
#--{{{
|
29
43
|
daemon do
|
30
44
|
gen_pidfile
|
31
45
|
@main.init_logging
|
@@ -37,12 +51,19 @@ unless defined? $__rq_feeder__
|
|
37
51
|
@started = Util::timestamp
|
38
52
|
@min_sleep = Integer(@options['min_sleep'] || defval('min_sleep'))
|
39
53
|
@max_sleep = Integer(@options['max_sleep'] || defval('max_sleep'))
|
40
|
-
@max_feed = Integer(@options['
|
54
|
+
@max_feed = Integer(@options['max_feed'] || defval('feed'))
|
41
55
|
@children = Hash::new
|
42
|
-
@jrd = JobRunnerDaemon::daemon
|
56
|
+
@jrd = JobRunnerDaemon::daemon @q
|
43
57
|
|
44
58
|
install_signal_handlers
|
45
59
|
|
60
|
+
if @daemon and not @quiet
|
61
|
+
STDOUT.puts "pid <#{ Process::pid }> started"
|
62
|
+
STDOUT.flush
|
63
|
+
end
|
64
|
+
|
65
|
+
install_redirects
|
66
|
+
|
46
67
|
info{ "** STARTED **" }
|
47
68
|
info{ "version <#{ RQ::VERSION }>" }
|
48
69
|
info{ "cmd <#{ @cmd }>" }
|
@@ -50,11 +71,15 @@ unless defined? $__rq_feeder__
|
|
50
71
|
info{ "pidfile <#{ @pidfile.path }>" }
|
51
72
|
info{ "jobrunnerdaemon uri <#{ @jrd.uri }> pid <#{ @jrd.pid }>" }
|
52
73
|
info{ "qpath <#{ @qpath }>" }
|
53
|
-
|
74
|
+
debug{ "mode <#{ @mode }>" }
|
75
|
+
debug{ "max_feed <#{ @max_feed }>" }
|
54
76
|
debug{ "min_sleep <#{ @min_sleep }>" }
|
55
77
|
debug{ "max_sleep <#{ @max_sleep }>" }
|
56
78
|
|
57
|
-
|
79
|
+
transaction do
|
80
|
+
fill_morgue
|
81
|
+
reap_zombie_ios
|
82
|
+
end
|
58
83
|
|
59
84
|
loop do
|
60
85
|
handle_signal if $rq_signaled
|
@@ -68,25 +93,22 @@ unless defined? $__rq_feeder__
|
|
68
93
|
end
|
69
94
|
end
|
70
95
|
end
|
71
|
-
|
96
|
+
#--}}}
|
72
97
|
end
|
73
98
|
def daemon
|
74
|
-
|
99
|
+
#--{{{
|
75
100
|
if @options['daemon']
|
76
101
|
fork do
|
77
102
|
Process::setsid
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
103
|
+
pid =
|
104
|
+
fork do
|
105
|
+
Dir::chdir(Util.realpath('~'))
|
106
|
+
File::umask 0
|
107
|
+
@daemon = true
|
108
|
+
yield
|
109
|
+
exit EXIT_SUCCESS
|
85
110
|
end
|
86
|
-
|
87
|
-
yield
|
88
|
-
exit EXIT_SUCCESS
|
89
|
-
end
|
111
|
+
# STDOUT.puts "#{ pid }"
|
90
112
|
exit!
|
91
113
|
end
|
92
114
|
exit!
|
@@ -95,89 +117,210 @@ unless defined? $__rq_feeder__
|
|
95
117
|
yield
|
96
118
|
exit EXIT_SUCCESS
|
97
119
|
end
|
98
|
-
|
120
|
+
#--}}}
|
99
121
|
end
|
100
122
|
def gen_pidfile name = nil
|
101
|
-
|
102
|
-
|
103
|
-
|
123
|
+
#--{{{
|
124
|
+
gen_pidfilepath
|
125
|
+
|
126
|
+
begin
|
127
|
+
FileUtils::mkdir_p(File::dirname(@pidfilepath))
|
128
|
+
rescue
|
129
|
+
nil
|
130
|
+
end
|
131
|
+
|
132
|
+
locked = nil
|
133
|
+
no_other_feeder = nil
|
134
|
+
|
135
|
+
2.times do
|
136
|
+
locked = false
|
137
|
+
no_other_feeder = false
|
138
|
+
|
139
|
+
@pidfile =
|
140
|
+
begin
|
141
|
+
open @pidfilepath, File::CREAT | File::EXCL | File::RDWR
|
142
|
+
rescue
|
143
|
+
open @pidfilepath, File::RDWR
|
144
|
+
end
|
145
|
+
|
146
|
+
ret = @pidfile.posixlock(File::LOCK_EX | File::LOCK_NB)
|
147
|
+
locked = (ret == 0)
|
148
|
+
|
104
149
|
begin
|
105
|
-
|
106
|
-
|
107
|
-
|
150
|
+
pid = Integer(IO::read(@pidfilepath)) rescue nil
|
151
|
+
|
152
|
+
unless pid
|
153
|
+
no_other_feeder = true
|
154
|
+
break
|
155
|
+
end
|
156
|
+
|
157
|
+
if Util::alive?(pid)
|
158
|
+
no_other_feeder = Process::pid == pid ? true : false
|
159
|
+
#no_other_feeder = false
|
160
|
+
#else
|
161
|
+
#no_other_feeder = false
|
162
|
+
#end
|
163
|
+
break
|
164
|
+
else
|
165
|
+
no_other_feeder = true
|
166
|
+
STDERR.puts "WARNING : process <#{ pid }> died holding lock on <#{ @pidfilepath }>"
|
167
|
+
STDERR.puts "WARNING : attempting autorecovery!"
|
168
|
+
break if locked
|
169
|
+
STDERR.puts "WARNING : your NFS locking setup is FUBAR - iptables or firewall issues!"
|
170
|
+
STDERR.puts "WARNING : attempting autorecovery!"
|
171
|
+
FileUtils::rm_f @pidfilepath
|
172
|
+
4.times{ sleep rand }
|
173
|
+
end
|
174
|
+
|
175
|
+
rescue Exception => e
|
176
|
+
STDERR.puts "WARNING : #{ e.message } (#{ e.class })"
|
108
177
|
end
|
109
|
-
|
110
|
-
|
111
|
-
|
178
|
+
end
|
179
|
+
|
180
|
+
|
181
|
+
unless(locked and no_other_feeder)
|
182
|
+
pid = Integer(IO::read(@pidfilepath)) rescue 'UNKNOWN'
|
112
183
|
if @options['quiet']
|
113
184
|
exit EXIT_FAILURE
|
114
185
|
else
|
115
|
-
|
186
|
+
abort "process <#{ pid }> is already feeding from this queue"
|
116
187
|
end
|
117
188
|
else
|
189
|
+
@pidfile.chmod 0600 rescue nil
|
118
190
|
@pidfile.rewind
|
119
191
|
@pidfile.sync = true
|
120
192
|
@pidfile.print Process::pid
|
121
193
|
@pidfile.truncate @pidfile.pos
|
122
|
-
|
194
|
+
@pidfile.flush
|
195
|
+
|
196
|
+
at_exit do
|
197
|
+
FileUtils::rm_f @pidfilepath rescue nil
|
198
|
+
@pidfile.posixlock File::LOCK_UN rescue nil
|
199
|
+
@pidfile.close rescue nil
|
200
|
+
end
|
123
201
|
end
|
124
|
-
|
202
|
+
#--}}}
|
125
203
|
end
|
126
|
-
def
|
127
|
-
|
204
|
+
def gen_pidfilepath
|
205
|
+
#--{{{
|
206
|
+
# @pidfilepath ||= gen_feeder_name
|
207
|
+
@pidfilepath ||= File::join(@dot_rq_dir, 'pid')
|
208
|
+
#--}}}
|
209
|
+
end
|
210
|
+
def gen_feeder_name path = nil
|
211
|
+
#--{{{
|
212
|
+
path ||= (@options['name'] || @qpath)
|
128
213
|
path = Util::realpath(path).gsub(%r|/|o, '_')
|
129
|
-
File::join(Util::realpath('~'), ".#{ path }.feeder")
|
130
|
-
|
214
|
+
#File::join(Util::realpath('~'), ".#{ path }.feeder")
|
215
|
+
basename = ".#{ Util::host }_#{ path }.feeder".gsub(%r/_+/,'_')
|
216
|
+
dirname = Util::realpath '~'
|
217
|
+
File::join dirname, basename
|
218
|
+
#--}}}
|
131
219
|
end
|
132
220
|
def install_signal_handlers
|
133
|
-
|
134
|
-
if @daemon
|
221
|
+
#--{{{
|
222
|
+
if @daemon or ENV['RQ_SIGNALS']
|
135
223
|
$rq_signaled = false
|
136
224
|
$rq_sighup = false
|
137
225
|
$rq_sigterm = false
|
138
226
|
$rq_sigint = false
|
139
227
|
trap('SIGHUP') do
|
140
228
|
$rq_signaled = $rq_sighup = 'SIGHUP'
|
141
|
-
|
142
|
-
|
229
|
+
if nothing_running?
|
230
|
+
warn{ "signal <SIGHUP>" }
|
231
|
+
handle_signal
|
232
|
+
else
|
233
|
+
warn{ "finishing running jobs before handling signal" }
|
234
|
+
end
|
143
235
|
end
|
144
236
|
trap('SIGTERM') do
|
145
237
|
$rq_signaled = $rq_sigterm = 'SIGTERM'
|
146
|
-
|
147
|
-
|
238
|
+
if nothing_running?
|
239
|
+
warn{ "signal <SIGTERM>" }
|
240
|
+
handle_signal
|
241
|
+
else
|
242
|
+
warn{ "finishing running jobs before handling signal" }
|
243
|
+
end
|
148
244
|
end
|
149
245
|
trap('SIGINT') do
|
150
246
|
$rq_signaled = $rq_sigint = 'SIGINT'
|
151
|
-
|
152
|
-
|
247
|
+
if nothing_running?
|
248
|
+
warn{ "signal <SIGINT>" }
|
249
|
+
handle_signal
|
250
|
+
else
|
251
|
+
warn{ "finishing running jobs before handling signal" }
|
252
|
+
end
|
153
253
|
end
|
154
254
|
@jrd.install_signal_handlers
|
255
|
+
else
|
256
|
+
%w(SIGHUP SIGTERM SIGINT).each do |sig|
|
257
|
+
trap(sig) do
|
258
|
+
warn{ "signal <#{ sig }>" }
|
259
|
+
warn{ "not cleaning up - only daemon mode cleans up!" }
|
260
|
+
exit
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
#--}}}
|
265
|
+
end
|
266
|
+
def install_redirects
|
267
|
+
#--{{{
|
268
|
+
if @daemon
|
269
|
+
open('/dev/null','r+') do |f|
|
270
|
+
STDIN.reopen f
|
271
|
+
STDOUT.reopen f
|
272
|
+
STDERR.reopen f
|
273
|
+
end
|
155
274
|
end
|
156
|
-
|
275
|
+
#--}}}
|
157
276
|
end
|
158
277
|
def fill_morgue
|
159
|
-
|
160
|
-
debug{ "filling morgue" }
|
161
|
-
sql = <<-sql
|
162
|
-
select * from jobs where state = 'running' and runner = '#{ Util::hostname }' and started <= '#{ @started }'
|
163
|
-
sql
|
164
|
-
db = @q.qdb
|
278
|
+
#--{{{
|
279
|
+
debug{ "filling morgue..." }
|
165
280
|
transaction do
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
281
|
+
deadjobs = @q.getdeadjobs @started
|
282
|
+
deadjobs.each do |job|
|
283
|
+
@q.jobisdead job
|
284
|
+
unless job['restartable']
|
285
|
+
info{ "burried job <#{ job['jid'] }>" }
|
286
|
+
else
|
287
|
+
warn{ "dead job <#{ job['jid'] }> will be restarted" }
|
173
288
|
end
|
174
289
|
end
|
175
290
|
end
|
176
291
|
debug{ "filled morgue" }
|
177
|
-
|
292
|
+
#--}}}
|
293
|
+
end
|
294
|
+
def reap_zombie_ios
|
295
|
+
#--{{{
|
296
|
+
debug{ "reaping zombie ios" }
|
297
|
+
begin
|
298
|
+
transaction do
|
299
|
+
stdin, stdout, stderr = @q.stdin, @q.stdout, @q.stderr
|
300
|
+
jids = @q.execute("select jid from jobs").map{|tuple| Integer tuple.first}
|
301
|
+
jids = jids.inject({}){|h,jid| h.update jid => true}
|
302
|
+
%w[ stdin stdout stderr ].each do |d|
|
303
|
+
Dir::glob(File::join(@q.send(d), "*")).each do |iof|
|
304
|
+
begin
|
305
|
+
jid = Integer iof[%r/\d+\s*$/]
|
306
|
+
unless jids[jid]
|
307
|
+
debug{ "removing zombie io <#{ iof }>" }
|
308
|
+
FileUtils::rm_rf iof
|
309
|
+
end
|
310
|
+
rescue
|
311
|
+
next
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
316
|
+
rescue Exception => e # because this is a non-essential function
|
317
|
+
warn{ e }
|
318
|
+
end
|
319
|
+
debug{ "reaped" }
|
320
|
+
#--}}}
|
178
321
|
end
|
179
322
|
def handle_signal
|
180
|
-
|
323
|
+
#--{{{
|
181
324
|
if $rq_sigterm or $rq_sigint
|
182
325
|
reap_jobs(reap_only = true) until nothing_running?
|
183
326
|
info{ "** STOPPING **" }
|
@@ -189,15 +332,22 @@ unless defined? $__rq_feeder__
|
|
189
332
|
if $rq_sighup
|
190
333
|
reap_jobs(reap_only = true) until nothing_running?
|
191
334
|
info{ "** RESTARTING **" }
|
192
|
-
@
|
193
|
-
|
194
|
-
|
195
|
-
|
335
|
+
info{ "** ARGV <#{ @cmd }> **" }
|
336
|
+
begin
|
337
|
+
@jrd.shutdown rescue nil
|
338
|
+
Util::uncache __FILE__
|
339
|
+
@pidfile.posixlock File::LOCK_UN
|
340
|
+
Util::exec @cmd
|
341
|
+
rescue Exception => e
|
342
|
+
fatal{"** FAILED TO RESTART! **"}
|
343
|
+
fatal{ e }
|
344
|
+
exit EXIT_FAILURE
|
345
|
+
end
|
196
346
|
end
|
197
|
-
|
347
|
+
#--}}}
|
198
348
|
end
|
199
349
|
def throttle rate = @min_sleep
|
200
|
-
|
350
|
+
#--{{{
|
201
351
|
if Numeric === rate and rate > 0
|
202
352
|
if defined? @last_throttle_time and @last_throttle_time
|
203
353
|
elapsed = Time.now - @last_throttle_time
|
@@ -211,10 +361,11 @@ unless defined? $__rq_feeder__
|
|
211
361
|
@last_throttle_time = Time.now
|
212
362
|
end
|
213
363
|
yield
|
214
|
-
|
364
|
+
#--}}}
|
215
365
|
end
|
216
366
|
def start_jobs
|
217
|
-
|
367
|
+
#--{{{
|
368
|
+
debug{ "starting jobs..." }
|
218
369
|
n_started = 0
|
219
370
|
transaction do
|
220
371
|
until busy?
|
@@ -225,10 +376,10 @@ unless defined? $__rq_feeder__
|
|
225
376
|
end
|
226
377
|
debug{ "<#{ n_started }> jobs started" }
|
227
378
|
n_started
|
228
|
-
|
379
|
+
#--}}}
|
229
380
|
end
|
230
381
|
def start_job job
|
231
|
-
|
382
|
+
#--{{{
|
232
383
|
jid, command = job['jid'], job['command']
|
233
384
|
|
234
385
|
#
|
@@ -238,6 +389,9 @@ unless defined? $__rq_feeder__
|
|
238
389
|
job['started'] = Util::timestamp Time::now
|
239
390
|
job['runner'] = Util::hostname
|
240
391
|
|
392
|
+
job['stdout'] = @q.stdout4 jid
|
393
|
+
job['stderr'] = @q.stderr4 jid
|
394
|
+
|
241
395
|
jr = @jrd.runner job
|
242
396
|
cid = jr.cid
|
243
397
|
|
@@ -252,15 +406,16 @@ unless defined? $__rq_feeder__
|
|
252
406
|
end
|
253
407
|
|
254
408
|
cid
|
255
|
-
|
409
|
+
#--}}}
|
256
410
|
end
|
257
411
|
def nothing_running?
|
258
|
-
|
412
|
+
#--{{{
|
259
413
|
@children.size == 0
|
260
|
-
|
414
|
+
#--}}}
|
261
415
|
end
|
262
416
|
def reap_jobs reap_only = false, blocking = true
|
263
|
-
|
417
|
+
#--{{{
|
418
|
+
debug{ "reaping jobs..." }
|
264
419
|
reaped = []
|
265
420
|
|
266
421
|
cid = status = nil
|
@@ -270,7 +425,7 @@ unless defined? $__rq_feeder__
|
|
270
425
|
cid, status = @jrd.waitpid2 -1, Process::WUNTRACED
|
271
426
|
else
|
272
427
|
loop do
|
273
|
-
debug{ "not busy
|
428
|
+
debug{ "not busy - busywait loop" }
|
274
429
|
cid, status = @jrd.waitpid2 -1, Process::WNOHANG | Process::WUNTRACED
|
275
430
|
break if cid
|
276
431
|
start_jobs unless $rq_signaled
|
@@ -299,6 +454,7 @@ unless defined? $__rq_feeder__
|
|
299
454
|
start_jobs unless reap_only or $rq_signaled
|
300
455
|
|
301
456
|
if @children.size == 0 or loopno > 42
|
457
|
+
sleep 8 if loopno > 42 # wow - we are CRANKING through jobs so BACK OFF!!
|
302
458
|
break
|
303
459
|
else
|
304
460
|
sleep 0.1
|
@@ -311,14 +467,12 @@ unless defined? $__rq_feeder__
|
|
311
467
|
end
|
312
468
|
end
|
313
469
|
end
|
314
|
-
|
315
470
|
debug{ "<#{ reaped.size }> jobs reaped" }
|
316
|
-
|
317
471
|
reaped
|
318
|
-
|
472
|
+
#--}}}
|
319
473
|
end
|
320
474
|
def finish_job job, status
|
321
|
-
|
475
|
+
#--{{{
|
322
476
|
job['finished'] = Util::timestamp(Time::now)
|
323
477
|
job['elapsed'] = Util::stamptime(job['finished']) - Util::stamptime(job['started'])
|
324
478
|
t = status.exitstatus rescue nil
|
@@ -329,10 +483,10 @@ unless defined? $__rq_feeder__
|
|
329
483
|
else
|
330
484
|
warn{ "finished - jid <#{ job['jid'] }> pid <#{ job['pid'] }> exit_status <#{ job['exit_status'] }>" }
|
331
485
|
end
|
332
|
-
|
486
|
+
#--}}}
|
333
487
|
end
|
334
488
|
def transaction
|
335
|
-
|
489
|
+
#--{{{
|
336
490
|
ret = nil
|
337
491
|
if @in_transaction
|
338
492
|
ret = yield
|
@@ -345,23 +499,23 @@ unless defined? $__rq_feeder__
|
|
345
499
|
end
|
346
500
|
end
|
347
501
|
ret
|
348
|
-
|
502
|
+
#--}}}
|
349
503
|
end
|
350
504
|
def busy?
|
351
|
-
|
505
|
+
#--{{{
|
352
506
|
@children.size >= @max_feed
|
353
|
-
|
507
|
+
#--}}}
|
354
508
|
end
|
355
509
|
def relax
|
356
|
-
|
510
|
+
#--{{{
|
357
511
|
seconds = rand(@max_sleep - @min_sleep + 1) + @min_sleep
|
358
512
|
debug{ "relaxing <#{ seconds }>" }
|
359
513
|
sleep seconds
|
360
|
-
|
514
|
+
#--}}}
|
361
515
|
end
|
362
|
-
|
516
|
+
#--}}}
|
363
517
|
end # class Feeder
|
364
|
-
|
518
|
+
#--}}}
|
365
519
|
end # module RQ
|
366
520
|
$__rq_feeder__ = __FILE__
|
367
521
|
end
|