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
@@ -0,0 +1,240 @@
1
+ # AUTHOR
2
+ # jan molic /mig/at/1984/dot/cz/
3
+ #
4
+ # DESCRIPTION
5
+ # Hash with preserved order and some array-like extensions
6
+ # Public domain.
7
+ #
8
+ # THANKS
9
+ # Andrew Johnson for his suggestions and fixes of Hash[],
10
+ # merge, to_a, inspect and shift
11
+ #
12
+ # USAGE
13
+ # just require this file and use OrderedHash instead of Hash (examples are at the end)
14
+ # you can try to run this file (ruby orderedhash.rb)
15
+ #
16
+
17
+ class OrderedHash < Hash
18
+
19
+ attr_accessor :order
20
+
21
+ class << self
22
+ def [] *args
23
+ hsh = OrderedHash.new
24
+ if Hash === args[0]
25
+ hsh.replace args[0]
26
+ elsif (args.size % 2) != 0
27
+ raise ArgumentError, "odd number of elements for Hash"
28
+ else
29
+ hsh[args.shift] = args.shift while args.size > 0
30
+ end
31
+ hsh
32
+ end
33
+ end
34
+
35
+ def initialize
36
+ @order = []
37
+ end
38
+
39
+ def store_only a,b
40
+ store a,b
41
+ end
42
+
43
+ alias orig_store store
44
+ def store a,b
45
+ @order.push a unless has_key? a
46
+ super a,b
47
+ end
48
+ alias []= store
49
+
50
+ def == hsh2
51
+ return false if @order != hsh2.order
52
+ super hsh2
53
+ end
54
+
55
+ def clear
56
+ @order = []
57
+ super
58
+ end
59
+
60
+ def delete key
61
+ @order.delete key
62
+ super
63
+ end
64
+
65
+ def each_key
66
+ @order.each { |k| yield k }
67
+ self
68
+ end
69
+
70
+ def each_value
71
+ @order.each { |k| yield self[k] }
72
+ self
73
+ end
74
+
75
+ def each
76
+ @order.each { |k| yield k,self[k] }
77
+ self
78
+ end
79
+ alias each_pair each
80
+
81
+ def delete_if
82
+ @order.clone.each { |k|
83
+ delete k if yield
84
+ }
85
+ self
86
+ end
87
+
88
+ def values
89
+ ary = []
90
+ @order.each { |k| ary.push self[k] }
91
+ ary
92
+ end
93
+
94
+ def keys
95
+ @order
96
+ end
97
+
98
+ def invert
99
+ hsh2 = Hash.new
100
+ @order.each { |k| hsh2[self[k]] = k }
101
+ hsh2
102
+ end
103
+
104
+ def reject &block
105
+ self.dup.delete_if &block
106
+ end
107
+
108
+ def reject! &block
109
+ hsh2 = reject &block
110
+ self == hsh2 ? nil : hsh2
111
+ end
112
+
113
+ def replace hsh2
114
+ @order = hsh2.keys
115
+ super hsh2
116
+ end
117
+
118
+ def shift
119
+ key = @order.first
120
+ key ? [key,delete(key)] : super
121
+ end
122
+
123
+ def unshift k,v
124
+ unless self.include? k
125
+ @order.unshift k
126
+ orig_store(k,v)
127
+ true
128
+ else
129
+ false
130
+ end
131
+ end
132
+
133
+ def push k,v
134
+ unless self.include? k
135
+ @order.push k
136
+ orig_store(k,v)
137
+ true
138
+ else
139
+ false
140
+ end
141
+ end
142
+
143
+ def pop
144
+ key = @order.last
145
+ key ? [key,delete(key)] : nil
146
+ end
147
+
148
+ def to_a
149
+ ary = []
150
+ each { |k,v| ary << [k,v] }
151
+ ary
152
+ end
153
+
154
+ def to_s
155
+ self.to_a.to_s
156
+ end
157
+
158
+ def inspect
159
+ ary = []
160
+ each {|k,v| ary << k.inspect + "=>" + v.inspect}
161
+ '{' + ary.join(", ") + '}'
162
+ end
163
+
164
+ def update hsh2
165
+ hsh2.each { |k,v| self[k] = v }
166
+ self
167
+ end
168
+ alias :merge! update
169
+
170
+ def merge hsh2
171
+ self.dup update(hsh2)
172
+ end
173
+
174
+ def select
175
+ ary = []
176
+ each { |k,v| ary << [k,v] if yield k,v }
177
+ ary
178
+ end
179
+
180
+ attr_accessor "to_yaml_style"
181
+ def yaml_inline= bool
182
+ if respond_to?("to_yaml_style")
183
+ self.to_yaml_style = :inline
184
+ else
185
+ unless defined? @__yaml_inline_meth
186
+ @__yaml_inline_meth =
187
+ lambda {|opts|
188
+ YAML::quick_emit(object_id, opts) {|emitter|
189
+ emitter << '{ ' << map{|kv| kv.join ': '}.join(', ') << ' }'
190
+ }
191
+ }
192
+ class << self
193
+ def to_yaml opts = {}
194
+ begin
195
+ @__yaml_inline ? @__yaml_inline_meth[ opts ] : super
196
+ rescue
197
+ @to_yaml_style = :inline
198
+ super
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end
204
+ @__yaml_inline = bool
205
+ end
206
+ def yaml_inline!() self.yaml_inline = true end
207
+
208
+ end
209
+
210
+ if __FILE__ == $0
211
+
212
+ # You can do simply
213
+ hsh = OrderedHash.new
214
+ hsh['z'] = 1
215
+ hsh['a'] = 2
216
+ hsh['c'] = 3
217
+ p hsh.keys # ['z','a','c']
218
+
219
+ # or using OrderedHash[] method
220
+ hsh = OrderedHash['z', 1, 'a', 2, 'c', 3]
221
+ p hsh.keys # ['z','a','c']
222
+
223
+ # but this don't preserve order
224
+ hsh = OrderedHash['z'=>1, 'a'=>2, 'c'=>3]
225
+ p hsh.keys # ['a','c','z']
226
+
227
+ # OrderedHash has useful extensions: push, pop and unshift
228
+ p hsh.push('to_end', 15) # true, key added
229
+ p hsh.push('to_end', 30) # false, already - nothing happen
230
+ p hsh.unshift('to_begin', 50) # true, key added
231
+ p hsh.unshift('to_begin', 60) # false, already - nothing happen
232
+ p hsh.keys # ["to_begin", "a", "c", "z", "to_end"]
233
+ p hsh.pop # ["to_end", 15], if nothing remains, return nil
234
+ p hsh.keys # ["to_begin", "a", "c", "z"]
235
+ p hsh.shift # ["to_begin", 30], if nothing remains, return nil
236
+
237
+ end
238
+
239
+
240
+ # END
@@ -1,39 +1,50 @@
1
1
  unless defined? $__rq_qdb__
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 'arrayfields'
8
+
7
9
  require LIBDIR + 'util'
