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.
Files changed (723) hide show
  1. data/INSTALL +21 -0
  2. data/README +752 -190
  3. data/TODO +18 -11
  4. data/TUTORIAL +230 -0
  5. data/all/install.rb +127 -0
  6. data/all/install.sh +165 -0
  7. data/all/packages/INSTALL +5 -0
  8. data/all/packages/arrayfields-3.6.0.tgz +0 -0
  9. data/all/packages/lockfile-1.4.1.tgz +0 -0
  10. data/all/packages/posixlock-0.0.1.tgz +0 -0
  11. data/all/packages/ruby-1.8.6.tgz +0 -0
  12. data/all/packages/rubygems-0.9.2.tgz +0 -0
  13. data/all/packages/sqlite-2.8.15.tar.gz +0 -0
  14. data/all/packages/sqlite-ruby-1.3.1.tar.gz +0 -0
  15. data/bin/rq +830 -361
  16. data/bin/rq-3.0.0 +860 -0
  17. data/doc/classes/ARGV.html +134 -0
  18. data/doc/classes/ARGV.src/M000036.html +36 -0
  19. data/doc/classes/ARGV.src/M000037.html +25 -0
  20. data/doc/classes/OrderedHash.html +1043 -0
  21. data/doc/classes/OrderedHash.src/M000003.html +26 -0
  22. data/doc/classes/OrderedHash.src/M000004.html +31 -0
  23. data/doc/classes/OrderedHash.src/M000005.html +23 -0
  24. data/doc/classes/OrderedHash.src/M000006.html +23 -0
  25. data/doc/classes/OrderedHash.src/M000007.html +24 -0
  26. data/doc/classes/OrderedHash.src/M000009.html +24 -0
  27. data/doc/classes/OrderedHash.src/M000010.html +24 -0
  28. data/doc/classes/OrderedHash.src/M000011.html +24 -0
  29. data/doc/classes/OrderedHash.src/M000012.html +24 -0
  30. data/doc/classes/OrderedHash.src/M000013.html +24 -0
  31. data/doc/classes/OrderedHash.src/M000014.html +24 -0
  32. data/doc/classes/OrderedHash.src/M000016.html +26 -0
  33. data/doc/classes/OrderedHash.src/M000017.html +25 -0
  34. data/doc/classes/OrderedHash.src/M000018.html +23 -0
  35. data/doc/classes/OrderedHash.src/M000019.html +25 -0
  36. data/doc/classes/OrderedHash.src/M000020.html +23 -0
  37. data/doc/classes/OrderedHash.src/M000021.html +24 -0
  38. data/doc/classes/OrderedHash.src/M000022.html +24 -0
  39. data/doc/classes/OrderedHash.src/M000023.html +24 -0
  40. data/doc/classes/OrderedHash.src/M000024.html +29 -0
  41. data/doc/classes/OrderedHash.src/M000025.html +29 -0
  42. data/doc/classes/OrderedHash.src/M000026.html +24 -0
  43. data/doc/classes/OrderedHash.src/M000027.html +25 -0
  44. data/doc/classes/OrderedHash.src/M000028.html +23 -0
  45. data/doc/classes/OrderedHash.src/M000029.html +25 -0
  46. data/doc/classes/OrderedHash.src/M000030.html +24 -0
  47. data/doc/classes/OrderedHash.src/M000032.html +23 -0
  48. data/doc/classes/OrderedHash.src/M000033.html +25 -0
  49. data/doc/classes/OrderedHash.src/M000034.html +36 -0
  50. data/doc/classes/OrderedHash.src/M000035.html +23 -0
  51. data/doc/classes/RQ.html +647 -0
  52. data/doc/classes/RQ/Backer.html +240 -0
  53. data/doc/classes/RQ/Backer.src/M000121.html +31 -0
  54. data/doc/classes/RQ/ConfigFile.html +416 -0
  55. data/doc/classes/RQ/ConfigFile.src/M000100.html +34 -0
  56. data/doc/classes/RQ/ConfigFile.src/M000101.html +26 -0
  57. data/doc/classes/RQ/ConfigFile.src/M000102.html +33 -0
  58. data/doc/classes/RQ/ConfigFile.src/M000103.html +25 -0
  59. data/doc/classes/RQ/ConfigFile.src/M000104.html +34 -0
  60. data/doc/classes/RQ/ConfigFile.src/M000105.html +25 -0
  61. data/doc/classes/RQ/Configurator.html +249 -0
  62. data/doc/classes/RQ/Configurator.src/M000122.html +40 -0
  63. data/doc/classes/RQ/Creator.html +264 -0
  64. data/doc/classes/RQ/Creator.src/M000157.html +32 -0
  65. data/doc/classes/RQ/Cron.html +461 -0
  66. data/doc/classes/RQ/Deleter.html +259 -0
  67. data/doc/classes/RQ/Deleter.src/M000078.html +52 -0
  68. data/doc/classes/RQ/Executor.html +249 -0
  69. data/doc/classes/RQ/Executor.src/M000099.html +45 -0
  70. data/doc/classes/RQ/Feeder.html +1131 -0
  71. data/doc/classes/RQ/Feeder.src/M000079.html +67 -0
  72. data/doc/classes/RQ/Feeder.src/M000080.html +47 -0
  73. data/doc/classes/RQ/Feeder.src/M000081.html +98 -0
  74. data/doc/classes/RQ/Feeder.src/M000082.html +25 -0
  75. data/doc/classes/RQ/Feeder.src/M000083.html +30 -0
  76. data/doc/classes/RQ/Feeder.src/M000084.html +58 -0
  77. data/doc/classes/RQ/Feeder.src/M000085.html +37 -0
  78. data/doc/classes/RQ/Feeder.src/M000086.html +40 -0
  79. data/doc/classes/RQ/Feeder.src/M000087.html +37 -0
  80. data/doc/classes/RQ/Feeder.src/M000088.html +35 -0
  81. data/doc/classes/RQ/Feeder.src/M000089.html +47 -0
  82. data/doc/classes/RQ/Feeder.src/M000090.html +25 -0
  83. data/doc/classes/RQ/Feeder.src/M000091.html +78 -0
  84. data/doc/classes/RQ/Feeder.src/M000092.html +34 -0
  85. data/doc/classes/RQ/Feeder.src/M000093.html +36 -0
  86. data/doc/classes/RQ/Feeder.src/M000094.html +25 -0
  87. data/doc/classes/RQ/Feeder.src/M000095.html +27 -0
  88. data/doc/classes/RQ/IOViewer.html +256 -0
  89. data/doc/classes/RQ/Job.html +304 -0
  90. data/doc/classes/RQ/Job.src/M000168.html +26 -0
  91. data/doc/classes/RQ/Job.src/M000169.html +37 -0
  92. data/doc/classes/RQ/Job.src/M000170.html +23 -0
  93. data/doc/classes/RQ/Job/Methods.html +210 -0
  94. data/doc/classes/RQ/JobQueue.html +1780 -0
  95. data/doc/classes/RQ/JobQueue.src/M000176.html +31 -0
  96. data/doc/classes/RQ/JobQueue.src/M000177.html +34 -0
  97. data/doc/classes/RQ/JobQueue.src/M000178.html +60 -0
  98. data/doc/classes/RQ/JobQueue.src/M000179.html +63 -0
  99. data/doc/classes/RQ/JobQueue.src/M000180.html +73 -0
  100. data/doc/classes/RQ/JobQueue.src/M000181.html +217 -0
  101. data/doc/classes/RQ/JobQueue.src/M000182.html +50 -0
  102. data/doc/classes/RQ/JobQueue.src/M000183.html +83 -0
  103. data/doc/classes/RQ/JobQueue.src/M000184.html +25 -0
  104. data/doc/classes/RQ/JobQueue.src/M000185.html +83 -0
  105. data/doc/classes/RQ/JobQueue.src/M000186.html +28 -0
  106. data/doc/classes/RQ/JobQueue.src/M000187.html +26 -0
  107. data/doc/classes/RQ/JobQueue.src/M000188.html +26 -0
  108. data/doc/classes/RQ/JobQueue.src/M000189.html +32 -0
  109. data/doc/classes/RQ/JobQueue.src/M000190.html +30 -0
  110. data/doc/classes/RQ/JobQueue.src/M000191.html +37 -0
  111. data/doc/classes/RQ/JobQueue.src/M000192.html +36 -0
  112. data/doc/classes/RQ/JobQueue.src/M000193.html +25 -0
  113. data/doc/classes/RQ/JobQueue.src/M000194.html +25 -0
  114. data/doc/classes/RQ/JobQueue.src/M000195.html +25 -0
  115. data/doc/classes/RQ/JobQueue.src/M000196.html +25 -0
  116. data/doc/classes/RQ/JobQueue.src/M000197.html +25 -0
  117. data/doc/classes/RQ/JobQueue.src/M000198.html +73 -0
  118. data/doc/classes/RQ/JobQueue.src/M000199.html +25 -0
  119. data/doc/classes/RQ/JobQueue.src/M000200.html +38 -0
  120. data/doc/classes/RQ/JobQueue.src/M000201.html +28 -0
  121. data/doc/classes/RQ/JobQueue/Error.html +187 -0
  122. data/doc/classes/RQ/JobRunner.html +386 -0
  123. data/doc/classes/RQ/JobRunner.src/M000117.html +53 -0
  124. data/doc/classes/RQ/JobRunner.src/M000118.html +26 -0
  125. data/doc/classes/RQ/JobRunnerDaemon.html +590 -0
  126. data/doc/classes/RQ/JobRunnerDaemon.src/M000159.html +94 -0
  127. data/doc/classes/RQ/JobRunnerDaemon.src/M000160.html +27 -0
  128. data/doc/classes/RQ/JobRunnerDaemon.src/M000161.html +39 -0
  129. data/doc/classes/RQ/JobRunnerDaemon.src/M000162.html +27 -0
  130. data/doc/classes/RQ/JobRunnerDaemon.src/M000163.html +27 -0
  131. data/doc/classes/RQ/JobRunnerDaemon.src/M000164.html +28 -0
  132. data/doc/classes/RQ/JobRunnerDaemon.src/M000165.html +28 -0
  133. data/doc/classes/RQ/JobRunnerDaemon.src/M000166.html +37 -0
  134. data/doc/classes/RQ/JobRunnerDaemon.src/M000167.html +25 -0
  135. data/doc/classes/RQ/Lister.html +256 -0
  136. data/doc/classes/RQ/Lister.src/M000156.html +52 -0
  137. data/doc/classes/RQ/Locker.html +250 -0
  138. data/doc/classes/RQ/Locker.src/M000120.html +40 -0
  139. data/doc/classes/RQ/Logging.html +296 -0
  140. data/doc/classes/RQ/Logging.src/M000067.html +28 -0
  141. data/doc/classes/RQ/Logging/LogClassMethods.html +254 -0
  142. data/doc/classes/RQ/Logging/LogClassMethods.src/M000068.html +32 -0
  143. data/doc/classes/RQ/Logging/LogClassMethods.src/M000069.html +28 -0
  144. data/doc/classes/RQ/Logging/LogMethods.html +404 -0
  145. data/doc/classes/RQ/Logging/LogMethods.src/M000070.html +35 -0
  146. data/doc/classes/RQ/Logging/LogMethods.src/M000071.html +28 -0
  147. data/doc/classes/RQ/Logging/LogMethods.src/M000072.html +21 -0
  148. data/doc/classes/RQ/Logging/LogMethods.src/M000073.html +21 -0
  149. data/doc/classes/RQ/Logging/LogMethods.src/M000074.html +21 -0
  150. data/doc/classes/RQ/Logging/LogMethods.src/M000075.html +21 -0
  151. data/doc/classes/RQ/Logging/LogMethods.src/M000076.html +21 -0
  152. data/doc/classes/RQ/Logging/LogMethods.src/M000077.html +29 -0
  153. data/doc/classes/RQ/Logging/LoggerExt.html +194 -0
  154. data/doc/classes/RQ/Main.html +2110 -0
  155. data/doc/classes/RQ/MainHelper.html +607 -0
  156. data/doc/classes/RQ/MainHelper.src/M000171.html +33 -0
  157. data/doc/classes/RQ/MainHelper.src/M000172.html +32 -0
  158. data/doc/classes/RQ/MainHelper.src/M000173.html +44 -0
  159. data/doc/classes/RQ/OrderedAutoHash.html +258 -0
  160. data/doc/classes/RQ/OrderedAutoHash.src/M000205.html +25 -0
  161. data/doc/classes/RQ/OrderedAutoHash.src/M000206.html +25 -0
  162. data/doc/classes/RQ/QDB.html +1653 -0
  163. data/doc/classes/RQ/QDB.src/M000126.html +25 -0
  164. data/doc/classes/RQ/QDB.src/M000127.html +37 -0
  165. data/doc/classes/RQ/QDB.src/M000128.html +27 -0
  166. data/doc/classes/RQ/QDB.src/M000129.html +27 -0
  167. data/doc/classes/RQ/QDB.src/M000130.html +27 -0
  168. data/doc/classes/RQ/QDB.src/M000131.html +31 -0
  169. data/doc/classes/RQ/QDB.src/M000132.html +32 -0
  170. data/doc/classes/RQ/QDB.src/M000133.html +30 -0
  171. data/doc/classes/RQ/QDB.src/M000134.html +91 -0
  172. data/doc/classes/RQ/QDB.src/M000135.html +26 -0
  173. data/doc/classes/RQ/QDB.src/M000136.html +46 -0
  174. data/doc/classes/RQ/QDB.src/M000137.html +26 -0
  175. data/doc/classes/RQ/QDB.src/M000138.html +51 -0
  176. data/doc/classes/RQ/QDB.src/M000139.html +61 -0
  177. data/doc/classes/RQ/QDB.src/M000140.html +57 -0
  178. data/doc/classes/RQ/QDB.src/M000141.html +25 -0
  179. data/doc/classes/RQ/QDB.src/M000142.html +25 -0
  180. data/doc/classes/RQ/QDB.src/M000143.html +37 -0
  181. data/doc/classes/RQ/QDB.src/M000144.html +107 -0
  182. data/doc/classes/RQ/QDB.src/M000145.html +40 -0
  183. data/doc/classes/RQ/QDB.src/M000146.html +34 -0
  184. data/doc/classes/RQ/QDB.src/M000147.html +33 -0
  185. data/doc/classes/RQ/QDB.src/M000148.html +32 -0
  186. data/doc/classes/RQ/QDB.src/M000149.html +98 -0
  187. data/doc/classes/RQ/QDB.src/M000150.html +26 -0
  188. data/doc/classes/RQ/QDB.src/M000151.html +31 -0
  189. data/doc/classes/RQ/QDB.src/M000154.html +26 -0
  190. data/doc/classes/RQ/QDB/AbortedTransactionError.html +187 -0
  191. data/doc/classes/RQ/QDB/RollbackTransactionError.html +187 -0
  192. data/doc/classes/RQ/Querier.html +328 -0
  193. data/doc/classes/RQ/Querier.src/M000203.html +45 -0
  194. data/doc/classes/RQ/Querier.src/M000204.html +78 -0
  195. data/doc/classes/RQ/ReSubmitter.html +307 -0
  196. data/doc/classes/RQ/ReSubmitter.src/M000098.html +111 -0
  197. data/doc/classes/RQ/Recoverer.html +247 -0
  198. data/doc/classes/RQ/Refresher.html +346 -0
  199. data/doc/classes/RQ/Refresher.src/M000174.html +51 -0
  200. data/doc/classes/RQ/Refresher.src/M000175.html +44 -0
  201. data/doc/classes/RQ/Relayer.html +723 -0
  202. data/doc/classes/RQ/Relayer.src/M000106.html +91 -0
  203. data/doc/classes/RQ/Relayer.src/M000107.html +47 -0
  204. data/doc/classes/RQ/Relayer.src/M000108.html +46 -0
  205. data/doc/classes/RQ/Relayer.src/M000109.html +26 -0
  206. data/doc/classes/RQ/Relayer.src/M000110.html +46 -0
  207. data/doc/classes/RQ/Relayer.src/M000111.html +40 -0
  208. data/doc/classes/RQ/Relayer.src/M000112.html +37 -0
  209. data/doc/classes/RQ/Relayer.src/M000113.html +40 -0
  210. data/doc/classes/RQ/Relayer.src/M000114.html +27 -0
  211. data/doc/classes/RQ/Relayer.src/M000115.html +25 -0
  212. data/doc/classes/RQ/Relayer.src/M000116.html +38 -0
  213. data/doc/classes/RQ/Resource.html +187 -0
  214. data/doc/classes/RQ/ResourceManager.html +276 -0
  215. data/doc/classes/RQ/Rotater.html +324 -0
  216. data/doc/classes/RQ/Rotater.src/M000158.html +71 -0
  217. data/doc/classes/RQ/SleepCycle.html +322 -0
  218. data/doc/classes/RQ/SleepCycle.src/M000123.html +32 -0
  219. data/doc/classes/RQ/SleepCycle.src/M000124.html +27 -0
  220. data/doc/classes/RQ/SleepCycle.src/M000125.html +25 -0
  221. data/doc/classes/RQ/Snapshotter.html +250 -0
  222. data/doc/classes/RQ/Snapshotter.src/M000097.html +35 -0
  223. data/doc/classes/RQ/StatusLister.html +289 -0
  224. data/doc/classes/RQ/StatusLister.src/M000096.html +26 -0
  225. data/doc/classes/RQ/Submitter.html +319 -0
  226. data/doc/classes/RQ/Submitter.src/M000119.html +92 -0
  227. data/doc/classes/RQ/Toucher.html +384 -0
  228. data/doc/classes/RQ/Updater.html +304 -0
  229. data/doc/classes/RQ/Updater.src/M000202.html +97 -0
  230. data/doc/classes/RQ/Usage.html +346 -0
  231. data/doc/classes/RQ/Usage.src/M000038.html +29 -0
  232. data/doc/classes/RQ/Usage.src/M000039.html +72 -0
  233. data/doc/classes/RQ/Util.html +1043 -0
  234. data/doc/classes/RQ/Util.src/M000040.html +27 -0
  235. data/doc/classes/RQ/Util.src/M000041.html +26 -0
  236. data/doc/classes/RQ/Util.src/M000042.html +25 -0
  237. data/doc/classes/RQ/Util.src/M000043.html +25 -0
  238. data/doc/classes/RQ/Util.src/M000044.html +30 -0
  239. data/doc/classes/RQ/Util.src/M000045.html +25 -0
  240. data/doc/classes/RQ/Util.src/M000046.html +34 -0
  241. data/doc/classes/RQ/Util.src/M000047.html +31 -0
  242. data/doc/classes/RQ/Util.src/M000048.html +41 -0
  243. data/doc/classes/RQ/Util.src/M000049.html +27 -0
  244. data/doc/classes/RQ/Util.src/M000050.html +34 -0
  245. data/doc/classes/RQ/Util.src/M000051.html +28 -0
  246. data/doc/classes/RQ/Util.src/M000052.html +27 -0
  247. data/doc/classes/RQ/Util.src/M000053.html +31 -0
  248. data/doc/classes/RQ/Util.src/M000054.html +31 -0
  249. data/doc/classes/RQ/Util.src/M000055.html +31 -0
  250. data/doc/classes/RQ/Util.src/M000056.html +25 -0
  251. data/doc/classes/RQ/Util.src/M000057.html +25 -0
  252. data/doc/classes/RQ/Util.src/M000058.html +25 -0
  253. data/doc/classes/RQ/Util.src/M000059.html +25 -0
  254. data/doc/classes/RQ/Util.src/M000060.html +25 -0
  255. data/doc/classes/RQ/Util.src/M000061.html +27 -0
  256. data/doc/classes/RQ/Util.src/M000062.html +28 -0
  257. data/doc/classes/RQ/Util.src/M000063.html +39 -0
  258. data/doc/classes/RQ/Util.src/M000064.html +39 -0
  259. data/doc/classes/RQ/Util.src/M000065.html +31 -0
  260. data/doc/classes/RQ/Util.src/M000066.html +29 -0
  261. data/doc/classes/SQLite.html +120 -0
  262. data/doc/classes/SQLite/Database.html +546 -0
  263. data/doc/classes/SQLite/TypeTranslator.html +221 -0
  264. data/doc/created.rid +1 -0
  265. data/doc/dot/f_0.dot +14 -0
  266. data/doc/dot/f_0.jpg +0 -0
  267. data/doc/dot/f_1.dot +14 -0
  268. data/doc/dot/f_1.jpg +0 -0
  269. data/doc/dot/f_10.dot +802 -0
  270. data/doc/dot/f_10.jpg +0 -0
  271. data/doc/dot/f_11.dot +14 -0
  272. data/doc/dot/f_11.jpg +0 -0
  273. data/doc/dot/f_12.dot +802 -0
  274. data/doc/dot/f_12.jpg +0 -0
  275. data/doc/dot/f_13.dot +802 -0
  276. data/doc/dot/f_13.jpg +0 -0
  277. data/doc/dot/f_14.dot +802 -0
  278. data/doc/dot/f_14.jpg +0 -0
  279. data/doc/dot/f_15.dot +802 -0
  280. data/doc/dot/f_15.jpg +0 -0
  281. data/doc/dot/f_16.dot +802 -0
  282. data/doc/dot/f_16.jpg +0 -0
  283. data/doc/dot/f_17.dot +802 -0
  284. data/doc/dot/f_17.jpg +0 -0
  285. data/doc/dot/f_18.dot +14 -0
  286. data/doc/dot/f_18.jpg +0 -0
  287. data/doc/dot/f_19.dot +802 -0
  288. data/doc/dot/f_19.jpg +0 -0
  289. data/doc/dot/f_2.dot +14 -0
  290. data/doc/dot/f_2.jpg +0 -0
  291. data/doc/dot/f_20.dot +802 -0
  292. data/doc/dot/f_20.jpg +0 -0
  293. data/doc/dot/f_21.dot +802 -0
  294. data/doc/dot/f_21.jpg +0 -0
  295. data/doc/dot/f_22.dot +802 -0
  296. data/doc/dot/f_22.jpg +0 -0
  297. data/doc/dot/f_23.dot +802 -0
  298. data/doc/dot/f_23.jpg +0 -0
  299. data/doc/dot/f_24.dot +802 -0
  300. data/doc/dot/f_24.jpg +0 -0
  301. data/doc/dot/f_25.dot +817 -0
  302. data/doc/dot/f_25.jpg +0 -0
  303. data/doc/dot/f_26.dot +29 -0
  304. data/doc/dot/f_26.jpg +0 -0
  305. data/doc/dot/f_27.dot +802 -0
  306. data/doc/dot/f_27.jpg +0 -0
  307. data/doc/dot/f_28.dot +802 -0
  308. data/doc/dot/f_28.jpg +0 -0
  309. data/doc/dot/f_29.dot +802 -0
  310. data/doc/dot/f_29.jpg +0 -0
  311. data/doc/dot/f_3.dot +14 -0
  312. data/doc/dot/f_3.jpg +0 -0
  313. data/doc/dot/f_30.dot +802 -0
  314. data/doc/dot/f_30.jpg +0 -0
  315. data/doc/dot/f_31.dot +802 -0
  316. data/doc/dot/f_31.jpg +0 -0
  317. data/doc/dot/f_32.dot +802 -0
  318. data/doc/dot/f_32.jpg +0 -0
  319. data/doc/dot/f_33.dot +802 -0
  320. data/doc/dot/f_33.jpg +0 -0
  321. data/doc/dot/f_34.dot +802 -0
  322. data/doc/dot/f_34.jpg +0 -0
  323. data/doc/dot/f_35.dot +802 -0
  324. data/doc/dot/f_35.jpg +0 -0
  325. data/doc/dot/f_36.dot +802 -0
  326. data/doc/dot/f_36.jpg +0 -0
  327. data/doc/dot/f_37.dot +802 -0
  328. data/doc/dot/f_37.jpg +0 -0
  329. data/doc/dot/f_38.dot +54 -0
  330. data/doc/dot/f_38.jpg +0 -0
  331. data/doc/dot/f_39.dot +802 -0
  332. data/doc/dot/f_39.jpg +0 -0
  333. data/doc/dot/f_4.dot +802 -0
  334. data/doc/dot/f_4.jpg +0 -0
  335. data/doc/dot/f_40.dot +802 -0
  336. data/doc/dot/f_40.jpg +0 -0
  337. data/doc/dot/f_41.dot +802 -0
  338. data/doc/dot/f_41.jpg +0 -0
  339. data/doc/dot/f_42.dot +802 -0
  340. data/doc/dot/f_42.jpg +0 -0
  341. data/doc/dot/f_43.dot +802 -0
  342. data/doc/dot/f_43.jpg +0 -0
  343. data/doc/dot/f_44.dot +802 -0
  344. data/doc/dot/f_44.jpg +0 -0
  345. data/doc/dot/f_5.dot +802 -0
  346. data/doc/dot/f_5.jpg +0 -0
  347. data/doc/dot/f_6.dot +802 -0
  348. data/doc/dot/f_6.jpg +0 -0
  349. data/doc/dot/f_7.dot +802 -0
  350. data/doc/dot/f_7.jpg +0 -0
  351. data/doc/dot/f_8.dot +802 -0
  352. data/doc/dot/f_8.jpg +0 -0
  353. data/doc/dot/f_9.dot +802 -0
  354. data/doc/dot/f_9.jpg +0 -0
  355. data/doc/dot/m_10_0.dot +802 -0
  356. data/doc/dot/m_10_0.jpg +0 -0
  357. data/doc/dot/m_11_0.dot +734 -0
  358. data/doc/dot/m_11_0.jpg +0 -0
  359. data/doc/dot/m_12_0.dot +802 -0
  360. data/doc/dot/m_12_0.jpg +0 -0
  361. data/doc/dot/m_13_0.dot +802 -0
  362. data/doc/dot/m_13_0.jpg +0 -0
  363. data/doc/dot/m_14_0.dot +802 -0
  364. data/doc/dot/m_14_0.jpg +0 -0
  365. data/doc/dot/m_15_0.dot +802 -0
  366. data/doc/dot/m_15_0.jpg +0 -0
  367. data/doc/dot/m_16_0.dot +802 -0
  368. data/doc/dot/m_16_0.jpg +0 -0
  369. data/doc/dot/m_17_0.dot +802 -0
  370. data/doc/dot/m_17_0.jpg +0 -0
  371. data/doc/dot/m_18_0.dot +734 -0
  372. data/doc/dot/m_18_0.jpg +0 -0
  373. data/doc/dot/m_19_0.dot +802 -0
  374. data/doc/dot/m_19_0.jpg +0 -0
  375. data/doc/dot/m_20_0.dot +802 -0
  376. data/doc/dot/m_20_0.jpg +0 -0
  377. data/doc/dot/m_21_0.dot +802 -0
  378. data/doc/dot/m_21_0.jpg +0 -0
  379. data/doc/dot/m_22_0.dot +802 -0
  380. data/doc/dot/m_22_0.jpg +0 -0
  381. data/doc/dot/m_23_0.dot +802 -0
  382. data/doc/dot/m_23_0.jpg +0 -0
  383. data/doc/dot/m_24_0.dot +802 -0
  384. data/doc/dot/m_24_0.jpg +0 -0
  385. data/doc/dot/m_25_0.dot +802 -0
  386. data/doc/dot/m_25_0.jpg +0 -0
  387. data/doc/dot/m_26_0.dot +734 -0
  388. data/doc/dot/m_26_0.jpg +0 -0
  389. data/doc/dot/m_27_0.dot +802 -0
  390. data/doc/dot/m_27_0.jpg +0 -0
  391. data/doc/dot/m_28_0.dot +802 -0
  392. data/doc/dot/m_28_0.jpg +0 -0
  393. data/doc/dot/m_29_0.dot +802 -0
  394. data/doc/dot/m_29_0.jpg +0 -0
  395. data/doc/dot/m_30_0.dot +802 -0
  396. data/doc/dot/m_30_0.jpg +0 -0
  397. data/doc/dot/m_31_0.dot +802 -0
  398. data/doc/dot/m_31_0.jpg +0 -0
  399. data/doc/dot/m_32_0.dot +802 -0
  400. data/doc/dot/m_32_0.jpg +0 -0
  401. data/doc/dot/m_33_0.dot +802 -0
  402. data/doc/dot/m_33_0.jpg +0 -0
  403. data/doc/dot/m_34_0.dot +802 -0
  404. data/doc/dot/m_34_0.jpg +0 -0
  405. data/doc/dot/m_35_0.dot +802 -0
  406. data/doc/dot/m_35_0.jpg +0 -0
  407. data/doc/dot/m_36_0.dot +802 -0
  408. data/doc/dot/m_36_0.jpg +0 -0
  409. data/doc/dot/m_37_0.dot +802 -0
  410. data/doc/dot/m_37_0.jpg +0 -0
  411. data/doc/dot/m_38_0.dot +54 -0
  412. data/doc/dot/m_38_0.jpg +0 -0
  413. data/doc/dot/m_39_0.dot +802 -0
  414. data/doc/dot/m_39_0.jpg +0 -0
  415. data/doc/dot/m_40_0.dot +802 -0
  416. data/doc/dot/m_40_0.jpg +0 -0
  417. data/doc/dot/m_41_0.dot +802 -0
  418. data/doc/dot/m_41_0.jpg +0 -0
  419. data/doc/dot/m_42_0.dot +802 -0
  420. data/doc/dot/m_42_0.jpg +0 -0
  421. data/doc/dot/m_43_0.dot +802 -0
  422. data/doc/dot/m_43_0.jpg +0 -0
  423. data/doc/dot/m_44_0.dot +802 -0
  424. data/doc/dot/m_44_0.jpg +0 -0
  425. data/doc/dot/m_4_0.dot +802 -0
  426. data/doc/dot/m_4_0.jpg +0 -0
  427. data/doc/dot/m_5_0.dot +802 -0
  428. data/doc/dot/m_5_0.jpg +0 -0
  429. data/doc/dot/m_6_0.dot +802 -0
  430. data/doc/dot/m_6_0.jpg +0 -0
  431. data/doc/dot/m_7_0.dot +802 -0
  432. data/doc/dot/m_7_0.jpg +0 -0
  433. data/doc/dot/m_8_0.dot +802 -0
  434. data/doc/dot/m_8_0.jpg +0 -0
  435. data/doc/dot/m_9_0.dot +802 -0
  436. data/doc/dot/m_9_0.jpg +0 -0
  437. data/doc/files/DEPENDS.html +107 -0
  438. data/doc/files/HISTORY.html +316 -0
  439. data/doc/files/INSTALL.html +126 -0
  440. data/doc/files/README.html +1223 -0
  441. data/doc/files/TODO.html +148 -0
  442. data/doc/files/TUTORIAL.html +392 -0
  443. data/doc/files/VERSION.html +107 -0
  444. data/doc/files/bin/rq_rb.html +231 -0
  445. data/doc/files/install_rb.html +188 -0
  446. data/doc/files/install_rb.src/M000001.html +53 -0
  447. data/doc/files/install_rb.src/M000002.html +43 -0
  448. data/doc/files/lib/rq-1_0_0/backer_rb.html +174 -0
  449. data/doc/files/lib/rq-1_0_0/configfile_rb.html +174 -0
  450. data/doc/files/lib/rq-1_0_0/configurator_rb.html +174 -0
  451. data/doc/files/lib/rq-1_0_0/creator_rb.html +174 -0
  452. data/doc/files/lib/rq-1_0_0/defaultconfig_txt.html +110 -0
  453. data/doc/files/lib/rq-1_0_0/deleter_rb.html +174 -0
  454. data/doc/files/lib/rq-1_0_0/executor_rb.html +174 -0
  455. data/doc/files/lib/rq-1_0_0/feeder_rb.html +178 -0
  456. data/doc/files/lib/rq-1_0_0/job_rb.html +176 -0
  457. data/doc/files/lib/rq-1_0_0/jobqueue_rb.html +177 -0
  458. data/doc/files/lib/rq-1_0_0/jobrunner_rb.html +175 -0
  459. data/doc/files/lib/rq-1_0_0/jobrunnerdaemon_rb.html +179 -0
  460. data/doc/files/lib/rq-1_0_0/lister_rb.html +174 -0
  461. data/doc/files/lib/rq-1_0_0/locker_rb.html +175 -0
  462. data/doc/files/lib/rq-1_0_0/logging_rb.html +178 -0
  463. data/doc/files/lib/rq-1_0_0/mainhelper_rb.html +175 -0
  464. data/doc/files/lib/rq-1_0_0/qdb_rb.html +177 -0
  465. data/doc/files/lib/rq-1_0_0/querier_rb.html +174 -0
  466. data/doc/files/lib/rq-1_0_0/refresher_rb.html +167 -0
  467. data/doc/files/lib/rq-1_0_0/relayer_rb.html +178 -0
  468. data/doc/files/lib/rq-1_0_0/sleepcycle_rb.html +167 -0
  469. data/doc/files/lib/rq-1_0_0/snapshotter_rb.html +174 -0
  470. data/doc/files/lib/rq-1_0_0/statuslister_rb.html +174 -0
  471. data/doc/files/lib/rq-1_0_0/submitter_rb.html +174 -0
  472. data/doc/files/lib/rq-1_0_0/updater_rb.html +174 -0
  473. data/doc/files/lib/rq-1_0_0/usage_rb.html +174 -0
  474. data/doc/files/lib/rq-1_0_0/util_rb.html +176 -0
  475. data/doc/files/lib/rq-2_0_0/backer_rb.html +180 -0
  476. data/doc/files/lib/rq-2_0_0/configfile_rb.html +180 -0
  477. data/doc/files/lib/rq-2_0_0/configurator_rb.html +180 -0
  478. data/doc/files/lib/rq-2_0_0/creator_rb.html +180 -0
  479. data/doc/files/lib/rq-2_0_0/defaultconfig_txt.html +110 -0
  480. data/doc/files/lib/rq-2_0_0/deleter_rb.html +180 -0
  481. data/doc/files/lib/rq-2_0_0/executor_rb.html +180 -0
  482. data/doc/files/lib/rq-2_0_0/feeder_rb.html +184 -0
  483. data/doc/files/lib/rq-2_0_0/job_rb.html +182 -0
  484. data/doc/files/lib/rq-2_0_0/jobqueue_rb.html +185 -0
  485. data/doc/files/lib/rq-2_0_0/jobrunner_rb.html +181 -0
  486. data/doc/files/lib/rq-2_0_0/jobrunnerdaemon_rb.html +185 -0
  487. data/doc/files/lib/rq-2_0_0/lister_rb.html +180 -0
  488. data/doc/files/lib/rq-2_0_0/locker_rb.html +181 -0
  489. data/doc/files/lib/rq-2_0_0/logging_rb.html +184 -0
  490. data/doc/files/lib/rq-2_0_0/mainhelper_rb.html +181 -0
  491. data/doc/files/lib/rq-2_0_0/orderedautohash_rb.html +182 -0
  492. data/doc/files/lib/rq-2_0_0/orderedhash_rb.html +138 -0
  493. data/doc/files/lib/rq-2_0_0/qdb_rb.html +184 -0
  494. data/doc/files/lib/rq-2_0_0/querier_rb.html +180 -0
  495. data/doc/files/lib/rq-2_0_0/refresher_rb.html +173 -0
  496. data/doc/files/lib/rq-2_0_0/relayer_rb.html +184 -0
  497. data/doc/files/lib/rq-2_0_0/rotater_rb.html +180 -0
  498. data/doc/files/lib/rq-2_0_0/sleepcycle_rb.html +173 -0
  499. data/doc/files/lib/rq-2_0_0/snapshotter_rb.html +180 -0
  500. data/doc/files/lib/rq-2_0_0/statuslister_rb.html +180 -0
  501. data/doc/files/lib/rq-2_0_0/submitter_rb.html +181 -0
  502. data/doc/files/lib/rq-2_0_0/updater_rb.html +180 -0
  503. data/doc/files/lib/rq-2_0_0/usage_rb.html +180 -0
  504. data/doc/files/lib/rq-2_0_0/util_rb.html +182 -0
  505. data/doc/files/lib/rq-2_3_1/backer_rb.html +182 -0
  506. data/doc/files/lib/rq-2_3_1/configfile_rb.html +182 -0
  507. data/doc/files/lib/rq-2_3_1/configurator_rb.html +182 -0
  508. data/doc/files/lib/rq-2_3_1/creator_rb.html +182 -0
  509. data/doc/files/lib/rq-2_3_1/defaultconfig_txt.html +110 -0
  510. data/doc/files/lib/rq-2_3_1/deleter_rb.html +182 -0
  511. data/doc/files/lib/rq-2_3_1/executor_rb.html +182 -0
  512. data/doc/files/lib/rq-2_3_1/feeder_rb.html +187 -0
  513. data/doc/files/lib/rq-2_3_1/job_rb.html +185 -0
  514. data/doc/files/lib/rq-2_3_1/jobqueue_rb.html +187 -0
  515. data/doc/files/lib/rq-2_3_1/jobrunner_rb.html +184 -0
  516. data/doc/files/lib/rq-2_3_1/jobrunnerdaemon_rb.html +187 -0
  517. data/doc/files/lib/rq-2_3_1/lister_rb.html +182 -0
  518. data/doc/files/lib/rq-2_3_1/locker_rb.html +183 -0
  519. data/doc/files/lib/rq-2_3_1/logging_rb.html +186 -0
  520. data/doc/files/lib/rq-2_3_1/mainhelper_rb.html +183 -0
  521. data/doc/files/lib/rq-2_3_1/orderedautohash_rb.html +184 -0
  522. data/doc/files/lib/rq-2_3_1/orderedhash_rb.html +138 -0
  523. data/doc/files/lib/rq-2_3_1/qdb_rb.html +188 -0
  524. data/doc/files/lib/rq-2_3_1/querier_rb.html +182 -0
  525. data/doc/files/lib/rq-2_3_1/refresher_rb.html +175 -0
  526. data/doc/files/lib/rq-2_3_1/relayer_rb.html +186 -0
  527. data/doc/files/lib/rq-2_3_1/resubmitter_rb.html +183 -0
  528. data/doc/files/lib/rq-2_3_1/rotater_rb.html +182 -0
  529. data/doc/files/lib/rq-2_3_1/sleepcycle_rb.html +175 -0
  530. data/doc/files/lib/rq-2_3_1/snapshotter_rb.html +182 -0
  531. data/doc/files/lib/rq-2_3_1/statuslister_rb.html +182 -0
  532. data/doc/files/lib/rq-2_3_1/submitter_rb.html +183 -0
  533. data/doc/files/lib/rq-2_3_1/updater_rb.html +182 -0
  534. data/doc/files/lib/rq-2_3_1/usage_rb.html +182 -0
  535. data/doc/files/lib/rq-2_3_1/util_rb.html +184 -0
  536. data/doc/files/lib/rq-2_3_1_rb.html +153 -0
  537. data/doc/files/lib/rq-2_3_2/backer_rb.html +186 -0
  538. data/doc/files/lib/rq-2_3_2/configfile_rb.html +186 -0
  539. data/doc/files/lib/rq-2_3_2/configurator_rb.html +186 -0
  540. data/doc/files/lib/rq-2_3_2/creator_rb.html +186 -0
  541. data/doc/files/lib/rq-2_3_2/defaultconfig_txt.html +110 -0
  542. data/doc/files/lib/rq-2_3_2/deleter_rb.html +186 -0
  543. data/doc/files/lib/rq-2_3_2/executor_rb.html +186 -0
  544. data/doc/files/lib/rq-2_3_2/feeder_rb.html +191 -0
  545. data/doc/files/lib/rq-2_3_2/ioviewer_rb.html +186 -0
  546. data/doc/files/lib/rq-2_3_2/job_rb.html +189 -0
  547. data/doc/files/lib/rq-2_3_2/jobqueue_rb.html +192 -0
  548. data/doc/files/lib/rq-2_3_2/jobrunner_rb.html +188 -0
  549. data/doc/files/lib/rq-2_3_2/jobrunnerdaemon_rb.html +191 -0
  550. data/doc/files/lib/rq-2_3_2/lister_rb.html +186 -0
  551. data/doc/files/lib/rq-2_3_2/locker_rb.html +187 -0
  552. data/doc/files/lib/rq-2_3_2/logging_rb.html +190 -0
  553. data/doc/files/lib/rq-2_3_2/mainhelper_rb.html +188 -0
  554. data/doc/files/lib/rq-2_3_2/orderedautohash_rb.html +188 -0
  555. data/doc/files/lib/rq-2_3_2/orderedhash_rb.html +138 -0
  556. data/doc/files/lib/rq-2_3_2/qdb_rb.html +193 -0
  557. data/doc/files/lib/rq-2_3_2/querier_rb.html +186 -0
  558. data/doc/files/lib/rq-2_3_2/recoverer_rb.html +186 -0
  559. data/doc/files/lib/rq-2_3_2/refresher_rb.html +179 -0
  560. data/doc/files/lib/rq-2_3_2/relayer_rb.html +190 -0
  561. data/doc/files/lib/rq-2_3_2/resubmitter_rb.html +187 -0
  562. data/doc/files/lib/rq-2_3_2/rotater_rb.html +186 -0
  563. data/doc/files/lib/rq-2_3_2/sleepcycle_rb.html +179 -0
  564. data/doc/files/lib/rq-2_3_2/snapshotter_rb.html +186 -0
  565. data/doc/files/lib/rq-2_3_2/statuslister_rb.html +186 -0
  566. data/doc/files/lib/rq-2_3_2/submitter_rb.html +187 -0
  567. data/doc/files/lib/rq-2_3_2/updater_rb.html +186 -0
  568. data/doc/files/lib/rq-2_3_2/usage_rb.html +186 -0
  569. data/doc/files/lib/rq-2_3_2/util_rb.html +188 -0
  570. data/doc/files/lib/rq-2_3_3/backer_rb.html +186 -0
  571. data/doc/files/lib/rq-2_3_3/configfile_rb.html +186 -0
  572. data/doc/files/lib/rq-2_3_3/configurator_rb.html +186 -0
  573. data/doc/files/lib/rq-2_3_3/creator_rb.html +186 -0
  574. data/doc/files/lib/rq-2_3_3/defaultconfig_txt.html +110 -0
  575. data/doc/files/lib/rq-2_3_3/deleter_rb.html +186 -0
  576. data/doc/files/lib/rq-2_3_3/executor_rb.html +186 -0
  577. data/doc/files/lib/rq-2_3_3/feeder_rb.html +191 -0
  578. data/doc/files/lib/rq-2_3_3/ioviewer_rb.html +186 -0
  579. data/doc/files/lib/rq-2_3_3/job_rb.html +189 -0
  580. data/doc/files/lib/rq-2_3_3/jobqueue_rb.html +192 -0
  581. data/doc/files/lib/rq-2_3_3/jobrunner_rb.html +188 -0
  582. data/doc/files/lib/rq-2_3_3/jobrunnerdaemon_rb.html +191 -0
  583. data/doc/files/lib/rq-2_3_3/lister_rb.html +186 -0
  584. data/doc/files/lib/rq-2_3_3/locker_rb.html +187 -0
  585. data/doc/files/lib/rq-2_3_3/logging_rb.html +190 -0
  586. data/doc/files/lib/rq-2_3_3/mainhelper_rb.html +188 -0
  587. data/doc/files/lib/rq-2_3_3/orderedautohash_rb.html +188 -0
  588. data/doc/files/lib/rq-2_3_3/orderedhash_rb.html +138 -0
  589. data/doc/files/lib/rq-2_3_3/qdb_rb.html +193 -0
  590. data/doc/files/lib/rq-2_3_3/querier_rb.html +186 -0
  591. data/doc/files/lib/rq-2_3_3/recoverer_rb.html +186 -0
  592. data/doc/files/lib/rq-2_3_3/refresher_rb.html +179 -0
  593. data/doc/files/lib/rq-2_3_3/relayer_rb.html +190 -0
  594. data/doc/files/lib/rq-2_3_3/resubmitter_rb.html +187 -0
  595. data/doc/files/lib/rq-2_3_3/rotater_rb.html +187 -0
  596. data/doc/files/lib/rq-2_3_3/sleepcycle_rb.html +179 -0
  597. data/doc/files/lib/rq-2_3_3/snapshotter_rb.html +186 -0
  598. data/doc/files/lib/rq-2_3_3/statuslister_rb.html +186 -0
  599. data/doc/files/lib/rq-2_3_3/submitter_rb.html +187 -0
  600. data/doc/files/lib/rq-2_3_3/updater_rb.html +186 -0
  601. data/doc/files/lib/rq-2_3_3/usage_rb.html +186 -0
  602. data/doc/files/lib/rq-2_3_3/util_rb.html +188 -0
  603. data/doc/files/lib/rq-3_0_0/backer_rb.html +194 -0
  604. data/doc/files/lib/rq-3_0_0/configfile_rb.html +194 -0
  605. data/doc/files/lib/rq-3_0_0/configurator_rb.html +194 -0
  606. data/doc/files/lib/rq-3_0_0/creator_rb.html +194 -0
  607. data/doc/files/lib/rq-3_0_0/cron_rb.html +194 -0
  608. data/doc/files/lib/rq-3_0_0/defaultconfig_txt.html +110 -0
  609. data/doc/files/lib/rq-3_0_0/deleter_rb.html +194 -0
  610. data/doc/files/lib/rq-3_0_0/executor_rb.html +194 -0
  611. data/doc/files/lib/rq-3_0_0/feeder_rb.html +199 -0
  612. data/doc/files/lib/rq-3_0_0/ioviewer_rb.html +194 -0
  613. data/doc/files/lib/rq-3_0_0/job_rb.html +197 -0
  614. data/doc/files/lib/rq-3_0_0/jobqueue_rb.html +200 -0
  615. data/doc/files/lib/rq-3_0_0/jobrunner_rb.html +196 -0
  616. data/doc/files/lib/rq-3_0_0/jobrunnerdaemon_rb.html +199 -0
  617. data/doc/files/lib/rq-3_0_0/lister_rb.html +194 -0
  618. data/doc/files/lib/rq-3_0_0/locker_rb.html +195 -0
  619. data/doc/files/lib/rq-3_0_0/logging_rb.html +198 -0
  620. data/doc/files/lib/rq-3_0_0/mainhelper_rb.html +196 -0
  621. data/doc/files/lib/rq-3_0_0/orderedautohash_rb.html +196 -0
  622. data/doc/files/lib/rq-3_0_0/orderedhash_rb.html +138 -0
  623. data/doc/files/lib/rq-3_0_0/qdb_rb.html +201 -0
  624. data/doc/files/lib/rq-3_0_0/querier_rb.html +194 -0
  625. data/doc/files/lib/rq-3_0_0/recoverer_rb.html +194 -0
  626. data/doc/files/lib/rq-3_0_0/refresher_rb.html +187 -0
  627. data/doc/files/lib/rq-3_0_0/relayer_rb.html +198 -0
  628. data/doc/files/lib/rq-3_0_0/resource_rb.html +194 -0
  629. data/doc/files/lib/rq-3_0_0/resourcemanager_rb.html +187 -0
  630. data/doc/files/lib/rq-3_0_0/resubmitter_rb.html +195 -0
  631. data/doc/files/lib/rq-3_0_0/rotater_rb.html +195 -0
  632. data/doc/files/lib/rq-3_0_0/sleepcycle_rb.html +187 -0
  633. data/doc/files/lib/rq-3_0_0/snapshotter_rb.html +194 -0
  634. data/doc/files/lib/rq-3_0_0/sqlite_rb.html +160 -0
  635. data/doc/files/lib/rq-3_0_0/statuslister_rb.html +194 -0
  636. data/doc/files/lib/rq-3_0_0/submitter_rb.html +195 -0
  637. data/doc/files/lib/rq-3_0_0/toucher_rb.html +195 -0
  638. data/doc/files/lib/rq-3_0_0/updater_rb.html +194 -0
  639. data/doc/files/lib/rq-3_0_0/usage_rb.html +194 -0
  640. data/doc/files/lib/rq-3_0_0/util_rb.html +196 -0
  641. data/doc/files/lib/rq_rb.html +244 -0
  642. data/doc/fr_class_index.html +73 -0
  643. data/doc/fr_file_index.html +71 -0
  644. data/doc/fr_method_index.html +323 -0
  645. data/doc/index.html +24 -0
  646. data/doc/rdoc-style.css +172 -0
  647. data/extconf.rb +150 -0
  648. data/gemspec.rb +32 -0
  649. data/install.rb +75 -8
  650. data/lib/{rq-0.1.7.rb → rq-3.0.0.rb} +52 -10
  651. data/lib/{rq-0.1.7 → rq-3.0.0}/backer.rb +11 -7
  652. data/lib/{rq-0.1.7 → rq-3.0.0}/configfile.rb +21 -17
  653. data/lib/{rq-0.1.7 → rq-3.0.0}/configurator.rb +10 -6
  654. data/lib/rq-3.0.0/creator.rb +46 -0
  655. data/lib/rq-3.0.0/cron.rb +125 -0
  656. data/lib/{rq-0.1.7 → rq-3.0.0}/defaultconfig.txt +0 -0
  657. data/lib/rq-3.0.0/deleter.rb +51 -0
  658. data/lib/rq-3.0.0/executor.rb +40 -0
  659. data/lib/{rq-0.1.7 → rq-3.0.0}/feeder.rb +245 -91
  660. data/lib/rq-3.0.0/i686-linux/_sqlite.so +0 -0
  661. data/lib/rq-3.0.0/ioviewer.rb +48 -0
  662. data/lib/rq-3.0.0/job.rb +51 -0
  663. data/lib/rq-3.0.0/jobqueue.rb +899 -0
  664. data/lib/rq-3.0.0/jobrunner.rb +104 -0
  665. data/lib/{rq-0.1.7 → rq-3.0.0}/jobrunnerdaemon.rb +41 -27
  666. data/lib/rq-3.0.0/lister.rb +47 -0
  667. data/lib/rq-3.0.0/local/bin/sqlite +0 -0
  668. data/lib/rq-3.0.0/local/include/sqlite.h +868 -0
  669. data/lib/rq-3.0.0/local/lib/libsqlite.a +0 -0
  670. data/lib/rq-3.0.0/local/lib/libsqlite.la +35 -0
  671. data/lib/rq-3.0.0/local/lib/libsqlite.so +0 -0
  672. data/lib/rq-3.0.0/local/lib/libsqlite.so.0 +0 -0
  673. data/lib/rq-3.0.0/local/lib/libsqlite.so.0.8.6 +0 -0
  674. data/lib/rq-3.0.0/local/lib/pkgconfig/sqlite.pc +12 -0
  675. data/lib/{rq-0.1.7 → rq-3.0.0}/locker.rb +12 -6
  676. data/lib/{rq-0.1.7 → rq-3.0.0}/logging.rb +49 -42
  677. data/lib/rq-3.0.0/mainhelper.rb +184 -0
  678. data/lib/rq-3.0.0/orderedautohash.rb +39 -0
  679. data/lib/rq-3.0.0/orderedhash.rb +240 -0
  680. data/lib/{rq-0.1.7 → rq-3.0.0}/qdb.rb +183 -84
  681. data/lib/rq-3.0.0/querier.rb +98 -0
  682. data/lib/rq-3.0.0/recoverer.rb +28 -0
  683. data/lib/{rq-0.1.7 → rq-3.0.0}/refresher.rb +16 -8
  684. data/lib/rq-3.0.0/relayer.rb +283 -0
  685. data/lib/rq-3.0.0/resource.rb +22 -0
  686. data/lib/rq-3.0.0/resourcemanager.rb +40 -0
  687. data/lib/rq-3.0.0/resubmitter.rb +96 -0
  688. data/lib/rq-3.0.0/rotater.rb +98 -0
  689. data/lib/{rq-0.1.7 → rq-3.0.0}/sleepcycle.rb +14 -14
  690. data/lib/rq-3.0.0/snapshotter.rb +40 -0
  691. data/lib/rq-3.0.0/sqlite.rb +293 -0
  692. data/lib/rq-3.0.0/statuslister.rb +48 -0
  693. data/lib/rq-3.0.0/submitter.rb +109 -0
  694. data/lib/rq-3.0.0/toucher.rb +177 -0
  695. data/lib/rq-3.0.0/updater.rb +95 -0
  696. data/lib/rq-3.0.0/usage.rb +1157 -0
  697. data/lib/{rq-0.1.7 → rq-3.0.0}/util.rb +74 -56
  698. data/lib/rq.rb +52 -12
  699. data/rdoc.sh +17 -0
  700. data/rq +3 -1
  701. data/white_box/joblist +8 -0
  702. metadata +779 -96
  703. data/DEPENDS +0 -5
  704. data/HISTORY +0 -26
  705. data/VERSION +0 -1
  706. data/bin/rq-0.1.7 +0 -410
  707. data/lib/rq-0.1.7/creator.rb +0 -23
  708. data/lib/rq-0.1.7/deleter.rb +0 -39
  709. data/lib/rq-0.1.7/executor.rb +0 -41
  710. data/lib/rq-0.1.7/job.rb +0 -51
  711. data/lib/rq-0.1.7/jobqueue.rb +0 -432
  712. data/lib/rq-0.1.7/jobrunner.rb +0 -63
  713. data/lib/rq-0.1.7/lister.rb +0 -22
  714. data/lib/rq-0.1.7/mainhelper.rb +0 -53
  715. data/lib/rq-0.1.7/querier.rb +0 -33
  716. data/lib/rq-0.1.7/snapshotter.rb +0 -25
  717. data/lib/rq-0.1.7/statuslister.rb +0 -22
  718. data/lib/rq-0.1.7/submitter.rb +0 -90
  719. data/lib/rq-0.1.7/updater.rb +0 -95
  720. data/lib/rq-0.1.7/usage.rb +0 -609
  721. data/rdoc.cmd +0 -2
  722. data/rq.gemspec +0 -36
  723. 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
