switchman 1.5.0 → 1.5.3

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 (667) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/switchman/shard.rb +11 -653
  3. data/app/models/switchman/shard_internal.rb +658 -0
  4. data/lib/switchman/active_record/connection_handler.rb +0 -1
  5. data/lib/switchman/engine.rb +7 -3
  6. data/lib/switchman/version.rb +1 -1
  7. metadata +19 -1323
  8. data/spec/dummy/Rakefile +0 -7
  9. data/spec/dummy/app/models/appendage.rb +0 -22
  10. data/spec/dummy/app/models/digit.rb +0 -7
  11. data/spec/dummy/app/models/face.rb +0 -3
  12. data/spec/dummy/app/models/feature.rb +0 -3
  13. data/spec/dummy/app/models/mirror_user.rb +0 -5
  14. data/spec/dummy/app/models/root.rb +0 -5
  15. data/spec/dummy/app/models/user.rb +0 -29
  16. data/spec/dummy/config/application.rb +0 -48
  17. data/spec/dummy/config/boot.rb +0 -10
  18. data/spec/dummy/config/database.yml +0 -21
  19. data/spec/dummy/config/database.yml.example +0 -25
  20. data/spec/dummy/config/database.yml.travis +0 -4
  21. data/spec/dummy/config/environment.rb +0 -5
  22. data/spec/dummy/config/environments/development.rb +0 -26
  23. data/spec/dummy/config/environments/production.rb +0 -66
  24. data/spec/dummy/config/environments/test.rb +0 -28
  25. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  26. data/spec/dummy/config/initializers/migrations_path.rb +0 -5
  27. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  28. data/spec/dummy/config/initializers/session_store.rb +0 -8
  29. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  30. data/spec/dummy/config/routes.rb +0 -8
  31. data/spec/dummy/config.ru +0 -4
  32. data/spec/dummy/db/development.sqlite3 +0 -0
  33. data/spec/dummy/db/migrate/20130403132607_create_users.rb +0 -10
  34. data/spec/dummy/db/migrate/20130411202442_create_appendages.rb +0 -10
  35. data/spec/dummy/db/migrate/20130411202551_create_mirror_users.rb +0 -9
  36. data/spec/dummy/db/migrate/20131022202028_create_digits.rb +0 -10
  37. data/spec/dummy/db/migrate/20131206172923_create_features.rb +0 -12
  38. data/spec/dummy/db/migrate/20140123154135_add_parent_id_to_users.rb +0 -5
  39. data/spec/dummy/db/migrate/20140219183820_create_roots.rb +0 -9
  40. data/spec/dummy/db/migrate/20150618035859_add_dummy_foreign_key.rb +0 -5
  41. data/spec/dummy/db/migrate/20160122150718_create_faces.rb +0 -9
  42. data/spec/dummy/db/schema.rb +0 -74
  43. data/spec/dummy/db/shard_1006.sqlite3 +0 -0
  44. data/spec/dummy/db/shard_101.sqlite3 +0 -0
  45. data/spec/dummy/db/shard_1020.sqlite3 +0 -0
  46. data/spec/dummy/db/shard_1038.sqlite3 +0 -0
  47. data/spec/dummy/db/shard_1051.sqlite3 +0 -0
  48. data/spec/dummy/db/shard_1067.sqlite3 +0 -0
  49. data/spec/dummy/db/shard_1083.sqlite3 +0 -0
  50. data/spec/dummy/db/shard_1088.sqlite3 +0 -0
  51. data/spec/dummy/db/shard_1093.sqlite3 +0 -0
  52. data/spec/dummy/db/shard_1119.sqlite3 +0 -0
  53. data/spec/dummy/db/shard_1124.sqlite3 +0 -0
  54. data/spec/dummy/db/shard_1126.sqlite3 +0 -0
  55. data/spec/dummy/db/shard_1147.sqlite3 +0 -0
  56. data/spec/dummy/db/shard_1156.sqlite3 +0 -0
  57. data/spec/dummy/db/shard_117.sqlite3 +0 -0
  58. data/spec/dummy/db/shard_1173.sqlite3 +0 -0
  59. data/spec/dummy/db/shard_1186.sqlite3 +0 -0
  60. data/spec/dummy/db/shard_120.sqlite3 +0 -0
  61. data/spec/dummy/db/shard_1206.sqlite3 +0 -0
  62. data/spec/dummy/db/shard_1220.sqlite3 +0 -0
  63. data/spec/dummy/db/shard_1248.sqlite3 +0 -0
  64. data/spec/dummy/db/shard_1259.sqlite3 +0 -0
  65. data/spec/dummy/db/shard_1276.sqlite3 +0 -0
  66. data/spec/dummy/db/shard_1286.sqlite3 +0 -0
  67. data/spec/dummy/db/shard_1297.sqlite3 +0 -0
  68. data/spec/dummy/db/shard_1309.sqlite3 +0 -0
  69. data/spec/dummy/db/shard_1330.sqlite3 +0 -0
  70. data/spec/dummy/db/shard_1345.sqlite3 +0 -0
  71. data/spec/dummy/db/shard_1361.sqlite3 +0 -0
  72. data/spec/dummy/db/shard_1377.sqlite3 +0 -0
  73. data/spec/dummy/db/shard_1384.sqlite3 +0 -0
  74. data/spec/dummy/db/shard_1392.sqlite3 +0 -0
  75. data/spec/dummy/db/shard_1422.sqlite3 +0 -0
  76. data/spec/dummy/db/shard_143.sqlite3 +0 -0
  77. data/spec/dummy/db/shard_1446.sqlite3 +0 -0
  78. data/spec/dummy/db/shard_1463.sqlite3 +0 -0
  79. data/spec/dummy/db/shard_1481.sqlite3 +0 -0
  80. data/spec/dummy/db/shard_1493.sqlite3 +0 -0
  81. data/spec/dummy/db/shard_1508.sqlite3 +0 -0
  82. data/spec/dummy/db/shard_1517.sqlite3 +0 -0
  83. data/spec/dummy/db/shard_1528.sqlite3 +0 -0
  84. data/spec/dummy/db/shard_1542.sqlite3 +0 -0
  85. data/spec/dummy/db/shard_1553.sqlite3 +0 -0
  86. data/spec/dummy/db/shard_156.sqlite3 +0 -0
  87. data/spec/dummy/db/shard_1588.sqlite3 +0 -0
  88. data/spec/dummy/db/shard_1596.sqlite3 +0 -0
  89. data/spec/dummy/db/shard_1609.sqlite3 +0 -0
  90. data/spec/dummy/db/shard_1630.sqlite3 +0 -0
  91. data/spec/dummy/db/shard_1643.sqlite3 +0 -0
  92. data/spec/dummy/db/shard_1652.sqlite3 +0 -0
  93. data/spec/dummy/db/shard_1658.sqlite3 +0 -0
  94. data/spec/dummy/db/shard_1679.sqlite3 +0 -0
  95. data/spec/dummy/db/shard_170.sqlite3 +0 -0
  96. data/spec/dummy/db/shard_1700.sqlite3 +0 -0
  97. data/spec/dummy/db/shard_1703.sqlite3 +0 -0
  98. data/spec/dummy/db/shard_1721.sqlite3 +0 -0
  99. data/spec/dummy/db/shard_1733.sqlite3 +0 -0
  100. data/spec/dummy/db/shard_1746.sqlite3 +0 -0
  101. data/spec/dummy/db/shard_1759.sqlite3 +0 -0
  102. data/spec/dummy/db/shard_1783.sqlite3 +0 -0
  103. data/spec/dummy/db/shard_1809.sqlite3 +0 -0
  104. data/spec/dummy/db/shard_1846.sqlite3 +0 -0
  105. data/spec/dummy/db/shard_1872.sqlite3 +0 -0
  106. data/spec/dummy/db/shard_1881.sqlite3 +0 -0
  107. data/spec/dummy/db/shard_19.sqlite3 +0 -0
  108. data/spec/dummy/db/shard_1906.sqlite3 +0 -0
  109. data/spec/dummy/db/shard_191.sqlite3 +0 -0
  110. data/spec/dummy/db/shard_193.sqlite3 +0 -0
  111. data/spec/dummy/db/shard_1934.sqlite3 +0 -0
  112. data/spec/dummy/db/shard_1981.sqlite3 +0 -0
  113. data/spec/dummy/db/shard_2.sqlite3 +0 -0
  114. data/spec/dummy/db/shard_2006.sqlite3 +0 -0
  115. data/spec/dummy/db/shard_2013.sqlite3 +0 -0
  116. data/spec/dummy/db/shard_2041.sqlite3 +0 -0
  117. data/spec/dummy/db/shard_206.sqlite3 +0 -0
  118. data/spec/dummy/db/shard_2086.sqlite3 +0 -0
  119. data/spec/dummy/db/shard_2097.sqlite3 +0 -0
  120. data/spec/dummy/db/shard_2132.sqlite3 +0 -0
  121. data/spec/dummy/db/shard_2158.sqlite3 +0 -0
  122. data/spec/dummy/db/shard_2193.sqlite3 +0 -0
  123. data/spec/dummy/db/shard_2203.sqlite3 +0 -0
  124. data/spec/dummy/db/shard_2256.sqlite3 +0 -0
  125. data/spec/dummy/db/shard_23.sqlite3 +0 -0
  126. data/spec/dummy/db/shard_2301.sqlite3 +0 -0
  127. data/spec/dummy/db/shard_2336.sqlite3 +0 -0
  128. data/spec/dummy/db/shard_234.sqlite3 +0 -0
  129. data/spec/dummy/db/shard_235.sqlite3 +0 -0
  130. data/spec/dummy/db/shard_2360.sqlite3 +0 -0
  131. data/spec/dummy/db/shard_2385.sqlite3 +0 -0
  132. data/spec/dummy/db/shard_2406.sqlite3 +0 -0
  133. data/spec/dummy/db/shard_2452.sqlite3 +0 -0
  134. data/spec/dummy/db/shard_2465.sqlite3 +0 -0
  135. data/spec/dummy/db/shard_248.sqlite3 +0 -0
  136. data/spec/dummy/db/shard_2507.sqlite3 +0 -0
  137. data/spec/dummy/db/shard_2515.sqlite3 +0 -0
  138. data/spec/dummy/db/shard_2557.sqlite3 +0 -0
  139. data/spec/dummy/db/shard_257.sqlite3 +0 -0
  140. data/spec/dummy/db/shard_2580.sqlite3 +0 -0
  141. data/spec/dummy/db/shard_2598.sqlite3 +0 -0
  142. data/spec/dummy/db/shard_2626.sqlite3 +0 -0
  143. data/spec/dummy/db/shard_2672.sqlite3 +0 -0
  144. data/spec/dummy/db/shard_2681.sqlite3 +0 -0
  145. data/spec/dummy/db/shard_270.sqlite3 +0 -0
  146. data/spec/dummy/db/shard_2754.sqlite3 +0 -0
  147. data/spec/dummy/db/shard_277.sqlite3 +0 -0
  148. data/spec/dummy/db/shard_2790.sqlite3 +0 -0
  149. data/spec/dummy/db/shard_2803.sqlite3 +0 -0
  150. data/spec/dummy/db/shard_2834.sqlite3 +0 -0
  151. data/spec/dummy/db/shard_2862.sqlite3 +0 -0
  152. data/spec/dummy/db/shard_2897.sqlite3 +0 -0
  153. data/spec/dummy/db/shard_2928.sqlite3 +0 -0
  154. data/spec/dummy/db/shard_2951.sqlite3 +0 -0
  155. data/spec/dummy/db/shard_2970.sqlite3 +0 -0
  156. data/spec/dummy/db/shard_3009.sqlite3 +0 -0
  157. data/spec/dummy/db/shard_304.sqlite3 +0 -0
  158. data/spec/dummy/db/shard_3046.sqlite3 +0 -0
  159. data/spec/dummy/db/shard_3071.sqlite3 +0 -0
  160. data/spec/dummy/db/shard_311.sqlite3 +0 -0
  161. data/spec/dummy/db/shard_3114.sqlite3 +0 -0
  162. data/spec/dummy/db/shard_3157.sqlite3 +0 -0
  163. data/spec/dummy/db/shard_3234.sqlite3 +0 -0
  164. data/spec/dummy/db/shard_324.sqlite3 +0 -0
  165. data/spec/dummy/db/shard_3288.sqlite3 +0 -0
  166. data/spec/dummy/db/shard_333.sqlite3 +0 -0
  167. data/spec/dummy/db/shard_3352.sqlite3 +0 -0
  168. data/spec/dummy/db/shard_3380.sqlite3 +0 -0
  169. data/spec/dummy/db/shard_342.sqlite3 +0 -0
  170. data/spec/dummy/db/shard_3424.sqlite3 +0 -0
  171. data/spec/dummy/db/shard_3442.sqlite3 +0 -0
  172. data/spec/dummy/db/shard_3460.sqlite3 +0 -0
  173. data/spec/dummy/db/shard_347.sqlite3 +0 -0
  174. data/spec/dummy/db/shard_3488.sqlite3 +0 -0
  175. data/spec/dummy/db/shard_3524.sqlite3 +0 -0
  176. data/spec/dummy/db/shard_3554.sqlite3 +0 -0
  177. data/spec/dummy/db/shard_3594.sqlite3 +0 -0
  178. data/spec/dummy/db/shard_3611.sqlite3 +0 -0
  179. data/spec/dummy/db/shard_3639.sqlite3 +0 -0
  180. data/spec/dummy/db/shard_3661.sqlite3 +0 -0
  181. data/spec/dummy/db/shard_3689.sqlite3 +0 -0
  182. data/spec/dummy/db/shard_3749.sqlite3 +0 -0
  183. data/spec/dummy/db/shard_375.sqlite3 +0 -0
  184. data/spec/dummy/db/shard_3792.sqlite3 +0 -0
  185. data/spec/dummy/db/shard_3819.sqlite3 +0 -0
  186. data/spec/dummy/db/shard_385.sqlite3 +0 -0
  187. data/spec/dummy/db/shard_3866.sqlite3 +0 -0
  188. data/spec/dummy/db/shard_389.sqlite3 +0 -0
  189. data/spec/dummy/db/shard_3897.sqlite3 +0 -0
  190. data/spec/dummy/db/shard_405.sqlite3 +0 -0
  191. data/spec/dummy/db/shard_427.sqlite3 +0 -0
  192. data/spec/dummy/db/shard_428.sqlite3 +0 -0
  193. data/spec/dummy/db/shard_441.sqlite3 +0 -0
  194. data/spec/dummy/db/shard_452.sqlite3 +0 -0
  195. data/spec/dummy/db/shard_462.sqlite3 +0 -0
  196. data/spec/dummy/db/shard_472.sqlite3 +0 -0
  197. data/spec/dummy/db/shard_483.sqlite3 +0 -0
  198. data/spec/dummy/db/shard_49.sqlite3 +0 -0
  199. data/spec/dummy/db/shard_505.sqlite3 +0 -0
  200. data/spec/dummy/db/shard_508.sqlite3 +0 -0
  201. data/spec/dummy/db/shard_531.sqlite3 +0 -0
  202. data/spec/dummy/db/shard_554.sqlite3 +0 -0
  203. data/spec/dummy/db/shard_577.sqlite3 +0 -0
  204. data/spec/dummy/db/shard_58.sqlite3 +0 -0
  205. data/spec/dummy/db/shard_600.sqlite3 +0 -0
  206. data/spec/dummy/db/shard_623.sqlite3 +0 -0
  207. data/spec/dummy/db/shard_646.sqlite3 +0 -0
  208. data/spec/dummy/db/shard_668.sqlite3 +0 -0
  209. data/spec/dummy/db/shard_680.sqlite3 +0 -0
  210. data/spec/dummy/db/shard_698.sqlite3 +0 -0
  211. data/spec/dummy/db/shard_708.sqlite3 +0 -0
  212. data/spec/dummy/db/shard_727.sqlite3 +0 -0
  213. data/spec/dummy/db/shard_735.sqlite3 +0 -0
  214. data/spec/dummy/db/shard_74.sqlite3 +0 -0
  215. data/spec/dummy/db/shard_753.sqlite3 +0 -0
  216. data/spec/dummy/db/shard_76.sqlite3 +0 -0
  217. data/spec/dummy/db/shard_766.sqlite3 +0 -0
  218. data/spec/dummy/db/shard_778.sqlite3 +0 -0
  219. data/spec/dummy/db/shard_802.sqlite3 +0 -0
  220. data/spec/dummy/db/shard_818.sqlite3 +0 -0
  221. data/spec/dummy/db/shard_827.sqlite3 +0 -0
  222. data/spec/dummy/db/shard_869.sqlite3 +0 -0
  223. data/spec/dummy/db/shard_887.sqlite3 +0 -0
  224. data/spec/dummy/db/shard_895.sqlite3 +0 -0
  225. data/spec/dummy/db/shard_923.sqlite3 +0 -0
  226. data/spec/dummy/db/shard_930.sqlite3 +0 -0
  227. data/spec/dummy/db/shard_948.sqlite3 +0 -0
  228. data/spec/dummy/db/shard_953.sqlite3 +0 -0
  229. data/spec/dummy/db/shard_955.sqlite3 +0 -0
  230. data/spec/dummy/db/shard_982.sqlite3 +0 -0
  231. data/spec/dummy/db/shard_988.sqlite3 +0 -0
  232. data/spec/dummy/db/shard_989.sqlite3 +0 -0
  233. data/spec/dummy/db/test.sqlite3 +0 -0
  234. data/spec/dummy/log/development.log +0 -153
  235. data/spec/dummy/log/test.log +0 -21720
  236. data/spec/dummy/script/rails +0 -6
  237. data/spec/dummy/tmp/cache/316/980/shard%2F15 +0 -1
  238. data/spec/dummy/tmp/cache/319/A10/shard%2F72 +0 -1
  239. data/spec/dummy/tmp/cache/31A/A30/shard%2F82 +0 -0
  240. data/spec/dummy/tmp/cache/31B/A40/shard%2F83 +0 -0
  241. data/spec/dummy/tmp/cache/31C/A10/shard%2F48 +0 -1
  242. data/spec/dummy/tmp/cache/31C/A50/shard%2F84 +0 -1
  243. data/spec/dummy/tmp/cache/344/D90/shard%2F121 +0 -1
  244. data/spec/dummy/tmp/cache/344/DB0/shard%2F220 +0 -0
  245. data/spec/dummy/tmp/cache/345/DC0/shard%2F221 +0 -0
  246. data/spec/dummy/tmp/cache/346/DE0/shard%2F231 +0 -1
  247. data/spec/dummy/tmp/cache/346/E10/shard%2F501 +0 -1
  248. data/spec/dummy/tmp/cache/347/DE0/shard%2F142 +0 -1
  249. data/spec/dummy/tmp/cache/347/DF0/shard%2F151 +0 -1
  250. data/spec/dummy/tmp/cache/348/E30/shard%2F422 +0 -1
  251. data/spec/dummy/tmp/cache/349/E20/shard%2F243 +0 -0
  252. data/spec/dummy/tmp/cache/349/E40/shard%2F423 +0 -1
  253. data/spec/dummy/tmp/cache/34A/E00/shard%2F217 +0 -1
  254. data/spec/dummy/tmp/cache/34A/E20/shard%2F316 +0 -1
  255. data/spec/dummy/tmp/cache/34A/E30/shard%2F244 +0 -0
  256. data/spec/dummy/tmp/cache/34A/E30/shard%2F325 +0 -1
  257. data/spec/dummy/tmp/cache/34A/E90/shard%2F460 +0 -0
  258. data/spec/dummy/tmp/cache/34A/EC0/shard%2F730 +0 -1
  259. data/spec/dummy/tmp/cache/34B/E40/shard%2F245 +0 -1
  260. data/spec/dummy/tmp/cache/34B/E60/shard%2F344 +0 -1
  261. data/spec/dummy/tmp/cache/34B/E60/shard%2F425 +0 -1
  262. data/spec/dummy/tmp/cache/34B/E70/shard%2F434 +0 -1
  263. data/spec/dummy/tmp/cache/34C/E40/shard%2F156 +0 -1
  264. data/spec/dummy/tmp/cache/34C/E80/shard%2F354 +0 -1
  265. data/spec/dummy/tmp/cache/34C/EA0/shard%2F453 +0 -1
  266. data/spec/dummy/tmp/cache/34C/EF0/shard%2F822 +0 -0
  267. data/spec/dummy/tmp/cache/34D/E60/shard%2F409 +0 -1
  268. data/spec/dummy/tmp/cache/34D/EC0/shard%2F382 +0 -1
  269. data/spec/dummy/tmp/cache/34D/EE0/shard%2F724 +0 -1
  270. data/spec/dummy/tmp/cache/34E/EA0/shard%2F437 +0 -1
  271. data/spec/dummy/tmp/cache/34E/EF0/shard%2F806 +0 -1
  272. data/spec/dummy/tmp/cache/34F/EB0/shard%2F438 +0 -1
  273. data/spec/dummy/tmp/cache/34F/EC0/shard%2F285 +0 -1
  274. data/spec/dummy/tmp/cache/34F/F20/shard%2F744 +0 -0
  275. data/spec/dummy/tmp/cache/350/EF0/shard%2F466 +0 -1
  276. data/spec/dummy/tmp/cache/350/F30/shard%2F907 +0 -1
  277. data/spec/dummy/tmp/cache/351/EC0/shard%2F188 +0 -1
  278. data/spec/dummy/tmp/cache/351/EE0/shard%2F368 +0 -1
  279. data/spec/dummy/tmp/cache/351/F50/shard%2F917 +0 -0
  280. data/spec/dummy/tmp/cache/351/F60/shard%2F926 +0 -0
  281. data/spec/dummy/tmp/cache/351/F70/shard%2F935 +0 -1
  282. data/spec/dummy/tmp/cache/351/FB0/shard%2F971 +0 -1
  283. data/spec/dummy/tmp/cache/352/EF0/shard%2F369 +0 -1
  284. data/spec/dummy/tmp/cache/352/F70/shard%2F927 +0 -0
  285. data/spec/dummy/tmp/cache/352/F80/shard%2F693 +0 -1
  286. data/spec/dummy/tmp/cache/352/F90/shard%2F864 +0 -1
  287. data/spec/dummy/tmp/cache/353/F70/shard%2F838 +0 -1
  288. data/spec/dummy/tmp/cache/354/FA0/shard%2F776 +0 -1
  289. data/spec/dummy/tmp/cache/354/FF0/shard%2F983 +0 -1
  290. data/spec/dummy/tmp/cache/355/F90/shard%2F759 +0 -1
  291. data/spec/dummy/tmp/cache/357/FF0/shard%2F878 +0 -1
  292. data/spec/dummy/tmp/cache/374/490/shard%2F1012 +0 -1
  293. data/spec/dummy/tmp/cache/374/4C0/shard%2F2011 +0 -1
  294. data/spec/dummy/tmp/cache/376/500/shard%2F1140 +0 -1
  295. data/spec/dummy/tmp/cache/376/510/shard%2F1230 +0 -0
  296. data/spec/dummy/tmp/cache/376/550/shard%2F3210 +0 -1
  297. data/spec/dummy/tmp/cache/377/510/shard%2F1222 +0 -0
  298. data/spec/dummy/tmp/cache/377/540/shard%2F2221 +0 -1
  299. data/spec/dummy/tmp/cache/377/560/shard%2F3211 +0 -1
  300. data/spec/dummy/tmp/cache/378/510/shard%2F2105 +0 -1
  301. data/spec/dummy/tmp/cache/378/570/shard%2F3050 +0 -1
  302. data/spec/dummy/tmp/cache/379/4F0/shard%2F1107 +0 -1
  303. data/spec/dummy/tmp/cache/379/540/shard%2F3015 +0 -1
  304. data/spec/dummy/tmp/cache/379/550/shard%2F3024 +0 -1
  305. data/spec/dummy/tmp/cache/379/560/shard%2F2061 +0 -1
  306. data/spec/dummy/tmp/cache/379/570/shard%2F1341 +0 -1
  307. data/spec/dummy/tmp/cache/379/580/shard%2F2160 +0 -1
  308. data/spec/dummy/tmp/cache/379/580/shard%2F2403 +0 -1
  309. data/spec/dummy/tmp/cache/379/590/shard%2F1602 +0 -0
  310. data/spec/dummy/tmp/cache/379/5C0/shard%2F1710 +0 -1
  311. data/spec/dummy/tmp/cache/37A/510/shard%2F1117 +0 -1
  312. data/spec/dummy/tmp/cache/37A/540/shard%2F1063 +0 -1
  313. data/spec/dummy/tmp/cache/37A/540/shard%2F2035 +0 -1
  314. data/spec/dummy/tmp/cache/37A/550/shard%2F1315 +0 -1
  315. data/spec/dummy/tmp/cache/37A/570/shard%2F1252 +0 -1
  316. data/spec/dummy/tmp/cache/37A/570/shard%2F1414 +0 -1
  317. data/spec/dummy/tmp/cache/37A/5A0/shard%2F1360 +0 -1
  318. data/spec/dummy/tmp/cache/37A/5A0/shard%2F1603 +0 -0
  319. data/spec/dummy/tmp/cache/37A/5B0/shard%2F3151 +0 -1
  320. data/spec/dummy/tmp/cache/37A/5C0/shard%2F3322 +0 -1
  321. data/spec/dummy/tmp/cache/37A/5E0/shard%2F2611 +0 -1
  322. data/spec/dummy/tmp/cache/37B/520/shard%2F1118 +0 -1
  323. data/spec/dummy/tmp/cache/37B/540/shard%2F1217 +0 -1
  324. data/spec/dummy/tmp/cache/37B/550/shard%2F1064 +0 -1
  325. data/spec/dummy/tmp/cache/37B/560/shard%2F1154 +0 -1
  326. data/spec/dummy/tmp/cache/37B/5A0/shard%2F2081 +0 -1
  327. data/spec/dummy/tmp/cache/37B/5A0/shard%2F2324 +0 -1
  328. data/spec/dummy/tmp/cache/37B/5B0/shard%2F1361 +0 -1
  329. data/spec/dummy/tmp/cache/37B/5B0/shard%2F3062 +0 -1
  330. data/spec/dummy/tmp/cache/37B/5C0/shard%2F3152 +0 -1
  331. data/spec/dummy/tmp/cache/37B/5D0/shard%2F3161 +0 -1
  332. data/spec/dummy/tmp/cache/37B/5D0/shard%2F3323 +0 -1
  333. data/spec/dummy/tmp/cache/37C/570/shard%2F2127 +0 -1
  334. data/spec/dummy/tmp/cache/37C/5C0/shard%2F1524 +0 -1
  335. data/spec/dummy/tmp/cache/37C/5D0/shard%2F2343 +0 -1
  336. data/spec/dummy/tmp/cache/37C/5E0/shard%2F2352 +0 -1
  337. data/spec/dummy/tmp/cache/37C/5E0/shard%2F3081 +0 -1
  338. data/spec/dummy/tmp/cache/37C/5F0/shard%2F3090 +0 -1
  339. data/spec/dummy/tmp/cache/37D/560/shard%2F1057 +0 -1
  340. data/spec/dummy/tmp/cache/37D/570/shard%2F2038 +0 -1
  341. data/spec/dummy/tmp/cache/37D/5C0/shard%2F1273 +0 -1
  342. data/spec/dummy/tmp/cache/37D/5D0/shard%2F2092 +0 -1
  343. data/spec/dummy/tmp/cache/37D/5D0/shard%2F3145 +0 -1
  344. data/spec/dummy/tmp/cache/37D/5D0/shard%2F3226 +0 -1
  345. data/spec/dummy/tmp/cache/37D/5E0/shard%2F2344 +0 -1
  346. data/spec/dummy/tmp/cache/37D/5F0/shard%2F1624 +0 -1
  347. data/spec/dummy/tmp/cache/37D/5F0/shard%2F3082 +0 -2
  348. data/spec/dummy/tmp/cache/37D/5F0/shard%2F3406 +0 -1
  349. data/spec/dummy/tmp/cache/37D/600/shard%2F3091 +0 -1
  350. data/spec/dummy/tmp/cache/37D/610/shard%2F1723 +0 -1
  351. data/spec/dummy/tmp/cache/37D/630/shard%2F1903 +0 -1
  352. data/spec/dummy/tmp/cache/37D/640/shard%2F1750 +0 -1
  353. data/spec/dummy/tmp/cache/37D/650/shard%2F2812 +0 -1
  354. data/spec/dummy/tmp/cache/37D/650/shard%2F3622 +0 -1
  355. data/spec/dummy/tmp/cache/37D/660/shard%2F2740 +0 -2
  356. data/spec/dummy/tmp/cache/37E/580/shard%2F2039 +0 -1
  357. data/spec/dummy/tmp/cache/37E/590/shard%2F1238 +0 -1
  358. data/spec/dummy/tmp/cache/37E/5B0/shard%2F1418 +0 -1
  359. data/spec/dummy/tmp/cache/37E/5B0/shard%2F3119 +0 -1
  360. data/spec/dummy/tmp/cache/37E/5D0/shard%2F1193 +0 -1
  361. data/spec/dummy/tmp/cache/37E/5E0/shard%2F3146 +0 -1
  362. data/spec/dummy/tmp/cache/37E/630/shard%2F1490 +0 -1
  363. data/spec/dummy/tmp/cache/37E/640/shard%2F1904 +0 -1
  364. data/spec/dummy/tmp/cache/37E/640/shard%2F2390 +0 -1
  365. data/spec/dummy/tmp/cache/37E/660/shard%2F1922 +0 -1
  366. data/spec/dummy/tmp/cache/37F/610/shard%2F3084 +0 -1
  367. data/spec/dummy/tmp/cache/37F/640/shard%2F1491 +0 -1
  368. data/spec/dummy/tmp/cache/37F/640/shard%2F1815 +0 -1
  369. data/spec/dummy/tmp/cache/37F/660/shard%2F2562 +0 -1
  370. data/spec/dummy/tmp/cache/37F/680/shard%2F2823 +0 -1
  371. data/spec/dummy/tmp/cache/37F/6A0/shard%2F3570 +0 -1
  372. data/spec/dummy/tmp/cache/37F/6A0/shard%2F3813 +0 -1
  373. data/spec/dummy/tmp/cache/37F/6B0/shard%2F2931 +0 -1
  374. data/spec/dummy/tmp/cache/380/5F0/shard%2F1357 +0 -1
  375. data/spec/dummy/tmp/cache/380/600/shard%2F3148 +0 -1
  376. data/spec/dummy/tmp/cache/380/620/shard%2F1384 +0 -1
  377. data/spec/dummy/tmp/cache/380/620/shard%2F3085 +0 -1
  378. data/spec/dummy/tmp/cache/380/630/shard%2F1636 +0 -1
  379. data/spec/dummy/tmp/cache/380/630/shard%2F2527 +0 -1
  380. data/spec/dummy/tmp/cache/380/640/shard%2F3508 +0 -1
  381. data/spec/dummy/tmp/cache/380/670/shard%2F2644 +0 -1
  382. data/spec/dummy/tmp/cache/380/670/shard%2F3292 +0 -1
  383. data/spec/dummy/tmp/cache/380/690/shard%2F2824 +0 -1
  384. data/spec/dummy/tmp/cache/380/6B0/shard%2F3571 +0 -1
  385. data/spec/dummy/tmp/cache/380/6B0/shard%2F3814 +0 -1
  386. data/spec/dummy/tmp/cache/380/6E0/shard%2F2950 +0 -1
  387. data/spec/dummy/tmp/cache/380/6E0/shard%2F3841 +0 -1
  388. data/spec/dummy/tmp/cache/380/6F0/shard%2F3850 +0 -2
  389. data/spec/dummy/tmp/cache/381/5C0/shard%2F1079 +0 -1
  390. data/spec/dummy/tmp/cache/381/610/shard%2F3149 +0 -1
  391. data/spec/dummy/tmp/cache/381/640/shard%2F3338 +0 -1
  392. data/spec/dummy/tmp/cache/381/660/shard%2F3437 +0 -1
  393. data/spec/dummy/tmp/cache/381/690/shard%2F3707 +0 -1
  394. data/spec/dummy/tmp/cache/382/630/shard%2F2187 +0 -1
  395. data/spec/dummy/tmp/cache/382/630/shard%2F3078 +0 -1
  396. data/spec/dummy/tmp/cache/382/640/shard%2F1629 +0 -1
  397. data/spec/dummy/tmp/cache/382/640/shard%2F2277 +0 -1
  398. data/spec/dummy/tmp/cache/382/640/shard%2F3087 +0 -1
  399. data/spec/dummy/tmp/cache/382/650/shard%2F1395 +0 -1
  400. data/spec/dummy/tmp/cache/382/650/shard%2F2448 +0 -1
  401. data/spec/dummy/tmp/cache/382/660/shard%2F2295 +0 -1
  402. data/spec/dummy/tmp/cache/382/670/shard%2F1656 +0 -1
  403. data/spec/dummy/tmp/cache/382/690/shard%2F1836 +0 -1
  404. data/spec/dummy/tmp/cache/382/6A0/shard%2F3384 +0 -1
  405. data/spec/dummy/tmp/cache/382/6B0/shard%2F3636 +0 -1
  406. data/spec/dummy/tmp/cache/382/6D0/shard%2F3654 +0 -1
  407. data/spec/dummy/tmp/cache/382/6F0/shard%2F2781 +0 -1
  408. data/spec/dummy/tmp/cache/382/700/shard%2F2871 +0 -1
  409. data/spec/dummy/tmp/cache/383/640/shard%2F1297 +0 -1
  410. data/spec/dummy/tmp/cache/383/640/shard%2F1459 +0 -1
  411. data/spec/dummy/tmp/cache/383/640/shard%2F3079 +0 -1
  412. data/spec/dummy/tmp/cache/383/650/shard%2F3088 +0 -1
  413. data/spec/dummy/tmp/cache/383/6B0/shard%2F2494 +0 -1
  414. data/spec/dummy/tmp/cache/383/6B0/shard%2F2575 +0 -2
  415. data/spec/dummy/tmp/cache/383/6E0/shard%2F1792 +0 -1
  416. data/spec/dummy/tmp/cache/383/6E0/shard%2F3574 +0 -1
  417. data/spec/dummy/tmp/cache/383/6F0/shard%2F2935 +0 -1
  418. data/spec/dummy/tmp/cache/383/6F0/shard%2F3745 +0 -1
  419. data/spec/dummy/tmp/cache/383/710/shard%2F3682 +0 -1
  420. data/spec/dummy/tmp/cache/384/6B0/shard%2F3458 +0 -1
  421. data/spec/dummy/tmp/cache/384/6B0/shard%2F3539 +0 -1
  422. data/spec/dummy/tmp/cache/384/6E0/shard%2F3566 +0 -1
  423. data/spec/dummy/tmp/cache/384/700/shard%2F2693 +0 -1
  424. data/spec/dummy/tmp/cache/384/700/shard%2F2936 +0 -1
  425. data/spec/dummy/tmp/cache/384/710/shard%2F3836 +0 -1
  426. data/spec/dummy/tmp/cache/384/720/shard%2F3683 +0 -1
  427. data/spec/dummy/tmp/cache/385/6C0/shard%2F1677 +0 -1
  428. data/spec/dummy/tmp/cache/385/6D0/shard%2F2739 +0 -2
  429. data/spec/dummy/tmp/cache/385/6E0/shard%2F1695 +0 -1
  430. data/spec/dummy/tmp/cache/385/6E0/shard%2F1938 +0 -1
  431. data/spec/dummy/tmp/cache/385/6E0/shard%2F2586 +0 -1
  432. data/spec/dummy/tmp/cache/385/760/shard%2F2982 +0 -1
  433. data/spec/dummy/tmp/cache/386/6C0/shard%2F2479 +0 -1
  434. data/spec/dummy/tmp/cache/386/6E0/shard%2F3469 +0 -1
  435. data/spec/dummy/tmp/cache/386/710/shard%2F2767 +0 -2
  436. data/spec/dummy/tmp/cache/386/710/shard%2F2848 +0 -1
  437. data/spec/dummy/tmp/cache/386/740/shard%2F3847 +0 -1
  438. data/spec/dummy/tmp/cache/387/700/shard%2F2669 +0 -1
  439. data/spec/dummy/tmp/cache/387/710/shard%2F2759 +0 -1
  440. data/spec/dummy/tmp/cache/387/770/shard%2F3785 +0 -1
  441. data/spec/dummy/tmp/cache/387/780/shard%2F3875 +0 -1
  442. data/spec/dummy/tmp/cache/388/720/shard%2F1869 +0 -1
  443. data/spec/dummy/tmp/cache/388/770/shard%2F2886 +0 -1
  444. data/spec/dummy/tmp/cache/389/750/shard%2F1969 +0 -1
  445. data/spec/dummy/tmp/cache/389/760/shard%2F3598 +0 -1
  446. data/spec/dummy/tmp/cache/389/760/shard%2F3679 +0 -1
  447. data/spec/dummy/tmp/cache/38A/770/shard%2F3599 +0 -1
  448. data/spec/dummy/tmp/cache/38A/780/shard%2F1988 +0 -1
  449. data/spec/dummy/tmp/cache/38B/780/shard%2F1899 +0 -1
  450. data/spec/dummy/tmp/cache/38B/7B0/shard%2F3789 +0 -1
  451. data/spec/dummy/tmp/cache/38C/7E0/shard%2F3889 +0 -1
  452. data/spec/dummy/tmp/cache/3A4/EA0/shard%2F10012 +0 -1
  453. data/spec/dummy/tmp/cache/3A4/EE0/shard%2F11101 +0 -1
  454. data/spec/dummy/tmp/cache/3A4/F20/shard%2F13000 +0 -1
  455. data/spec/dummy/tmp/cache/3A5/EA0/shard%2F10004 +0 -1
  456. data/spec/dummy/tmp/cache/3A6/F10/shard%2F10221 +0 -1
  457. data/spec/dummy/tmp/cache/3A6/F20/shard%2F12012 +0 -1
  458. data/spec/dummy/tmp/cache/3A6/F40/shard%2F10410 +0 -1
  459. data/spec/dummy/tmp/cache/3A6/F50/shard%2F12120 +0 -1
  460. data/spec/dummy/tmp/cache/3A6/F50/shard%2F12201 +0 -1
  461. data/spec/dummy/tmp/cache/3A7/EF0/shard%2F11005 +0 -1
  462. data/spec/dummy/tmp/cache/3A7/F20/shard%2F10060 +0 -1
  463. data/spec/dummy/tmp/cache/3A7/F20/shard%2F11032 +0 -1
  464. data/spec/dummy/tmp/cache/3A7/F30/shard%2F10231 +0 -1
  465. data/spec/dummy/tmp/cache/3A7/FA0/shard%2F12400 +0 -1
  466. data/spec/dummy/tmp/cache/3A8/EF0/shard%2F10106 +0 -1
  467. data/spec/dummy/tmp/cache/3A8/F50/shard%2F10322 +0 -1
  468. data/spec/dummy/tmp/cache/3A8/F70/shard%2F11312 +0 -1
  469. data/spec/dummy/tmp/cache/3A8/F90/shard%2F10520 +0 -1
  470. data/spec/dummy/tmp/cache/3A8/FB0/shard%2F13211 +0 -1
  471. data/spec/dummy/tmp/cache/3A9/F40/shard%2F10062 +0 -1
  472. data/spec/dummy/tmp/cache/3A9/F50/shard%2F10152 +0 -1
  473. data/spec/dummy/tmp/cache/3A9/F50/shard%2F11124 +0 -1
  474. data/spec/dummy/tmp/cache/3A9/F80/shard%2F10341 +0 -1
  475. data/spec/dummy/tmp/cache/3A9/F90/shard%2F13023 +0 -1
  476. data/spec/dummy/tmp/cache/3AA/F10/shard%2F10027 +0 -1
  477. data/spec/dummy/tmp/cache/3AA/F10/shard%2F10108 +0 -1
  478. data/spec/dummy/tmp/cache/3AA/F30/shard%2F10045 +0 -1
  479. data/spec/dummy/tmp/cache/3AA/F90/shard%2F10423 +0 -1
  480. data/spec/dummy/tmp/cache/3AA/FB0/shard%2F10441 +0 -1
  481. data/spec/dummy/tmp/cache/3AA/FB0/shard%2F11170 +0 -1
  482. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F10612 +0 -1
  483. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F11260 +0 -1
  484. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F11503 +0 -1
  485. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F12313 +0 -1
  486. data/spec/dummy/tmp/cache/3AA/FD0/shard%2F13051 +0 -1
  487. data/spec/dummy/tmp/cache/3AB/000/shard%2F11450 +0 -1
  488. data/spec/dummy/tmp/cache/3AB/010/shard%2F10730 +0 -1
  489. data/spec/dummy/tmp/cache/3AB/010/shard%2F12512 +0 -1
  490. data/spec/dummy/tmp/cache/3AB/010/shard%2F13403 +0 -1
  491. data/spec/dummy/tmp/cache/3AB/020/shard%2F10901 +0 -1
  492. data/spec/dummy/tmp/cache/3AB/020/shard%2F11630 +0 -1
  493. data/spec/dummy/tmp/cache/3AB/020/shard%2F11711 +0 -1
  494. data/spec/dummy/tmp/cache/3AB/F30/shard%2F11009 +0 -1
  495. data/spec/dummy/tmp/cache/3AB/F70/shard%2F10154 +0 -1
  496. data/spec/dummy/tmp/cache/3AB/F80/shard%2F10244 +0 -1
  497. data/spec/dummy/tmp/cache/3AB/FD0/shard%2F11342 +0 -1
  498. data/spec/dummy/tmp/cache/3AB/FF0/shard%2F11603 +0 -1
  499. data/spec/dummy/tmp/cache/3AC/000/shard%2F11280 +0 -1
  500. data/spec/dummy/tmp/cache/3AC/000/shard%2F11361 +0 -1
  501. data/spec/dummy/tmp/cache/3AC/010/shard%2F13152 +0 -1
  502. data/spec/dummy/tmp/cache/3AC/020/shard%2F10650 +0 -1
  503. data/spec/dummy/tmp/cache/3AC/050/shard%2F13431 +0 -1
  504. data/spec/dummy/tmp/cache/3AC/F60/shard%2F10137 +0 -1
  505. data/spec/dummy/tmp/cache/3AC/F70/shard%2F11037 +0 -1
  506. data/spec/dummy/tmp/cache/3AC/F70/shard%2F11118 +0 -1
  507. data/spec/dummy/tmp/cache/3AC/F90/shard%2F10083 +0 -1
  508. data/spec/dummy/tmp/cache/3AC/F90/shard%2F11055 +0 -1
  509. data/spec/dummy/tmp/cache/3AC/FA0/shard%2F11064 +0 -1
  510. data/spec/dummy/tmp/cache/3AC/FA0/shard%2F11145 +0 -1
  511. data/spec/dummy/tmp/cache/3AC/FA0/shard%2F11226 +0 -1
  512. data/spec/dummy/tmp/cache/3AC/FA0/shard%2F11307 +0 -1
  513. data/spec/dummy/tmp/cache/3AC/FC0/shard%2F10272 +0 -1
  514. data/spec/dummy/tmp/cache/3AC/FD0/shard%2F11091 +0 -1
  515. data/spec/dummy/tmp/cache/3AC/FD0/shard%2F11172 +0 -1
  516. data/spec/dummy/tmp/cache/3AC/FD0/shard%2F11253 +0 -1
  517. data/spec/dummy/tmp/cache/3AC/FD0/shard%2F11415 +0 -1
  518. data/spec/dummy/tmp/cache/3AC/FF0/shard%2F10461 +0 -1
  519. data/spec/dummy/tmp/cache/3AC/FF0/shard%2F11514 +0 -1
  520. data/spec/dummy/tmp/cache/3AD/000/shard%2F10543 +0 -1
  521. data/spec/dummy/tmp/cache/3AD/010/shard%2F12253 +0 -1
  522. data/spec/dummy/tmp/cache/3AD/060/shard%2F11650 +0 -1
  523. data/spec/dummy/tmp/cache/3AD/F50/shard%2F10039 +0 -1
  524. data/spec/dummy/tmp/cache/3AD/F90/shard%2F10318 +0 -1
  525. data/spec/dummy/tmp/cache/3AD/FA0/shard%2F10246 +0 -1
  526. data/spec/dummy/tmp/cache/3AD/FC0/shard%2F10345 +0 -1
  527. data/spec/dummy/tmp/cache/3AE/030/shard%2F12344 +0 -1
  528. data/spec/dummy/tmp/cache/3AE/050/shard%2F10823 +0 -1
  529. data/spec/dummy/tmp/cache/3AE/060/shard%2F10751 +0 -1
  530. data/spec/dummy/tmp/cache/3AE/060/shard%2F11480 +0 -1
  531. data/spec/dummy/tmp/cache/3AE/090/shard%2F10940 +0 -1
  532. data/spec/dummy/tmp/cache/3AE/0B0/shard%2F12740 +0 -1
  533. data/spec/dummy/tmp/cache/3AE/FC0/shard%2F10175 +0 -1
  534. data/spec/dummy/tmp/cache/3AE/FD0/shard%2F11237 +0 -1
  535. data/spec/dummy/tmp/cache/3AE/FF0/shard%2F10364 +0 -1
  536. data/spec/dummy/tmp/cache/3AF/000/shard%2F12066 +0 -1
  537. data/spec/dummy/tmp/cache/3AF/000/shard%2F12147 +0 -1
  538. data/spec/dummy/tmp/cache/3AF/010/shard%2F11427 +0 -1
  539. data/spec/dummy/tmp/cache/3AF/020/shard%2F11193 +0 -1
  540. data/spec/dummy/tmp/cache/3AF/030/shard%2F10392 +0 -1
  541. data/spec/dummy/tmp/cache/3AF/030/shard%2F10635 +0 -1
  542. data/spec/dummy/tmp/cache/3AF/030/shard%2F11283 +0 -1
  543. data/spec/dummy/tmp/cache/3AF/030/shard%2F11526 +0 -1
  544. data/spec/dummy/tmp/cache/3AF/030/shard%2F12093 +0 -1
  545. data/spec/dummy/tmp/cache/3AF/030/shard%2F12174 +0 -1
  546. data/spec/dummy/tmp/cache/3AF/070/shard%2F12372 +0 -1
  547. data/spec/dummy/tmp/cache/3AF/080/shard%2F12624 +0 -1
  548. data/spec/dummy/tmp/cache/3AF/080/shard%2F13515 +0 -1
  549. data/spec/dummy/tmp/cache/3AF/090/shard%2F11823 +0 -1
  550. data/spec/dummy/tmp/cache/3AF/090/shard%2F11904 +0 -1
  551. data/spec/dummy/tmp/cache/3AF/0C0/shard%2F11850 +0 -1
  552. data/spec/dummy/tmp/cache/3AF/0C0/shard%2F11931 +0 -1
  553. data/spec/dummy/tmp/cache/3AF/0C0/shard%2F13551 +0 -1
  554. data/spec/dummy/tmp/cache/3AF/0F0/shard%2F13740 +0 -1
  555. data/spec/dummy/tmp/cache/3AF/FD0/shard%2F12039 +0 -1
  556. data/spec/dummy/tmp/cache/3B0/000/shard%2F10438 +0 -1
  557. data/spec/dummy/tmp/cache/3B0/040/shard%2F11365 +0 -1
  558. data/spec/dummy/tmp/cache/3B0/060/shard%2F11626 +0 -1
  559. data/spec/dummy/tmp/cache/3B0/060/shard%2F12436 +0 -1
  560. data/spec/dummy/tmp/cache/3B0/090/shard%2F10681 +0 -1
  561. data/spec/dummy/tmp/cache/3B0/090/shard%2F11491 +0 -1
  562. data/spec/dummy/tmp/cache/3B0/090/shard%2F11572 +0 -1
  563. data/spec/dummy/tmp/cache/3B0/0A0/shard%2F10771 +0 -1
  564. data/spec/dummy/tmp/cache/3B0/0C0/shard%2F12652 +0 -1
  565. data/spec/dummy/tmp/cache/3B0/FE0/shard%2F10177 +0 -1
  566. data/spec/dummy/tmp/cache/3B0/FE0/shard%2F11149 +0 -1
  567. data/spec/dummy/tmp/cache/3B0/FF0/shard%2F10267 +0 -1
  568. data/spec/dummy/tmp/cache/3B1/000/shard%2F11078 +0 -1
  569. data/spec/dummy/tmp/cache/3B1/030/shard%2F10295 +0 -1
  570. data/spec/dummy/tmp/cache/3B1/040/shard%2F10466 +0 -1
  571. data/spec/dummy/tmp/cache/3B1/070/shard%2F13328 +0 -1
  572. data/spec/dummy/tmp/cache/3B1/080/shard%2F10745 +0 -1
  573. data/spec/dummy/tmp/cache/3B1/080/shard%2F13094 +0 -1
  574. data/spec/dummy/tmp/cache/3B1/090/shard%2F10673 +0 -1
  575. data/spec/dummy/tmp/cache/3B1/090/shard%2F12293 +0 -1
  576. data/spec/dummy/tmp/cache/3B1/0B0/shard%2F11744 +0 -1
  577. data/spec/dummy/tmp/cache/3B1/0E0/shard%2F12824 +0 -1
  578. data/spec/dummy/tmp/cache/3B1/100/shard%2F12680 +0 -1
  579. data/spec/dummy/tmp/cache/3B1/100/shard%2F13571 +0 -1
  580. data/spec/dummy/tmp/cache/3B1/100/shard%2F13814 +0 -1
  581. data/spec/dummy/tmp/cache/3B2/060/shard%2F10719 +0 -1
  582. data/spec/dummy/tmp/cache/3B2/070/shard%2F10566 +0 -1
  583. data/spec/dummy/tmp/cache/3B2/070/shard%2F11538 +0 -1
  584. data/spec/dummy/tmp/cache/3B2/0A0/shard%2F10917 +0 -1
  585. data/spec/dummy/tmp/cache/3B2/0A0/shard%2F12456 +0 -1
  586. data/spec/dummy/tmp/cache/3B2/0D0/shard%2F11673 +0 -1
  587. data/spec/dummy/tmp/cache/3B2/0E0/shard%2F10953 +0 -1
  588. data/spec/dummy/tmp/cache/3B2/120/shard%2F12852 +0 -1
  589. data/spec/dummy/tmp/cache/3B2/150/shard%2F13851 +0 -1
  590. data/spec/dummy/tmp/cache/3B3/030/shard%2F10198 +0 -1
  591. data/spec/dummy/tmp/cache/3B3/040/shard%2F10369 +0 -1
  592. data/spec/dummy/tmp/cache/3B3/060/shard%2F10387 +0 -1
  593. data/spec/dummy/tmp/cache/3B3/0A0/shard%2F11719 +0 -1
  594. data/spec/dummy/tmp/cache/3B3/0C0/shard%2F10927 +0 -1
  595. data/spec/dummy/tmp/cache/3B3/0E0/shard%2F12484 +0 -1
  596. data/spec/dummy/tmp/cache/3B3/0E0/shard%2F13375 +0 -1
  597. data/spec/dummy/tmp/cache/3B3/0F0/shard%2F13627 +0 -1
  598. data/spec/dummy/tmp/cache/3B3/100/shard%2F10963 +0 -1
  599. data/spec/dummy/tmp/cache/3B3/100/shard%2F11692 +0 -1
  600. data/spec/dummy/tmp/cache/3B3/160/shard%2F12880 +0 -1
  601. data/spec/dummy/tmp/cache/3B4/090/shard%2F10487 +0 -1
  602. data/spec/dummy/tmp/cache/3B4/0A0/shard%2F11468 +0 -1
  603. data/spec/dummy/tmp/cache/3B4/0A0/shard%2F11549 +0 -1
  604. data/spec/dummy/tmp/cache/3B4/0D0/shard%2F11657 +0 -1
  605. data/spec/dummy/tmp/cache/3B4/0D0/shard%2F11738 +0 -1
  606. data/spec/dummy/tmp/cache/3B4/0D0/shard%2F12548 +0 -1
  607. data/spec/dummy/tmp/cache/3B4/0E0/shard%2F13286 +0 -1
  608. data/spec/dummy/tmp/cache/3B4/110/shard%2F12908 +0 -1
  609. data/spec/dummy/tmp/cache/3B4/130/shard%2F13655 +0 -1
  610. data/spec/dummy/tmp/cache/3B5/070/shard%2F10299 +0 -1
  611. data/spec/dummy/tmp/cache/3B5/080/shard%2F11199 +0 -1
  612. data/spec/dummy/tmp/cache/3B5/0B0/shard%2F10497 +0 -1
  613. data/spec/dummy/tmp/cache/3B5/0B0/shard%2F11388 +0 -1
  614. data/spec/dummy/tmp/cache/3B5/100/shard%2F11595 +0 -1
  615. data/spec/dummy/tmp/cache/3B5/110/shard%2F10875 +0 -1
  616. data/spec/dummy/tmp/cache/3B5/110/shard%2F12576 +0 -1
  617. data/spec/dummy/tmp/cache/3B5/150/shard%2F12936 +0 -1
  618. data/spec/dummy/tmp/cache/3B5/170/shard%2F13683 +0 -1
  619. data/spec/dummy/tmp/cache/3B6/0F0/shard%2F10849 +0 -1
  620. data/spec/dummy/tmp/cache/3B6/100/shard%2F10696 +0 -1
  621. data/spec/dummy/tmp/cache/3B6/110/shard%2F13459 +0 -1
  622. data/spec/dummy/tmp/cache/3B6/190/shard%2F12964 +0 -1
  623. data/spec/dummy/tmp/cache/3B7/0E0/shard%2F10589 +0 -1
  624. data/spec/dummy/tmp/cache/3B7/140/shard%2F11696 +0 -1
  625. data/spec/dummy/tmp/cache/3B7/150/shard%2F12596 +0 -1
  626. data/spec/dummy/tmp/cache/3B7/150/shard%2F13487 +0 -1
  627. data/spec/dummy/tmp/cache/3B8/140/shard%2F10797 +0 -1
  628. data/spec/dummy/tmp/cache/3B8/140/shard%2F11769 +0 -1
  629. data/spec/dummy/tmp/cache/3B8/170/shard%2F10986 +0 -1
  630. data/spec/dummy/tmp/cache/3B8/170/shard%2F11796 +0 -1
  631. data/spec/dummy/tmp/cache/3B8/170/shard%2F11877 +0 -1
  632. data/spec/dummy/tmp/cache/3B8/170/shard%2F11958 +0 -1
  633. data/spec/dummy/tmp/cache/3B8/170/shard%2F12768 +0 -1
  634. data/spec/dummy/tmp/cache/3B9/1B0/shard%2F12796 +0 -1
  635. data/spec/dummy/tmp/cache/3B9/1D0/shard%2F13786 +0 -1
  636. data/spec/dummy/tmp/cache/3BA/160/shard%2F10799 +0 -1
  637. data/spec/dummy/tmp/cache/3BA/180/shard%2F10979 +0 -1
  638. data/spec/dummy/tmp/cache/3BA/1C0/shard%2F11987 +0 -1
  639. data/spec/dummy/tmp/cache/3BB/1C0/shard%2F13599 +0 -1
  640. data/spec/dummy/tmp/cache/3BB/210/shard%2F13887 +0 -1
  641. data/spec/lib/action_controller/caching_spec.rb +0 -49
  642. data/spec/lib/active_record/abstract_adapter_spec.rb +0 -16
  643. data/spec/lib/active_record/association_spec.rb +0 -444
  644. data/spec/lib/active_record/attribute_methods_spec.rb +0 -122
  645. data/spec/lib/active_record/base_spec.rb +0 -130
  646. data/spec/lib/active_record/calculations_spec.rb +0 -282
  647. data/spec/lib/active_record/connection_handler_spec.rb +0 -45
  648. data/spec/lib/active_record/connection_pool_spec.rb +0 -83
  649. data/spec/lib/active_record/finder_methods_spec.rb +0 -58
  650. data/spec/lib/active_record/model_schema_spec.rb +0 -25
  651. data/spec/lib/active_record/persistence_spec.rb +0 -34
  652. data/spec/lib/active_record/postgresql_adapter_spec.rb +0 -40
  653. data/spec/lib/active_record/query_cache_spec.rb +0 -346
  654. data/spec/lib/active_record/query_methods_spec.rb +0 -166
  655. data/spec/lib/active_record/relation_spec.rb +0 -56
  656. data/spec/lib/active_record/spawn_methods_spec.rb +0 -44
  657. data/spec/lib/connection_pool_proxy_spec.rb +0 -45
  658. data/spec/lib/database_server_spec.rb +0 -231
  659. data/spec/lib/default_shard_spec.rb +0 -18
  660. data/spec/lib/engine_spec.rb +0 -14
  661. data/spec/lib/environment_spec.rb +0 -25
  662. data/spec/lib/r_spec_helper_spec.rb +0 -77
  663. data/spec/lib/rails_spec.rb +0 -31
  664. data/spec/lib/rake_spec.rb +0 -100
  665. data/spec/lib/shackles_spec.rb +0 -210
  666. data/spec/models/shard_spec.rb +0 -596
  667. data/spec/spec_helper.rb +0 -66