8
10
  require LIBDIR + 'logging'
9
11
  require LIBDIR + 'sleepcycle'
10
12
  require LIBDIR + 'refresher'
11
13
 
14
+ #
15
+ # the QDB class is the low level access point to the actual sqlite database.
16
+ # the primary function if performs is to serialize access to the queue db
17
+ # via the locking protocol
18
+ #
12
19
  class QDB
13
- #{{{
20
+ #--{{{
14
21
  include Util
15
22
  include Logging
23
+
24
+ class RollbackTransactionError < StandardError; end
25
+ class AbortedTransactionError < StandardError; end
16
26
 
17
27
  FIELDS =
18
- #{{{
28
+ #--{{{
19
29
  %w(
20
30
  jid priority state
21
31
  submitted started finished elapsed
22
32
  submitter runner
33
+ stdin stdout stderr
23
34
  pid exit_status
24
- tag command
35
+ tag restartable command
25
36
  )
26
- #}}}
37
+ #--}}}
27
38
 
28
39
  PRAGMAS =
29
- #{{{
40
+ #--{{{
30
41
  <<-sql
31
42
  PRAGMA default_synchronous = FULL;
32
43
  sql
33
- #}}}
44
+ #--}}}
34
45
 
35
46
  SCHEMA =
36
- #{{{
47
+ #--{{{
37
48
  <<-sql