- class ConfigFile
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
@@ -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['feed'] || defval('feed'))
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
- info{ "mode <#{ @mode }>" }
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
- fill_morgue
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
- fork do
79
- Dir::chdir(Util.realpath('~'))
80
- File::umask 0
81
- open('/dev/null','r+') do |f|
82
- STDIN.reopen f
83
- STDOUT.reopen f
84
- STDERR.reopen f
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
- @daemon = true
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
- name ||= gen_feeder_name(@options['name'] || @qpath)
103
- @pidfile =
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
- open name, File::CREAT | File::EXCL | File::RDWR
106
- rescue
107
- open name, File::RDWR
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
- unless @pidfile and @pidfile.posixlock(File::LOCK_EX | File::LOCK_NB)
110
- pid = IO::read(name) rescue nil
111
- pid ||= 'unknown'
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
- raise "process <#{ pid }> is already feeding from this queue"
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
- at_exit{ FileUtils::rm_f name rescue nil }
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 gen_feeder_name path
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
- warn{ "signal <SIGHUP>" }
142
- warn{ "finishing running jobs before handling signal" }
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
- warn{ "signal <SIGTERM>" }
147
- warn{ "finishing running jobs before handling signal" }
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
- warn{ "signal <SIGINT>" }
152
- warn{ "finishing running jobs before handling signal" }
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
- tuples = db.execute sql
167
- tuples.each do |tuple|
168
- jid = tuple['jid']
169
- if jid
170
- sql = "update jobs set state='dead' where jid='#{ jid }'"
171
- db.execute sql
172
- info{ "burried job <#{ jid }>" }
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
- @jrd.shutdown rescue nil
193
- Util::uncache __FILE__
194
- @pidfile.posixlock File::LOCK_UN
195
- Util::exec @cmd
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 wait loop" }
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