@@ -1,346 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Switchman
4
- module ActiveRecord
5
- describe QueryCache do
6
- include RSpecHelper
7
-
8
- # call with two blocks. the first will run on a new thread, pausing at
9
- # the site of a "cc.call". the second will run on the original thread
10
- # while the first is paused. the first will then finish.
11
- def threaded(blk1, blk2)
12
- mutex = Mutex.new
13
- ready1 = ConditionVariable.new
14
- ready2 = ConditionVariable.new
15
-
16
- cc = lambda do
17
- mutex.synchronize do
18
- ready1.signal
19
- ready2.wait(mutex)
20
- end
21
- end
22
-
23
- thread = Thread.new do
24
- blk1.call(cc)
25
- ::ActiveRecord::Base.connection_pool.release_connection
26
- end
27
-
28
- mutex.synchronize do
29
- ready1.wait(mutex)
30
- blk2.call
31
- ready2.signal
32
- end
33
-
34
- thread.join
35
- end
36
-
37
- before do
38
- User.connection.clear_query_cache
39
- @orig_enabled = User.connection.query_cache_enabled
40
- @orig_cache = User.connection.query_cache.dup
41
- end
42
-
43
- after do
44
- User.connection.query_cache_enabled = @enabled
45
- User.connection.instance_variable_set(:@query_cache, @orig_cache)
46
- end
47
-
48
- it "should isolate queries to multiple shards on the same server" do
49
- @shard1.activate do
50
- User.create!
51
- User.create!
52
- end
53
- @shard3.activate do
54
- User.create!
55
- end
56
- expect(@shard1.activate { User.all.to_a }).not_to eq @shard3.activate { User.all.to_a }
57
- end
58
-
59
- describe "query_cache_enabled" do
60
- it "should be shared across shards on the same server" do
61
- @shard1.activate{ User.connection.query_cache_enabled = true }
62
- @shard3.activate{ User.connection.query_cache_enabled = false }
63
- @shard1.activate{ expect(User.connection.query_cache_enabled).to eq false }
64
- end
65
-
66
- it "should be shared across servers" do
67
- @shard1.activate{ User.connection.query_cache_enabled = true }
68
- @shard2.activate{ User.connection.query_cache_enabled = false }
69
- @shard1.activate{ expect(User.connection.query_cache_enabled).to eq false }
70
- end
71
-
72
- it "should be distinct across threads" do
73
- User.connection.query_cache_enabled = true
74
- threaded(
75
- lambda{ |cc| User.connection.query_cache_enabled = false; cc.call },
76
- lambda{ expect(User.connection.query_cache_enabled).to eq true })
77
- end
78
- end
79
-
80
- describe "enable_query_cache!" do
81
- it "should only enable for the current thread" do
82
- User.connection.query_cache_enabled = false
83
- threaded(
84
- lambda{ |cc|
85
- User.connection.query_cache_enabled = false
86
- User.connection.enable_query_cache!
87
- expect(User.connection.query_cache_enabled).to eq true
88
- cc.call
89
- },
90
- lambda{ expect(User.connection.query_cache_enabled).to eq false })
91
- end
92
- end
93
-
94
- describe "disable_query_cache!" do
95
- it "should only enable for the current thread" do
96
- User.connection.query_cache_enabled = true
97
- threaded(
98
- lambda{ |cc|
99
- User.connection.query_cache_enabled = true
100
- User.connection.disable_query_cache!
101
- expect(User.connection.query_cache_enabled).to eq false
102
- cc.call
103
- },
104
- lambda{ expect(User.connection.query_cache_enabled).to eq true })
105
- end
106
- end
107
-
108
- describe "cache" do
109
- it "should only enable for the current thread" do
110
- # check that query_cache_enabled stays false on this thread while
111
- # another thread is in a cache{} block
112
- User.connection.disable_query_cache!
113
- threaded(
114
- lambda{ |cc| User.connection.cache{ cc.call } },
115
- lambda{ expect(User.connection.query_cache_enabled).to eq false })
116
- end
117
-
118
- it "should only enable for the duration of the block" do
119
- User.connection.disable_query_cache!
120
- User.connection.cache do
121
- expect(User.connection.query_cache_enabled).to eq true
122
- end
123
- expect(User.connection.query_cache_enabled).to eq false
124
- end
125
-
126
- it "should clear query cache if disabling query cache after block" do
127
- User.connection.disable_query_cache!
128
- User.connection.cache do
129
- User.connection.query_cache[:key][:binds] = :value
130
- end
131
- expect(User.connection.query_cache[:key][:binds]).to be_nil
132
- end
133
-
134
- it "should not clear query cache if the cache was already enabled" do
135
- User.connection.enable_query_cache!
136
- User.connection.cache do
137
- User.connection.query_cache[:key][:binds] = :value
138
- end
139
- expect(User.connection.query_cache[:key][:binds]).to eq :value
140
- end
141
- end
142
-
143
- describe "uncached" do
144
- it "should only disable for the current thread" do
145
- # check that query_cache_enabled stays true on this thread while
146
- # another thread is in an uncached{} block
147
- User.connection.enable_query_cache!
148
- threaded(
149
- lambda{ |cc| User.connection.uncached{ cc.call } },
150
- lambda{ expect(User.connection.query_cache_enabled).to eq true })
151
- end
152
-
153
- it "should only disable for the duration of the block" do
154
- User.connection.enable_query_cache!
155
- User.connection.uncached do
156
- expect(User.connection.query_cache_enabled).to eq false
157
- end
158
- expect(User.connection.query_cache_enabled).to eq true
159
- end
160
-
161
- it "should not clear query cache" do
162
- User.connection.query_cache[:key][:binds] = :value
163
- User.connection.uncached{}
164
- expect(User.connection.query_cache[:key][:binds]).to eq :value
165
- end
166
- end
167
-
168
- describe "select_all" do
169
- it "should cache when query cache enabled" do
170
- User.connection.enable_query_cache!
171
- User.all.to_a
172
- expect(User.connection.query_cache).not_to be_empty
173
- end
174
-
175
- it "should not cache when query cache disabled" do
176
- User.connection.disable_query_cache!
177
- User.all.to_a
178
- expect(User.connection.query_cache).to be_empty
179
- end
180
-
181
- it "should not cache when query cache disabled but other thread's enabled" do
182
- User.connection.disable_query_cache!
183
- threaded(
184
- lambda{ |cc| User.connection.cache{ cc.call } },
185
- lambda{ User.all.to_a; expect(User.connection.query_cache).to be_empty })
186
- end
187
-
188
- it "should not cache when query is locked" do
189
- User.connection.enable_query_cache!
190
- User.lock.to_a
191
- expect(User.connection.query_cache).to be_empty
192
- end
193
- end
194
-
195
- describe "insert" do
196
- it "should clear thread's query cache if enabled" do
197
- User.connection.enable_query_cache!
198
- User.all.to_a
199
- User.create!
200
- expect(User.connection.query_cache).to be_empty
201
- end
202
-
203
- it "should not clear thread's query cache if disabled" do
204
- User.connection.enable_query_cache!
205
- User.all.to_a
206
- User.connection.disable_query_cache!
207
- User.create!
208
- expect(User.connection.query_cache).not_to be_empty
209
- end
210
-
211
- it "should not clear thread's query cache if disabled but other thread's enabled" do
212
- User.connection.enable_query_cache!
213
- User.all.to_a
214
- User.connection.disable_query_cache!
215
- threaded(
216
- lambda{ |cc| User.create!; cc.call },
217
- lambda{ expect(User.connection.query_cache).not_to be_empty })
218
- end
219
-
220
- it "should not clear other thread's query cache" do
221
- User.connection.enable_query_cache!
222
- User.all.to_a
223
- User.connection.disable_query_cache!
224
- threaded(
225
- lambda{ |cc| User.create!; cc.call },
226
- lambda{ expect(User.connection.query_cache).not_to be_empty })
227
- end
228
- end
229
-
230
- describe "update" do
231
- before do
232
- User.create!
233
- end
234
-
235
- it "should clear thread's query cache if enabled" do
236
- User.connection.enable_query_cache!
237
- User.all.to_a
238
- User.update_all(updated_at: Time.now)
239
- expect(User.connection.query_cache).to be_empty
240
- end
241
-
242
- it "should not clear thread's query cache if disabled" do
243
- User.connection.enable_query_cache!
244
- User.all.to_a
245
- User.connection.disable_query_cache!
246
- User.update_all(updated_at: Time.now)
247
- expect(User.connection.query_cache).not_to be_empty
248
- end
249
-
250
- context "non-transactional" do
251
- unless ::ActiveRecord::Base.connection_pool.spec.config[:adapter_name] == 'PostgreSQL'
252
- self.use_transactional_fixtures = false
253
-
254
- after do
255
- User.delete_all
256
- end
257
- end
258
-
259
- it "should not clear thread's query cache if disabled but other thread's enabled" do
260
- User.connection.enable_query_cache!
261
- User.all.to_a
262
- User.connection.disable_query_cache!
263
- threaded(
264
- lambda{ |cc| User.update_all(updated_at: Time.now); cc.call },
265
- lambda{ expect(User.connection.query_cache).not_to be_empty })
266
- end
267
-
268
- it "should not clear other thread's query cache" do
269
- User.connection.enable_query_cache!
270
- User.all.to_a
271
- User.connection.disable_query_cache!
272
- threaded(
273
- lambda{ |cc| User.update_all(updated_at: Time.now); cc.call },
274
- lambda{ expect(User.connection.query_cache).not_to be_empty })
275
- end
276
- end
277
- end
278
-
279
- describe "delete" do
280
- before do
281
- User.create!
282
- end
283
-
284
- it "should clear thread's query cache if enabled" do
285
- User.connection.enable_query_cache!
286
- User.all.to_a
287
- User.delete_all
288
- expect(User.connection.query_cache).to be_empty
289
- end
290
-
291
- it "should not clear thread's query cache if disabled" do
292
- User.connection.enable_query_cache!
293
- User.all.to_a
294
- User.connection.disable_query_cache!
295
- User.delete_all
296
- expect(User.connection.query_cache).not_to be_empty
297
- end
298
-
299
- context "non-transactional" do
300
- unless ::ActiveRecord::Base.connection_pool.spec.config[:adapter_name] == 'PostgreSQL'
301
- self.use_transactional_fixtures = false
302
-
303
- after do
304
- User.delete_all
305
- end
306
- end
307
-
308
- it "should not clear thread's query cache if disabled but other thread's enabled" do
309
- User.connection.enable_query_cache!
310
- User.all.to_a
311
- User.connection.disable_query_cache!
312
- threaded(
313
- lambda{ |cc| User.delete_all; cc.call },
314
- lambda{ expect(User.connection.query_cache).not_to be_empty })
315
- end
316
-
317
- it "should not clear other thread's query cache" do
318
- User.connection.enable_query_cache!
319
- User.all.to_a
320
- User.connection.disable_query_cache!
321
- threaded(
322
- lambda{ |cc| User.delete_all; cc.call },
323
- lambda{ expect(User.connection.query_cache).not_to be_empty })
324
- end
325
-
326
- it "should clear cache for all connections" do
327
- u = User.create!(name: 'a')
328
- User.connection.cache do
329
- expect(u.reload.name).to eq 'a'
330
- ::Shackles.activate(:slave) do
331
- expect(u.reload.name).to eq 'a'
332
- end
333
- expect(u.reload.name).to eq 'a'
334
- u.name = 'b'
335
- u.save!
336
- expect(u.reload.name).to eq 'b'
337
- ::Shackles.activate(:slave) do
338
- expect(u.reload.name).to eq 'b'
339
- end
340
- end
341
- end
342
- end
343
- end
344
- end
345
- end
346
- end
@@ -1,166 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Switchman
4
- module ActiveRecord
5
- describe QueryMethods do
6
- include RSpecHelper
7
-
8
- before do
9
- @user1 = User.create!
10
- @appendage1 = @user1.appendages.create!
11
- @user2 = @shard1.activate { User.create! }
12
- @appendage2 = @user2.appendages.create!
13
- @user3 = @shard2.activate { User.create! }
14
- @appendage3 = @user3.appendages.create!
15
- end
16
-
17
- describe "#primary_shard" do
18
- it "should be the shard if it's a shard" do
19
- expect(User.shard(Shard.default).primary_shard).to eq Shard.default
20
- expect(User.shard(@shard1).primary_shard).to eq @shard1
21
- end
22
-
23
- it "should be the first shard of an array of shards" do
24
- expect(User.shard([Shard.default, @shard1]).primary_shard).to eq Shard.default
25
- expect(User.shard([@shard1, Shard.default]).primary_shard).to eq @shard1
26
- end
27
-
28
- it "should be the object's shard if it's a model" do
29
- expect(User.shard(@user1).primary_shard).to eq Shard.default
30
- expect(User.shard(@user2).primary_shard).to eq @shard1
31
- end
32
-
33
- it "should be the default shard if it's a scope of Shard" do
34
- expect(User.shard(Shard.all).primary_shard).to eq Shard.default
35
- @shard1.activate do
36
- expect(User.shard(Shard.all).primary_shard).to eq Shard.default
37
- end
38
- end
39
- end
40
-
41
- it "should default to the current shard" do
42
- relation = User.all
43
- expect(relation.shard_value).to eq Shard.default
44
- expect(relation.shard_source_value).to eq :implicit
45
-
46
- @shard1.activate do
47
- expect(relation.shard_value).to eq Shard.default
48
-
49
- relation = User.all
50
- expect(relation.shard_value).to eq @shard1
51
- expect(relation.shard_source_value).to eq :implicit
52
- end
53
- expect(relation.shard_value).to eq @shard1
54
- end
55
-
56
- describe "with primary key conditions" do
57
- it "should be changeable, and change conditions when it is changed" do
58
- relation = User.where(:id => @user1).shard(@shard1)
59
- expect(relation.shard_value).to eq @shard1
60
- expect(relation.shard_source_value).to eq :explicit
61
- expect(where_value(predicates(relation).first.right)).to eq @user1.global_id
62
- end
63
-
64
- it "should infer the shard from a single argument" do
65
- relation = User.where(:id => @user2)
66
- # execute on @shard1, with id local to that shard
67
- expect(relation.shard_value).to eq @shard1
68
- expect(where_value(predicates(relation).first.right)).to eq @user2.local_id
69
- end
70
-
71
- it "should infer the shard from multiple arguments" do
72
- relation = User.where(:id => [@user2, @user2])
73
- # execute on @shard1, with id local to that shard
74
- expect(relation.shard_value).to eq @shard1
75
- expect(where_value(predicates(relation).first.right)).to eq [@user2.local_id, @user2.local_id]
76
- end
77
-
78
- it "should infer the correct shard from an array of 1" do
79
- relation = User.where(:id => [@user2])
80
- # execute on @shard1, with id local to that shard
81
- expect(relation.shard_value).to eq @shard1
82
- expect(where_value(Array(predicates(relation).first.right))).to eq [@user2.local_id]
83
- end
84
-
85
- it "should do nothing when it's an array of 0" do
86
- relation = User.where(:id => [])
87
- # execute on @shard1, with id local to that shard
88
- expect(relation.shard_value).to eq Shard.default
89
- expect(where_value(predicates(relation).first.right)).to eq []
90
- end
91
-
92
- it "should order the shards preferring the shard it already had as primary" do
93
- relation = User.where(:id => [@user1, @user2])
94
- expect(relation.shard_value).to eq [Shard.default, @shard1]
95
- expect(where_value(predicates(relation).first.right)).to eq [@user1.local_id, @user2.global_id]
96
-
97
- @shard1.activate do
98
- relation = User.where(:id => [@user1, @user2])
99
- expect(relation.shard_value).to eq [@shard1, Shard.default]
100
- expect(where_value(predicates(relation).first.right)).to eq [@user1.global_id, @user2.local_id]
101
- end
102
- end
103
- end
104
-
105
- describe "with foreign key conditions" do
106
- it "should be changeable, and change conditions when it is changed" do
107
- relation = Appendage.where(:user_id => @user1)
108
- expect(relation.shard_value).to eq Shard.default
109
- expect(relation.shard_source_value).to eq :implicit
110
- expect(where_value(predicates(relation).first.right)).to eq @user1.local_id
111
-
112
- relation = relation.shard(@shard1)
113
- expect(relation.shard_value).to eq @shard1
114
- expect(relation.shard_source_value).to eq :explicit
115
- expect(where_value(predicates(relation).first.right)).to eq @user1.global_id
116
- end
117
-
118
- it "should translate ids based on current shard" do
119
- relation = Appendage.where(:user_id => [@user1, @user2])
120
- expect(where_value(predicates(relation).first.right)).to eq [@user1.local_id, @user2.global_id]
121
-
122
- @shard1.activate do
123
- relation = Appendage.where(:user_id => [@user1, @user2])
124
- expect(where_value(predicates(relation).first.right)).to eq [@user1.global_id, @user2.local_id]
125
- end
126
- end
127
-
128
- it "should translate ids in joins" do
129
- relation = User.joins(:appendage).where(appendages: { user_id: [@user1, @user2]})
130
- expect(where_value(predicates(relation).first.right)).to eq [@user1.local_id, @user2.global_id]
131
- end
132
-
133
- it "should translate ids according to the current shard of the foreign type" do
134
- @shard1.activate(:mirror_universe) do
135
- mirror_user = MirrorUser.create!
136
- relation = User.where(mirror_user_id: mirror_user)
137
- expect(where_value(predicates(relation).first.right)).to eq mirror_user.global_id
138
- end
139
- end
140
- end
141
-
142
- describe "with table aliases" do
143
- it "should properly construct the query (at least in Rails 4)" do
144
- child = @user1.children.create!
145
- grandchild = child.children.create!
146
- expect(child.reload.parent).to eq @user1
147
-
148
- relation = @user1.association(:grandchildren).scope
149
-
150
- attribute = predicates(relation).first.left
151
- expect(attribute.name.to_s).to eq 'parent_id'
152
- unless ::Rails.version >= '5'
153
- # apparently rails 5 doesn't use table aliases here anymore
154
- expect(attribute.relation.class).to eq ::Arel::Nodes::TableAlias
155
-
156
- rel, column = relation.send(:relation_and_column, attribute)
157
- expect(relation.send(:sharded_primary_key?, rel, column)).to eq false
158
- expect(relation.send(:sharded_foreign_key?, rel, column)).to eq true
159
- end
160
-
161
- expect(@user1.grandchildren).to eq [grandchild]
162
- end
163
- end
164
- end
165
- end
166
- end
@@ -1,56 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Switchman
4
- module ActiveRecord
5
- describe Relation do
6
- include RSpecHelper
7
-
8
- before do
9
- @user1 = User.create!(:name => 'user1')
10
- @user2 = @shard1.activate { User.create!(:name => 'user2') }
11
- end
12
-
13
- describe "#exec_queries" do
14
- it "should activate the correct shard for the query" do
15
- expect(User.shard(@shard1).where(:id => @user2.local_id).first).to eq @user2
16
- end
17
-
18
- it "should activate multiple shards if necessary" do
19
- expect(User.where(:id => [@user1.id, @user2.id]).sort_by(&:id)).to eq [@user1, @user2].sort_by(&:id)
20
- end
21
- end
22
-
23
- describe "#update_all" do
24
- it "should activate the correct shard for the query" do
25
- User.shard(@shard1).where(:id => @user2.local_id).update_all(:name => 'a')
26
- expect(@user1.reload.name).to eq 'user1'
27
- expect(@user2.reload.name).to eq 'a'
28
- end
29
-
30
- it "should activate multiple shards if necessary" do
31
- expect(User.where(:id => [@user1.id, @user2.id]).update_all(:name => 'a')).to eq 2
32
- expect(@user1.reload.name).to eq 'a'
33
- expect(@user2.reload.name).to eq 'a'
34
- end
35
- end
36
-
37
- describe "#new" do
38
- it "should infer the scope's shard" do
39
- scope = @shard1.activate { User.where(id: 1) }
40
- u = scope.new
41
- expect(u.shard).to eq @shard1
42
- expect(u.local_id).to eq 1
43
- end
44
- end
45
-
46
- describe "#clone" do
47
- it "sets the shard_value that was previously nil" do
48
- scope = User.all
49
- scope.shard_value = nil
50
- scope = scope.clone
51
- expect(scope.shard_value).to eq Shard.current
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,44 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Switchman
4
- module ActiveRecord
5
- describe SpawnMethods do
6
- include RSpecHelper
7
-
8
- describe "#merge" do
9
- it "should merge shard_value for multiple explicits" do
10
- result = User.shard([@shard1, @shard2]).merge(User.shard([Shard.default, @shard1]))
11
- expect(result.shard_value).to eq @shard1
12
- expect(result.shard_source_value).to eq :explicit
13
- end
14
-
15
- it "should merge shard_value relations for multiple explicits" do
16
- result = User.shard(Shard.where("id IN (?)", [@shard1, @shard2])).merge(User.shard(Shard.where(id: [Shard.default, @shard1])))
17
- expect(::ActiveRecord::Relation === result.shard_value).to eq true
18
- expect(result.shard_value.to_a).to eq [@shard1]
19
- expect(result.shard_source_value).to eq :explicit
20
- end
21
-
22
- it "should ignore implicit shard value lhs" do
23
- scope = User.all
24
- result = scope.merge(User.shard(@shard1))
25
- expect(result.shard_value).to eq @shard1
26
- expect(result.shard_source_value).to eq :explicit
27
- end
28
-
29
- it "should ignore implicit shard value rhs" do
30
- result = User.shard(@shard1).merge(User.all)
31
- expect(result.shard_value).to eq @shard1
32
- expect(result.shard_source_value).to eq :explicit
33
- end
34
-
35
- it "should take lhs shard_value for double implicit" do
36
- scope1 = @shard2.activate { User.all }
37
- result = scope1.merge(User.all)
38
- expect(result.shard_value).to eq @shard2
39
- expect(result.shard_source_value).to eq :implicit
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,45 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Switchman
4
- describe ConnectionPoolProxy do
5
- include RSpecHelper
6
-
7
- it "should not share connections for sqlite shards on the same db" do
8
- @db = DatabaseServer.create(adapter: 'sqlite3', database: ':memory:')
9
- @sqlite_shard1 = @db.shards.create!
10
- @sqlite_shard2 = @db.shards.create!
11
- expect(::ActiveRecord::Base.connection).not_to eq @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
12
- expect(@sqlite_shard1.activate { ::ActiveRecord::Base.connection }).not_to eq @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
13
- end
14
-
15
- it "should forward clear_idle_connections! to each of its pools" do
16
- proxy = User.connection_pool
17
- @shard1.activate{ proxy.current_pool.expects(:clear_idle_connections!).once }
18
- @shard2.activate{ proxy.current_pool.expects(:clear_idle_connections!).once }
19
- proxy.clear_idle_connections!(Time.now)
20
- end
21
-
22
- it "should handle an array of slaves when creating a pool" do
23
- spec = Object.new
24
- spec.instance_variable_set(:@config, adapter: Shard.connection_pool.spec.config[:adapter], database: 'master', slave: [ { database: 'slave1' }, { database: 'slave2' }])
25
- default_pool = stub(spec: spec)
26
- cache = {}
27
- proxy = ConnectionPoolProxy.new(:unsharded, default_pool, cache)
28
- proxy.stubs(:active_shackles_environment).returns(:slave)
29
- new_pool = proxy.send(:create_pool)
30
- expect(new_pool.spec.config[:database]).to eq 'slave1'
31
- end
32
-
33
- it "should share schema caches between connections" do
34
- conn1 = User.connection
35
- conn2 = @shard2.activate { User.connection }
36
- expect(conn1).to_not be conn2
37
- expect(conn1.schema_cache).to be_a(Switchman::SchemaCache)
38
- expect(conn1.schema_cache).to be conn2.schema_cache
39
- expect(conn1.schema_cache.connection).to be conn1
40
- @shard2.activate do
41
- expect(conn1.schema_cache.connection).to be conn2
42
- end
43
- end
44
- end
45
- end