38
49
  create table jobs
39
50
  (
@@ -47,7 +58,7 @@ unless defined? $__rq_qdb__
47
58
  primary key (key)
48
59
  );
49
60
  sql
50
- #}}}
61
+ #--}}}
51
62
 
52
63
  DEFAULT_LOGGER = Logger::new(STDERR)
53
64
  DEFAULT_SQL_DEBUG = false
@@ -55,13 +66,12 @@ unless defined? $__rq_qdb__
55
66
  DEFAULT_AQUIRE_LOCK_SC = SleepCycle::new(2, 16, 2)
56
67
  DEFAULT_TRANSACTION_RETRIES_SC = SleepCycle::new(8, 24, 8)
57
68
  DEFAULT_ATTEMPT_LOCKD_RECOVERY = true
58
- DEFAULT_LOCKD_RECOVER_WAIT = 1800
59
- DEFAULT_AQUIRE_LOCK_LOCKFILE_STALE_AGE = 1800
60
- DEFAULT_AQUIRE_LOCK_REFRESH_RATE = 8
69
+ DEFAULT_LOCKD_RECOVER_WAIT = 3600 # 1 hr
70
+ DEFAULT_AQUIRE_LOCK_LOCKFILE_STALE_AGE = 21600 # 6 hrs
71
+ DEFAULT_AQUIRE_LOCK_REFRESH_RATE = 30
61
72
 
62
73
  class << self
63
- #{{{
64
- attr :logger, true
74
+ #--{{{
65
75
  attr :sql_debug, true
66
76
  attr :transaction_retries, true
67
77
  attr :aquire_lock_sc, true
@@ -72,18 +82,23 @@ unless defined? $__rq_qdb__
72
82
  attr :aquire_lock_refresh_rate, true
73
83
 
74
84
  def fields
75
- #{{{
85
+ #--{{{
76
86
  FIELDS
77
- #}}}
87
+ #--}}}
78
88
  end
79
89
  def integrity_check dbpath
80
- #{{{
90
+ #--{{{
81
91
  ret = false
82
92
  tuple = nil
83
93
  begin
84
- db = SQLite::Database::new dbpath, 0
94
+ db =
95
+ begin
96
+ SQLite::Database::new dbpath, 0
97
+ rescue
98
+ SQLite::Database::new dbpath
99
+ end
85
100
  opened = true
86
- db.use_array = true
101
+ db.use_array = true rescue nil
87
102
  tuple = db.execute 'PRAGMA integrity_check;'
88
103
  ret = (tuple and tuple.first and (tuple.first["integrity_check"] =~ /^\s*ok\s*$/io))
89
104
  ensure
@@ -91,42 +106,42 @@ unless defined? $__rq_qdb__
91
106
  db = nil
92
107
  end
93
108
  ret
94
- #}}}
109
+ #--}}}
95
110
  end
96
111
  def t2h tuple
97
- #{{{
112
+ #--{{{
98
113
  h = {}
99
114
  FIELDS.each_with_index{|f,i| h[f] = tuple[i]}
100
115
  h
101
- #}}}
116
+ #--}}}
102
117
  end
103
118
  def h2t h
104
- #{{{
119
+ #--{{{
105
120
  t = tuple
106
121
  FIELDS.each{|f| t[f] = h[f]}
107
122
  t
108
- #}}}
123
+ #--}}}
109
124
  end
110
125
  def tuple
111
- #{{{
126
+ #--{{{
112
127
  t = Array::new FIELDS.size
113
128
  t.fields = FIELDS
114
129
  t
115
- #}}}
130
+ #--}}}
116
131
  end
117
132
  def q tuple
118
- #{{{
119
- tuple.map do |f|
120
- if f
133
+ #--{{{
134
+ [ tuple ].flatten.map do |f|
135
+ if f and not f.to_s.empty?
121
136
  "'" << Util.escape(f,"'","'") << "'"
122
137
  else
123
138
  'NULL'
124
139
  end
125
140
  end
126
- #}}}
141
+ #--}}}
127
142
  end
128
143
  def create path, opts = {}
129
- #{{{
144
+ #--{{{
130
145
  qdb = new path, opts
