rq 0.1.7 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|