131
146
  FileUtils::touch qdb.lockfile
132
147
  create_schema qdb.schema
@@ -135,19 +150,19 @@ unless defined? $__rq_qdb__
135
150
  qdb.execute SCHEMA
136
151
  end
137
152
  qdb
138
- #}}}
153
+ #--}}}
139
154
  end
140
155
  def create_schema path
141
- #{{{
156
+ #--{{{
142
157
  tmp = "#{ path }.tmp"
143
158
  open(tmp,'w') do |f|
144
159
  f.puts PRAGMAS
145
160
  f.puts SCHEMA
146
161
  end
147
162
  FileUtils::mv tmp, path
148
- #}}}
163
+ #--}}}
149
164
  end
150
- #}}}
165
+ #--}}}
151
166
  end
152
167
 
153
168
  attr :path
@@ -168,7 +183,7 @@ unless defined? $__rq_qdb__
168
183
 
169
184
 
170
185
  def initialize path, opts = {}
171
- #{{{
186
+ #--{{{
172
187
  @path = path
173
188
  @opts = opts
174
189
 
@@ -230,21 +245,22 @@ unless defined? $__rq_qdb__
230
245
  @lockf = Lockfile::new("#{ @path }.lock")
231
246
  @fields = FIELDS
232
247
  @in_transaction = false
248
+ @in_ro_transaction = false
233
249
  @db = nil
234
250
 
235
251
  @lockd_recover = "#{ @dirname }.lockd_recover"
236
252
  @lockd_recover_lockf = Lockfile::new "#{ @lockd_recover }.lock"
237
253
  @lockd_recovered = false
238
- #}}}
254
+ #--}}}
239
255
  end
240
256
  def ro_transaction(opts = {}, &block)
241
- #{{{
257
+ #--{{{
242
258
  opts['read_only'] = true
243
259
  transaction(opts, &block)
244
- #}}}
260
+ #--}}}
245
261
  end
246
262
  def transaction opts = {}
247
- #{{{
263
+ #--{{{
248
264
  raise 'nested transaction' if @in_transaction
249
265
  ro = Util::getopt 'read_only', opts
250
266
  ret = nil
@@ -267,10 +283,49 @@ unless defined? $__rq_qdb__
267
283
  @in_transaction = false
268
284
  end
269
285
  ret
270
- #}}}
286
+ #--}}}
287
+ end
288
+ if false
289
+ def ro_transaction(opts = {}, &block)
290
+ #--{{{
291
+ opts['read_only'] = true
292
+ transaction(opts, &block)
293
+ #--}}}
294
+ end
295
+ def transaction opts = {}
296
+ #--{{{
297
+ ro = Util::getopt 'read_only', opts
298
+ ret = nil
299
+ if @in_transaction
300
+ STDERR.puts 'continuing transaction...'
301
+ ret = yield
302
+ else
303
+ begin
304
+ STDERR.puts 'starting transaction...'
305
+ @in_transaction = true
306
+ lockd_recover_wrap(opts) do
307
+ transaction_wrap(opts) do
308
+ aquire_lock(opts) do
309
+ #sillyclean(opts) do
310
+ connect do
311
+ execute 'begin' unless ro
312
+ ret = yield
313
+ execute 'commit' unless ro
314
+ end
315
+ #end
316
+ end
317
+ end
318
+ end
319
+ ensure
320
+ @in_transaction = false
321
+ end
322
+ end
323
+ ret
324
+ #--}}}
271
325
  end
326
+ end
272
327
  def lockd_recover_wrap opts = {}
273
- #{{{
328
+ #--{{{
274
329
  ret = nil
275
330
  try_again = false
276
331
  begin
@@ -308,7 +363,7 @@ unless defined? $__rq_qdb__
308
363
  end
309
364
  end
310
365
  ret
311
- #}}}
366
+ #--}}}
312
367
  end
313
368
  #
314
369
  # TODO - perhaps should not retry on SQLException?? yet errors seem to map to
@@ -316,7 +371,7 @@ unless defined? $__rq_qdb__
316
371
  # simply retry.
317
372
  #
318
373
  def transaction_wrap opts = {}
319
- #{{{
374
+ #--{{{
320
375
  ro = Util::getopt 'read_only', opts
321
376
  ret = nil
322
377
  if ro
@@ -328,25 +383,42 @@ unless defined? $__rq_qdb__
328
383
  ret = yield
329
384
  rescue => e
330
385
  #rescue SQLite::DatabaseException, SQLite::SQLException, SystemCallError => e
331
- if @transaction_retries == 0
332
- raise
333
- elsif errors.size >= @transaction_retries
334
- error{ "MAXIMUM TRANSACTION RETRIES SURPASSED" }
335
- raise
336
- else
337
- warn{ e } if(errors.empty? or not Util::erreq(errors[-1], e))
338
- errors << e
339
- warn{ "retry <#{ errors.size }>..." }
340
- end
341
- sleep @transaction_retries_sc.next
342
- retry
386
+ case e
387
+ when AbortedTransactionError
388
+ raise
389
+ when RollbackTransactionError
390
+ raise
391
+ else
392
+ if @transaction_retries == 0
393
+ raise
394
+ elsif errors.size >= @transaction_retries
395
+ error{ "MAXIMUM TRANSACTION RETRIES SURPASSED" }
396
+ raise
397
+ else
398
+ warn{ e } if(errors.empty? or not Util::erreq(errors[-1], e))
399
+ errors << e
400
+ warn{ "retry <#{ errors.size }>..." }
401
+ end
402
+ sleep @transaction_retries_sc.next
403
+ retry
404
+ end
343
405
  end
344
406
  end
345
407
  ret
346
- #}}}
408
+ #--}}}
409
+ end
410
+ def abort_transaction(*a)
411
+ #--{{{
412
+ raise AbortedTransactionError, *a
413
+ #--}}}
414
+ end
415
+ def rollback_transaction(*a)
416
+ #--{{{
417
+ raise RollbackTransactionError, *a
418
+ #--}}}
347
419
  end
348
420
  def sillyclean opts = {}
349
- #{{{
421
+ #--{{{
350
422
  ro = Util::getopt 'read_only', opts
351
423
  ret = nil
352
424
  if ro
@@ -360,10 +432,10 @@ unless defined? $__rq_qdb__
360
432
  silly.each{|path| FileUtils::rm_rf path}
361
433
  end
362
434
  ret
363
- #}}}
435
+ #--}}}
364
436
  end
365
437
  def aquire_lock opts = {}
366
- #{{{
438
+ #--{{{
367
439
  ro = Util::getopt 'read_only', opts
368
440
  ret = nil
369
441
 
@@ -415,8 +487,16 @@ unless defined? $__rq_qdb__
415
487
  stat = File::stat @lockfile
416
488
  mtime = stat.mtime
417
489
  stale = mtime < (Time::now - @aquire_lock_lockfile_stale_age)
418
- warn{ "detected stale lockfile of mtime <#{ mtime }>" }
419
- lockd_recover if stale and @attempt_lockd_recovery
490
+ if stale
491
+ Util::uncache @lockfile rescue nil
492
+ stat = File::stat @lockfile
493
+ mtime = stat.mtime
494
+ stale = mtime < (Time::now - @aquire_lock_lockfile_stale_age)
495
+ if stale
496
+ warn{ "detected stale lockfile of mtime <#{ mtime }>" }
497
+ lockd_recover if @attempt_lockd_recovery
498
+ end
499
+ end
420
500
  sc = @aquire_lock_sc.next
421
501
  debug{ "failed to aquire lock - sleep(#{ sc })" }
422
502
  sleep sc
@@ -445,19 +525,24 @@ unless defined? $__rq_qdb__
445
525
  end
446
526
  end
447
527
  ret
448
- #}}}
528
+ #--}}}
449
529
  end
450
530
  def connect
451
- #{{{
531
+ #--{{{
452
532
  ret = nil
453
533
  opened = nil
454
534
  begin
455
535
  raise 'db has no schema' unless test ?e, @schema
456
536
  debug{"connecting to db <#{ @path }>..."}
457
- $db = @db = SQLite::Database::new(@path, 0)
537
+ $db = @db =
538
+ begin
539
+ SQLite::Database::new(@path, 0)
540
+ rescue
541
+ SQLite::Database::new(@path)
542
+ end
458
543
  debug{"connected."}
459
544
  opened = true
460
- @db.use_array = true
545
+ @db.use_array = true rescue nil
461
546
  ret = yield @db
462
547
  ensure
463
548
  @db.close if opened
@@ -465,27 +550,27 @@ unless defined? $__rq_qdb__
465
550
  debug{"disconnected from db <#{ @path }>"}
466
551
  end
467
552
  ret
468
- #}}}
553
+ #--}}}
469
554
  end
470
555
  def execute sql, &block
471
- #{{{
556
+ #--{{{
472
557
  raise 'not in transaction' unless @in_transaction
473
558
  if @sql_debug
474
559
  logger << "SQL:\n#{ sql }\n"
475
560
  end
476
561
  #ret = retry_if_locked{ @db.execute sql, &block }
477
562
  ret = @db.execute sql, &block
478
- if @sql_debug and ret and ret.first
563
+ if @sql_debug and ret and Array === ret and ret.first
479
564
  logger << "RESULT:\n#{ ret.first.inspect }\n...\n"
480
565
  end
481
566
  ret
482
- #}}}
567
+ #--}}}
483
568
  end
484
569
  #
485
570
  # TODO - add sleep cycle if this ends up getting used
486
571
  #
487
572
  def retry_if_locked
488
- #{{{
573
+ #--{{{
489
574
  ret = nil
490
575
  begin
491
576
  ret = yield
@@ -495,10 +580,10 @@ unless defined? $__rq_qdb__
495
580
  retry
496
581
  end
497
582
  ret
498
- #}}}
583
+ #--}}}
499
584
  end
500
585
  def vacuum
501
- #{{{
586
+ #--{{{
502
587
  raise 'nested transaction' if @in_transaction
503
588
  begin
504
589
  @in_transaction = true
@@ -507,10 +592,24 @@ unless defined? $__rq_qdb__
507
592
  @in_transaction = false
508
593
  end
509
594
  self
510
- #}}}
595
+ #--}}}
596
+ end
597
+ def recover!
598
+ #--{{{
599
+ raise 'nested transaction' if @in_transaction
600
+ begin
601
+ @in_transaction = true
602
+ connect{ execute 'vacuum' }
603
+ require 'timeout'
604
+ Timeout::timeout(60){ system "sqlite #{ @path } .tables >/dev/null 2>&1" }
605
+ ensure
606
+ @in_transaction = false
607
+ end
608
+ integrity_check
609
+ #--}}}
511
610
  end
512
611
  def lockd_recover
513
- #{{{
612
+ #--{{{
514
613
  return nil unless @attempt_lockd_recovery
515
614
  warn{ "attempting lockd recovery" }
516
615
  time = Time::now
@@ -598,16 +697,16 @@ unless defined? $__rq_qdb__
598
697
  end
599
698
  end
600
699
  ret
601
- #}}}
700
+ #--}}}
602
701
  end
603
702
  def integrity_check path = @path
604
- #{{{
703
+ #--{{{
605
704
  debug{ "running integrity_check on <#{ path }>" }
606
705
  klass.integrity_check(path)
607
- #}}}
706
+ #--}}}
608
707
  end
609
708
  def lock opts = {}
610
- #{{{
709
+ #--{{{
611
710
  ret = nil
612
711
  lockd_recover_wrap do
613
712
  aquire_lock(opts) do
@@ -615,20 +714,20 @@ unless defined? $__rq_qdb__
615
714
  end
616
715
  end
617
716
  ret
618
- #}}}
717
+ #--}}}
619
718
  end
620
719
  alias write_lock lock
621
720
  alias wlock write_lock
622
721
  def read_lock(opts = {}, &block)
623
- #{{{
722
+ #--{{{
624
723
  opts['read_only'] = true
625
724
  lock opts, &block
626
- #}}}
725
+ #--}}}
627
726
  end
628
727
  alias rlock read_lock
629
- #}}}
728
+ #--}}}
630
729
  end # class QDB
631
- #}}}
730
+ #--}}}
632
731
  end # module RQ
633
732
  $__rq_qdb__ = __FILE__
634
733
  end