@cloudant/couchbackup 2.9.10-SNAPSHOT.113 → 2.9.11-SNAPSHOT.115

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 (433) hide show
  1. package/.scannerwork/report-task.txt +2 -2
  2. package/.scannerwork/scanner-report/analysis-warnings.pb +2 -2
  3. package/.scannerwork/scanner-report/analysis.log +1 -1
  4. package/.scannerwork/scanner-report/changesets-12.pb +1 -0
  5. package/.scannerwork/scanner-report/changesets-13.pb +1 -0
  6. package/.scannerwork/scanner-report/changesets-2.pb +1 -0
  7. package/.scannerwork/scanner-report/changesets-28.pb +1 -0
  8. package/.scannerwork/scanner-report/changesets-29.pb +1 -0
  9. package/.scannerwork/scanner-report/changesets-3.pb +1 -0
  10. package/.scannerwork/scanner-report/changesets-31.pb +1 -0
  11. package/.scannerwork/scanner-report/changesets-34.pb +1 -0
  12. package/.scannerwork/scanner-report/changesets-35.pb +1 -0
  13. package/.scannerwork/scanner-report/changesets-36.pb +1 -0
  14. package/.scannerwork/scanner-report/changesets-39.pb +1 -0
  15. package/.scannerwork/scanner-report/changesets-4.pb +1 -0
  16. package/.scannerwork/scanner-report/changesets-42.pb +1 -0
  17. package/.scannerwork/scanner-report/changesets-65.pb +1 -0
  18. package/.scannerwork/scanner-report/changesets-7.pb +1 -0
  19. package/.scannerwork/scanner-report/changesets-8.pb +1 -0
  20. package/.scannerwork/scanner-report/component-1.pb +2 -2
  21. package/.scannerwork/scanner-report/component-10.pb +1 -1
  22. package/.scannerwork/scanner-report/component-11.pb +1 -1
  23. package/.scannerwork/scanner-report/component-12.pb +1 -0
  24. package/.scannerwork/scanner-report/component-13.pb +1 -1
  25. package/.scannerwork/scanner-report/component-14.pb +1 -1
  26. package/.scannerwork/scanner-report/component-2.pb +1 -0
  27. package/.scannerwork/scanner-report/component-26.pb +1 -1
  28. package/.scannerwork/scanner-report/component-27.pb +1 -1
  29. package/.scannerwork/scanner-report/component-28.pb +1 -0
  30. package/.scannerwork/scanner-report/component-29.pb +1 -0
  31. package/.scannerwork/scanner-report/component-3.pb +1 -0
  32. package/.scannerwork/scanner-report/component-30.pb +1 -1
  33. package/.scannerwork/scanner-report/component-31.pb +1 -0
  34. package/.scannerwork/scanner-report/component-32.pb +1 -1
  35. package/.scannerwork/scanner-report/component-33.pb +1 -1
  36. package/.scannerwork/scanner-report/component-34.pb +1 -0
  37. package/.scannerwork/scanner-report/component-35.pb +1 -0
  38. package/.scannerwork/scanner-report/component-36.pb +1 -0
  39. package/.scannerwork/scanner-report/component-37.pb +1 -0
  40. package/.scannerwork/scanner-report/component-38.pb +1 -0
  41. package/.scannerwork/scanner-report/component-39.pb +1 -0
  42. package/.scannerwork/scanner-report/component-4.pb +1 -0
  43. package/.scannerwork/scanner-report/component-42.pb +1 -0
  44. package/.scannerwork/scanner-report/component-45.pb +1 -1
  45. package/.scannerwork/scanner-report/component-49.pb +1 -1
  46. package/.scannerwork/scanner-report/component-5.pb +1 -1
  47. package/.scannerwork/scanner-report/component-52.pb +1 -1
  48. package/.scannerwork/scanner-report/component-53.pb +1 -1
  49. package/.scannerwork/scanner-report/component-54.pb +1 -1
  50. package/.scannerwork/scanner-report/component-55.pb +1 -1
  51. package/.scannerwork/scanner-report/component-56.pb +1 -1
  52. package/.scannerwork/scanner-report/component-57.pb +1 -1
  53. package/.scannerwork/scanner-report/component-58.pb +1 -1
  54. package/.scannerwork/scanner-report/component-59.pb +1 -1
  55. package/.scannerwork/scanner-report/component-6.pb +1 -1
  56. package/.scannerwork/scanner-report/component-60.pb +1 -1
  57. package/.scannerwork/scanner-report/component-61.pb +1 -1
  58. package/.scannerwork/scanner-report/component-62.pb +1 -1
  59. package/.scannerwork/scanner-report/component-63.pb +1 -1
  60. package/.scannerwork/scanner-report/component-64.pb +1 -1
  61. package/.scannerwork/scanner-report/component-65.pb +1 -0
  62. package/.scannerwork/scanner-report/component-67.pb +1 -1
  63. package/.scannerwork/scanner-report/component-7.pb +1 -0
  64. package/.scannerwork/scanner-report/component-8.pb +1 -0
  65. package/.scannerwork/scanner-report/component-9.pb +1 -1
  66. package/.scannerwork/scanner-report/coverages-10.pb +0 -0
  67. package/.scannerwork/scanner-report/coverages-11.pb +0 -0
  68. package/.scannerwork/scanner-report/coverages-12.pb +0 -0
  69. package/.scannerwork/scanner-report/coverages-13.pb +0 -0
  70. package/.scannerwork/scanner-report/coverages-14.pb +0 -0
  71. package/.scannerwork/scanner-report/coverages-2.pb +0 -0
  72. package/.scannerwork/scanner-report/coverages-26.pb +0 -0
  73. package/.scannerwork/scanner-report/coverages-27.pb +0 -0
  74. package/.scannerwork/scanner-report/coverages-28.pb +0 -0
  75. package/.scannerwork/scanner-report/coverages-3.pb +0 -0
  76. package/.scannerwork/scanner-report/coverages-30.pb +0 -0
  77. package/.scannerwork/scanner-report/coverages-31.pb +0 -0
  78. package/.scannerwork/scanner-report/coverages-32.pb +0 -0
  79. package/.scannerwork/scanner-report/coverages-33.pb +0 -0
  80. package/.scannerwork/scanner-report/coverages-34.pb +0 -0
  81. package/.scannerwork/scanner-report/coverages-35.pb +0 -0
  82. package/.scannerwork/scanner-report/coverages-36.pb +0 -0
  83. package/.scannerwork/scanner-report/coverages-39.pb +0 -0
  84. package/.scannerwork/scanner-report/coverages-4.pb +0 -0
  85. package/.scannerwork/scanner-report/coverages-42.pb +0 -0
  86. package/.scannerwork/scanner-report/coverages-45.pb +0 -0
  87. package/.scannerwork/scanner-report/coverages-49.pb +0 -0
  88. package/.scannerwork/scanner-report/coverages-5.pb +0 -0
  89. package/.scannerwork/scanner-report/coverages-52.pb +0 -0
  90. package/.scannerwork/scanner-report/coverages-53.pb +0 -0
  91. package/.scannerwork/scanner-report/coverages-54.pb +0 -0
  92. package/.scannerwork/scanner-report/coverages-55.pb +0 -0
  93. package/.scannerwork/scanner-report/coverages-56.pb +0 -0
  94. package/.scannerwork/scanner-report/coverages-57.pb +0 -0
  95. package/.scannerwork/scanner-report/coverages-58.pb +0 -0
  96. package/.scannerwork/scanner-report/coverages-59.pb +0 -0
  97. package/.scannerwork/scanner-report/coverages-6.pb +0 -0
  98. package/.scannerwork/scanner-report/coverages-60.pb +0 -0
  99. package/.scannerwork/scanner-report/coverages-61.pb +0 -0
  100. package/.scannerwork/scanner-report/coverages-62.pb +0 -0
  101. package/.scannerwork/scanner-report/coverages-63.pb +0 -0
  102. package/.scannerwork/scanner-report/coverages-64.pb +0 -0
  103. package/.scannerwork/scanner-report/coverages-7.pb +0 -0
  104. package/.scannerwork/scanner-report/coverages-8.pb +0 -0
  105. package/.scannerwork/scanner-report/coverages-9.pb +0 -0
  106. package/.scannerwork/scanner-report/duplications-14.pb +3 -0
  107. package/.scannerwork/scanner-report/duplications-26.pb +2 -1
  108. package/.scannerwork/scanner-report/duplications-27.pb +2 -0
  109. package/.scannerwork/scanner-report/duplications-28.pb +2 -0
  110. package/.scannerwork/scanner-report/duplications-32.pb +0 -2
  111. package/.scannerwork/scanner-report/duplications-33.pb +0 -2
  112. package/.scannerwork/scanner-report/duplications-4.pb +3 -0
  113. package/.scannerwork/scanner-report/duplications-42.pb +2 -0
  114. package/.scannerwork/scanner-report/duplications-45.pb +2 -0
  115. package/.scannerwork/scanner-report/duplications-49.pb +0 -3
  116. package/.scannerwork/scanner-report/duplications-5.pb +0 -2
  117. package/.scannerwork/scanner-report/duplications-55.pb +2 -0
  118. package/.scannerwork/scanner-report/duplications-56.pb +0 -3
  119. package/.scannerwork/scanner-report/duplications-59.pb +0 -2
  120. package/.scannerwork/scanner-report/duplications-6.pb +0 -2
  121. package/.scannerwork/scanner-report/duplications-60.pb +2 -0
  122. package/.scannerwork/scanner-report/duplications-61.pb +0 -3
  123. package/.scannerwork/scanner-report/duplications-9.pb +2 -0
  124. package/.scannerwork/scanner-report/measures-10.pb +0 -0
  125. package/.scannerwork/scanner-report/measures-11.pb +0 -0
  126. package/.scannerwork/scanner-report/measures-12.pb +0 -0
  127. package/.scannerwork/scanner-report/measures-13.pb +0 -0
  128. package/.scannerwork/scanner-report/measures-14.pb +0 -0
  129. package/.scannerwork/scanner-report/measures-2.pb +0 -0
  130. package/.scannerwork/scanner-report/measures-26.pb +0 -0
  131. package/.scannerwork/scanner-report/measures-27.pb +0 -0
  132. package/.scannerwork/scanner-report/measures-28.pb +15 -0
  133. package/.scannerwork/scanner-report/measures-3.pb +0 -0
  134. package/.scannerwork/scanner-report/measures-30.pb +0 -0
  135. package/.scannerwork/scanner-report/measures-31.pb +0 -0
  136. package/.scannerwork/scanner-report/measures-32.pb +0 -0
  137. package/.scannerwork/scanner-report/measures-33.pb +0 -0
  138. package/.scannerwork/scanner-report/measures-34.pb +0 -0
  139. package/.scannerwork/scanner-report/measures-35.pb +0 -0
  140. package/.scannerwork/scanner-report/measures-36.pb +0 -0
  141. package/.scannerwork/scanner-report/measures-37.pb +0 -0
  142. package/.scannerwork/scanner-report/measures-38.pb +0 -0
  143. package/.scannerwork/scanner-report/measures-39.pb +0 -0
  144. package/.scannerwork/scanner-report/measures-4.pb +0 -0
  145. package/.scannerwork/scanner-report/measures-42.pb +0 -0
  146. package/.scannerwork/scanner-report/measures-45.pb +0 -0
  147. package/.scannerwork/scanner-report/measures-49.pb +0 -0
  148. package/.scannerwork/scanner-report/measures-5.pb +0 -0
  149. package/.scannerwork/scanner-report/measures-52.pb +0 -0
  150. package/.scannerwork/scanner-report/measures-53.pb +0 -0
  151. package/.scannerwork/scanner-report/measures-54.pb +0 -0
  152. package/.scannerwork/scanner-report/measures-55.pb +0 -0
  153. package/.scannerwork/scanner-report/measures-56.pb +0 -0
  154. package/.scannerwork/scanner-report/measures-57.pb +0 -0
  155. package/.scannerwork/scanner-report/measures-58.pb +0 -0
  156. package/.scannerwork/scanner-report/measures-59.pb +0 -0
  157. package/.scannerwork/scanner-report/measures-6.pb +0 -0
  158. package/.scannerwork/scanner-report/measures-60.pb +0 -0
  159. package/.scannerwork/scanner-report/measures-61.pb +0 -0
  160. package/.scannerwork/scanner-report/measures-62.pb +0 -0
  161. package/.scannerwork/scanner-report/measures-63.pb +0 -0
  162. package/.scannerwork/scanner-report/measures-64.pb +0 -0
  163. package/.scannerwork/scanner-report/measures-67.pb +0 -0
  164. package/.scannerwork/scanner-report/measures-7.pb +0 -0
  165. package/.scannerwork/scanner-report/measures-8.pb +0 -0
  166. package/.scannerwork/scanner-report/measures-9.pb +0 -0
  167. package/.scannerwork/scanner-report/metadata.pb +0 -0
  168. package/.scannerwork/scanner-report/source-10.txt +21 -62
  169. package/.scannerwork/scanner-report/source-11.txt +121 -93
  170. package/.scannerwork/scanner-report/source-12.txt +92 -0
  171. package/.scannerwork/scanner-report/source-13.txt +63 -509
  172. package/.scannerwork/scanner-report/source-14.txt +228 -64
  173. package/.scannerwork/scanner-report/source-2.txt +68 -0
  174. package/.scannerwork/scanner-report/source-26.txt +110 -71
  175. package/.scannerwork/scanner-report/source-27.txt +199 -78
  176. package/.scannerwork/scanner-report/source-28.txt +293 -0
  177. package/.scannerwork/scanner-report/source-3.txt +47 -0
  178. package/.scannerwork/scanner-report/source-30.txt +557 -350
  179. package/.scannerwork/scanner-report/source-31.txt +35 -0
  180. package/.scannerwork/scanner-report/source-32.txt +11 -268
  181. package/.scannerwork/scanner-report/source-33.txt +47 -124
  182. package/.scannerwork/scanner-report/source-34.txt +147 -0
  183. package/.scannerwork/scanner-report/source-35.txt +77 -0
  184. package/.scannerwork/scanner-report/source-36.txt +56 -0
  185. package/.scannerwork/scanner-report/source-37.txt +509 -0
  186. package/.scannerwork/scanner-report/source-38.txt +509 -0
  187. package/.scannerwork/scanner-report/source-39.txt +418 -0
  188. package/.scannerwork/scanner-report/source-4.txt +119 -0
  189. package/.scannerwork/scanner-report/source-42.txt +175 -0
  190. package/.scannerwork/scanner-report/source-45.txt +144 -579
  191. package/.scannerwork/scanner-report/source-49.txt +89 -219
  192. package/.scannerwork/scanner-report/source-5.txt +80 -170
  193. package/.scannerwork/scanner-report/source-52.txt +14 -51
  194. package/.scannerwork/scanner-report/source-53.txt +88 -69
  195. package/.scannerwork/scanner-report/source-54.txt +31 -32
  196. package/.scannerwork/scanner-report/source-55.txt +77 -132
  197. package/.scannerwork/scanner-report/source-56.txt +57 -96
  198. package/.scannerwork/scanner-report/source-57.txt +100 -50
  199. package/.scannerwork/scanner-report/source-58.txt +160 -45
  200. package/.scannerwork/scanner-report/source-59.txt +106 -202
  201. package/.scannerwork/scanner-report/source-6.txt +130 -149
  202. package/.scannerwork/scanner-report/source-60.txt +59 -19
  203. package/.scannerwork/scanner-report/source-61.txt +257 -107
  204. package/.scannerwork/scanner-report/source-62.txt +25 -13
  205. package/.scannerwork/scanner-report/source-63.txt +149 -19
  206. package/.scannerwork/scanner-report/source-64.txt +82 -78
  207. package/.scannerwork/scanner-report/source-67.txt +51 -393
  208. package/.scannerwork/scanner-report/source-7.txt +34 -0
  209. package/.scannerwork/scanner-report/{source-47.txt → source-8.txt} +7 -14
  210. package/.scannerwork/scanner-report/source-9.txt +130 -41
  211. package/.scannerwork/scanner-report/symbols-10.pb +11 -30
  212. package/.scannerwork/scanner-report/symbols-11.pb +116 -28
  213. package/.scannerwork/scanner-report/symbols-12.pb +60 -0
  214. package/.scannerwork/scanner-report/symbols-13.pb +43 -0
  215. package/.scannerwork/scanner-report/symbols-14.pb +393 -45
  216. package/.scannerwork/scanner-report/symbols-2.pb +36 -0
  217. package/.scannerwork/scanner-report/symbols-26.pb +97 -44
  218. package/.scannerwork/scanner-report/symbols-27.pb +417 -41
  219. package/.scannerwork/scanner-report/symbols-28.pb +486 -0
  220. package/.scannerwork/scanner-report/symbols-3.pb +27 -0
  221. package/.scannerwork/scanner-report/symbols-30.pb +1181 -537
  222. package/.scannerwork/scanner-report/symbols-31.pb +17 -0
  223. package/.scannerwork/scanner-report/symbols-32.pb +14 -486
  224. package/.scannerwork/scanner-report/symbols-33.pb +44 -101
  225. package/.scannerwork/scanner-report/symbols-34.pb +85 -0
  226. package/.scannerwork/scanner-report/symbols-35.pb +30 -0
  227. package/.scannerwork/scanner-report/symbols-36.pb +19 -0
  228. package/.scannerwork/scanner-report/symbols-39.pb +610 -0
  229. package/.scannerwork/scanner-report/symbols-4.pb +77 -0
  230. package/.scannerwork/scanner-report/symbols-42.pb +153 -0
  231. package/.scannerwork/scanner-report/symbols-45.pb +179 -1253
  232. package/.scannerwork/scanner-report/symbols-49.pb +27 -393
  233. package/.scannerwork/scanner-report/symbols-5.pb +69 -180
  234. package/.scannerwork/scanner-report/symbols-52.pb +13 -35
  235. package/.scannerwork/scanner-report/symbols-53.pb +59 -60
  236. package/.scannerwork/scanner-report/symbols-54.pb +19 -26
  237. package/.scannerwork/scanner-report/symbols-55.pb +43 -84
  238. package/.scannerwork/scanner-report/symbols-56.pb +41 -72
  239. package/.scannerwork/scanner-report/symbols-57.pb +30 -45
  240. package/.scannerwork/scanner-report/symbols-58.pb +143 -42
  241. package/.scannerwork/scanner-report/symbols-59.pb +32 -417
  242. package/.scannerwork/scanner-report/symbols-6.pb +107 -148
  243. package/.scannerwork/scanner-report/symbols-60.pb +41 -16
  244. package/.scannerwork/scanner-report/symbols-61.pb +353 -96
  245. package/.scannerwork/scanner-report/symbols-62.pb +18 -9
  246. package/.scannerwork/scanner-report/symbols-63.pb +126 -10
  247. package/.scannerwork/scanner-report/symbols-64.pb +41 -68
  248. package/.scannerwork/scanner-report/symbols-7.pb +10 -0
  249. package/.scannerwork/scanner-report/symbols-8.pb +9 -0
  250. package/.scannerwork/scanner-report/symbols-9.pb +102 -19
  251. package/.scannerwork/scanner-report/syntax-highlightings-10.pb +39 -83
  252. package/.scannerwork/scanner-report/syntax-highlightings-11.pb +99 -103
  253. package/.scannerwork/scanner-report/syntax-highlightings-12.pb +110 -0
  254. package/.scannerwork/scanner-report/syntax-highlightings-13.pb +71 -3736
  255. package/.scannerwork/scanner-report/syntax-highlightings-14.pb +296 -62
  256. package/.scannerwork/scanner-report/syntax-highlightings-2.pb +95 -0
  257. package/.scannerwork/scanner-report/syntax-highlightings-26.pb +149 -57
  258. package/.scannerwork/scanner-report/syntax-highlightings-27.pb +299 -84
  259. package/.scannerwork/scanner-report/syntax-highlightings-28.pb +659 -0
  260. package/.scannerwork/scanner-report/syntax-highlightings-3.pb +68 -0
  261. package/.scannerwork/scanner-report/syntax-highlightings-30.pb +637 -398
  262. package/.scannerwork/scanner-report/syntax-highlightings-31.pb +63 -0
  263. package/.scannerwork/scanner-report/syntax-highlightings-32.pb +21 -626
  264. package/.scannerwork/scanner-report/syntax-highlightings-33.pb +70 -187
  265. package/.scannerwork/scanner-report/syntax-highlightings-34.pb +191 -0
  266. package/.scannerwork/scanner-report/syntax-highlightings-35.pb +103 -0
  267. package/.scannerwork/scanner-report/syntax-highlightings-36.pb +82 -0
  268. package/.scannerwork/scanner-report/syntax-highlightings-37.pb +3748 -0
  269. package/.scannerwork/scanner-report/syntax-highlightings-38.pb +3746 -0
  270. package/.scannerwork/scanner-report/syntax-highlightings-39.pb +648 -0
  271. package/.scannerwork/scanner-report/syntax-highlightings-4.pb +158 -0
  272. package/.scannerwork/scanner-report/syntax-highlightings-42.pb +214 -0
  273. package/.scannerwork/scanner-report/syntax-highlightings-45.pb +152 -814
  274. package/.scannerwork/scanner-report/syntax-highlightings-49.pb +101 -292
  275. package/.scannerwork/scanner-report/syntax-highlightings-5.pb +67 -187
  276. package/.scannerwork/scanner-report/syntax-highlightings-52.pb +15 -65
  277. package/.scannerwork/scanner-report/syntax-highlightings-53.pb +92 -69
  278. package/.scannerwork/scanner-report/syntax-highlightings-54.pb +32 -36
  279. package/.scannerwork/scanner-report/syntax-highlightings-55.pb +56 -157
  280. package/.scannerwork/scanner-report/syntax-highlightings-56.pb +58 -121
  281. package/.scannerwork/scanner-report/syntax-highlightings-57.pb +83 -80
  282. package/.scannerwork/scanner-report/syntax-highlightings-58.pb +207 -46
  283. package/.scannerwork/scanner-report/syntax-highlightings-59.pb +92 -294
  284. package/.scannerwork/scanner-report/syntax-highlightings-6.pb +175 -166
  285. package/.scannerwork/scanner-report/syntax-highlightings-60.pb +45 -30
  286. package/.scannerwork/scanner-report/syntax-highlightings-61.pb +250 -147
  287. package/.scannerwork/scanner-report/syntax-highlightings-62.pb +20 -18
  288. package/.scannerwork/scanner-report/syntax-highlightings-63.pb +179 -16
  289. package/.scannerwork/scanner-report/syntax-highlightings-64.pb +84 -73
  290. package/.scannerwork/scanner-report/syntax-highlightings-67.pb +728 -3527
  291. package/.scannerwork/scanner-report/syntax-highlightings-7.pb +50 -0
  292. package/.scannerwork/scanner-report/syntax-highlightings-8.pb +48 -0
  293. package/.scannerwork/scanner-report/syntax-highlightings-9.pb +200 -55
  294. package/CHANGES.md +6 -2
  295. package/package.json +1 -1
  296. package/test-16-results.xml +146 -146
  297. package/test-18-results.xml +149 -149
  298. package/test-iam-18-results.xml +50 -50
  299. package/.scannerwork/scanner-report/changesets-15.pb +0 -1
  300. package/.scannerwork/scanner-report/changesets-16.pb +0 -1
  301. package/.scannerwork/scanner-report/changesets-17.pb +0 -1
  302. package/.scannerwork/scanner-report/changesets-18.pb +0 -1
  303. package/.scannerwork/scanner-report/changesets-19.pb +0 -1
  304. package/.scannerwork/scanner-report/changesets-20.pb +0 -1
  305. package/.scannerwork/scanner-report/changesets-21.pb +0 -1
  306. package/.scannerwork/scanner-report/changesets-22.pb +0 -1
  307. package/.scannerwork/scanner-report/changesets-23.pb +0 -1
  308. package/.scannerwork/scanner-report/changesets-24.pb +0 -1
  309. package/.scannerwork/scanner-report/changesets-25.pb +0 -1
  310. package/.scannerwork/scanner-report/changesets-46.pb +0 -1
  311. package/.scannerwork/scanner-report/changesets-47.pb +0 -1
  312. package/.scannerwork/scanner-report/changesets-48.pb +0 -1
  313. package/.scannerwork/scanner-report/changesets-50.pb +0 -1
  314. package/.scannerwork/scanner-report/changesets-51.pb +0 -1
  315. package/.scannerwork/scanner-report/component-15.pb +0 -1
  316. package/.scannerwork/scanner-report/component-16.pb +0 -1
  317. package/.scannerwork/scanner-report/component-17.pb +0 -1
  318. package/.scannerwork/scanner-report/component-18.pb +0 -1
  319. package/.scannerwork/scanner-report/component-19.pb +0 -1
  320. package/.scannerwork/scanner-report/component-20.pb +0 -1
  321. package/.scannerwork/scanner-report/component-21.pb +0 -1
  322. package/.scannerwork/scanner-report/component-22.pb +0 -1
  323. package/.scannerwork/scanner-report/component-23.pb +0 -1
  324. package/.scannerwork/scanner-report/component-24.pb +0 -1
  325. package/.scannerwork/scanner-report/component-25.pb +0 -1
  326. package/.scannerwork/scanner-report/component-46.pb +0 -1
  327. package/.scannerwork/scanner-report/component-47.pb +0 -1
  328. package/.scannerwork/scanner-report/component-48.pb +0 -1
  329. package/.scannerwork/scanner-report/component-50.pb +0 -1
  330. package/.scannerwork/scanner-report/component-51.pb +0 -1
  331. package/.scannerwork/scanner-report/component-68.pb +0 -1
  332. package/.scannerwork/scanner-report/coverages-15.pb +0 -0
  333. package/.scannerwork/scanner-report/coverages-16.pb +0 -0
  334. package/.scannerwork/scanner-report/coverages-17.pb +0 -0
  335. package/.scannerwork/scanner-report/coverages-18.pb +0 -0
  336. package/.scannerwork/scanner-report/coverages-19.pb +0 -0
  337. package/.scannerwork/scanner-report/coverages-20.pb +0 -0
  338. package/.scannerwork/scanner-report/coverages-21.pb +0 -0
  339. package/.scannerwork/scanner-report/coverages-22.pb +0 -0
  340. package/.scannerwork/scanner-report/coverages-23.pb +0 -0
  341. package/.scannerwork/scanner-report/coverages-24.pb +0 -0
  342. package/.scannerwork/scanner-report/coverages-46.pb +0 -0
  343. package/.scannerwork/scanner-report/coverages-47.pb +0 -0
  344. package/.scannerwork/scanner-report/coverages-48.pb +0 -0
  345. package/.scannerwork/scanner-report/coverages-51.pb +0 -0
  346. package/.scannerwork/scanner-report/duplications-24.pb +0 -2
  347. package/.scannerwork/scanner-report/duplications-50.pb +0 -0
  348. package/.scannerwork/scanner-report/duplications-51.pb +0 -0
  349. package/.scannerwork/scanner-report/measures-15.pb +0 -0
  350. package/.scannerwork/scanner-report/measures-16.pb +0 -0
  351. package/.scannerwork/scanner-report/measures-17.pb +0 -0
  352. package/.scannerwork/scanner-report/measures-18.pb +0 -0
  353. package/.scannerwork/scanner-report/measures-19.pb +0 -0
  354. package/.scannerwork/scanner-report/measures-20.pb +0 -0
  355. package/.scannerwork/scanner-report/measures-21.pb +0 -16
  356. package/.scannerwork/scanner-report/measures-22.pb +0 -0
  357. package/.scannerwork/scanner-report/measures-23.pb +0 -0
  358. package/.scannerwork/scanner-report/measures-24.pb +0 -0
  359. package/.scannerwork/scanner-report/measures-46.pb +0 -0
  360. package/.scannerwork/scanner-report/measures-47.pb +0 -0
  361. package/.scannerwork/scanner-report/measures-48.pb +0 -0
  362. package/.scannerwork/scanner-report/measures-51.pb +0 -0
  363. package/.scannerwork/scanner-report/measures-68.pb +0 -0
  364. package/.scannerwork/scanner-report/source-15.txt +0 -41
  365. package/.scannerwork/scanner-report/source-16.txt +0 -118
  366. package/.scannerwork/scanner-report/source-17.txt +0 -46
  367. package/.scannerwork/scanner-report/source-18.txt +0 -31
  368. package/.scannerwork/scanner-report/source-19.txt +0 -281
  369. package/.scannerwork/scanner-report/source-20.txt +0 -111
  370. package/.scannerwork/scanner-report/source-21.txt +0 -178
  371. package/.scannerwork/scanner-report/source-22.txt +0 -129
  372. package/.scannerwork/scanner-report/source-23.txt +0 -164
  373. package/.scannerwork/scanner-report/source-24.txt +0 -75
  374. package/.scannerwork/scanner-report/source-46.txt +0 -142
  375. package/.scannerwork/scanner-report/source-48.txt +0 -156
  376. package/.scannerwork/scanner-report/source-51.txt +0 -36
  377. package/.scannerwork/scanner-report/source-68.txt +0 -167
  378. package/.scannerwork/scanner-report/symbols-15.pb +0 -18
  379. package/.scannerwork/scanner-report/symbols-16.pb +0 -30
  380. package/.scannerwork/scanner-report/symbols-17.pb +0 -20
  381. package/.scannerwork/scanner-report/symbols-18.pb +0 -14
  382. package/.scannerwork/scanner-report/symbols-19.pb +0 -354
  383. package/.scannerwork/scanner-report/symbols-20.pb +0 -59
  384. package/.scannerwork/scanner-report/symbols-21.pb +0 -144
  385. package/.scannerwork/scanner-report/symbols-22.pb +0 -33
  386. package/.scannerwork/scanner-report/symbols-23.pb +0 -126
  387. package/.scannerwork/scanner-report/symbols-24.pb +0 -42
  388. package/.scannerwork/scanner-report/symbols-46.pb +0 -116
  389. package/.scannerwork/scanner-report/symbols-47.pb +0 -14
  390. package/.scannerwork/scanner-report/symbols-48.pb +0 -112
  391. package/.scannerwork/scanner-report/symbols-51.pb +0 -11
  392. package/.scannerwork/scanner-report/syntax-highlightings-15.pb +0 -50
  393. package/.scannerwork/scanner-report/syntax-highlightings-16.pb +0 -113
  394. package/.scannerwork/scanner-report/syntax-highlightings-17.pb +0 -64
  395. package/.scannerwork/scanner-report/syntax-highlightings-18.pb +0 -45
  396. package/.scannerwork/scanner-report/syntax-highlightings-19.pb +0 -285
  397. package/.scannerwork/scanner-report/syntax-highlightings-20.pb +0 -133
  398. package/.scannerwork/scanner-report/syntax-highlightings-21.pb +0 -243
  399. package/.scannerwork/scanner-report/syntax-highlightings-22.pb +0 -129
  400. package/.scannerwork/scanner-report/syntax-highlightings-23.pb +0 -213
  401. package/.scannerwork/scanner-report/syntax-highlightings-24.pb +0 -78
  402. package/.scannerwork/scanner-report/syntax-highlightings-46.pb +0 -134
  403. package/.scannerwork/scanner-report/syntax-highlightings-47.pb +0 -54
  404. package/.scannerwork/scanner-report/syntax-highlightings-48.pb +0 -223
  405. package/.scannerwork/scanner-report/syntax-highlightings-51.pb +0 -59
  406. package/.scannerwork/scanner-report/syntax-highlightings-68.pb +0 -949
  407. /package/.scannerwork/scanner-report/{coverages-50.pb → coverages-29.pb} +0 -0
  408. /package/.scannerwork/scanner-report/{coverages-25.pb → coverages-65.pb} +0 -0
  409. /package/.scannerwork/scanner-report/{duplications-15.pb → duplications-12.pb} +0 -0
  410. /package/.scannerwork/scanner-report/{duplications-16.pb → duplications-13.pb} +0 -0
  411. /package/.scannerwork/scanner-report/{duplications-17.pb → duplications-2.pb} +0 -0
  412. /package/.scannerwork/scanner-report/{duplications-18.pb → duplications-29.pb} +0 -0
  413. /package/.scannerwork/scanner-report/{duplications-19.pb → duplications-3.pb} +0 -0
  414. /package/.scannerwork/scanner-report/{duplications-20.pb → duplications-31.pb} +0 -0
  415. /package/.scannerwork/scanner-report/{duplications-21.pb → duplications-34.pb} +0 -0
  416. /package/.scannerwork/scanner-report/{duplications-22.pb → duplications-35.pb} +0 -0
  417. /package/.scannerwork/scanner-report/{duplications-23.pb → duplications-36.pb} +0 -0
  418. /package/.scannerwork/scanner-report/{duplications-25.pb → duplications-39.pb} +0 -0
  419. /package/.scannerwork/scanner-report/{duplications-46.pb → duplications-62.pb} +0 -0
  420. /package/.scannerwork/scanner-report/{duplications-47.pb → duplications-65.pb} +0 -0
  421. /package/.scannerwork/scanner-report/{duplications-48.pb → duplications-7.pb} +0 -0
  422. /package/.scannerwork/scanner-report/{issues-46.pb → issues-11.pb} +0 -0
  423. /package/.scannerwork/scanner-report/{issues-49.pb → issues-14.pb} +0 -0
  424. /package/.scannerwork/scanner-report/{issues-50.pb → issues-29.pb} +0 -0
  425. /package/.scannerwork/scanner-report/{issues-54.pb → issues-3.pb} +0 -0
  426. /package/.scannerwork/scanner-report/{measures-50.pb → measures-29.pb} +0 -0
  427. /package/.scannerwork/scanner-report/{measures-25.pb → measures-65.pb} +0 -0
  428. /package/.scannerwork/scanner-report/{source-50.txt → source-29.txt} +0 -0
  429. /package/.scannerwork/scanner-report/{source-25.txt → source-65.txt} +0 -0
  430. /package/.scannerwork/scanner-report/{symbols-50.pb → symbols-29.pb} +0 -0
  431. /package/.scannerwork/scanner-report/{symbols-25.pb → symbols-65.pb} +0 -0
  432. /package/.scannerwork/scanner-report/{syntax-highlightings-50.pb → syntax-highlightings-29.pb} +0 -0
  433. /package/.scannerwork/scanner-report/{syntax-highlightings-25.pb → syntax-highlightings-65.pb} +0 -0
@@ -11,25 +11,65 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
-
15
- /* global describe it */
16
14
  'use strict';
17
15
 
18
- const assert = require('assert');
19
- const logfilegetbatches = require('../includes/logfilegetbatches.js');
20
-
21
- describe('#unit Fetching batches from a log file', function() {
22
- it('should fetch multiple batches correctly', function(done) {
23
- logfilegetbatches('./test/fixtures/test.log', [1, 4], function(err, data) {
24
- assert.ok(!err);
25
- assert.ok(data);
26
- assert.strictEqual(typeof data, 'object');
27
- assert.strictEqual(Object.keys(data).length, 2);
28
- assert.deepStrictEqual(data['1'].docs, [{ id: '6' }, { id: '7' }, { id: '8' }, { id: '9' }, { id: '10' }]);
29
- assert.strictEqual(data['1'].batch, 1);
30
- assert.deepStrictEqual(data['4'].docs, [{ id: '21' }, { id: '22' }]);
31
- assert.strictEqual(data['4'].batch, 4);
32
- done();
16
+ const fs = require('fs');
17
+ const stream = require('stream');
18
+ const liner = require('./liner.js');
19
+
20
+ const onLine = function(onCommand, batches) {
21
+ const change = new stream.Transform({ objectMode: true });
22
+ change._transform = function(line, encoding, done) {
23
+ if (line && line[0] === ':') {
24
+ const obj = {
25
+ command: null,
26
+ batch: null,
27
+ docs: []
28
+ };
29
+
30
+ let matches;
31
+
32
+ // extract command
33
+ matches = line.match(/^:([a-z_]+) ?/);
34
+ if (matches) {
35
+ obj.command = matches[1];
36
+ }
37
+
38
+ // extract batch
39
+ matches = line.match(/ batch([0-9]+)/);
40
+ if (matches) {
41
+ obj.batch = parseInt(matches[1]);
42
+ }
43
+
44
+ // if this is one we want
45
+ if (obj.command === 't' && batches.indexOf(obj.batch) > -1) {
46
+ const json = line.replace(/^.* batch[0-9]+ /, '').trim();
47
+ obj.docs = JSON.parse(json);
48
+ onCommand(obj);
49
+ }
50
+ }
51
+ done();
52
+ };
53
+ return change;
54
+ };
55
+
56
+ module.exports = function(log, batches, callback) {
57
+ // our sense of state
58
+ const retval = { };
59
+
60
+ // called with each line from the log file
61
+ const onCommand = function(obj) {
62
+ retval[obj.batch] = obj;
63
+ };
64
+
65
+ // stream through the previous log file
66
+ fs.createReadStream(log)
67
+ .pipe(liner())
68
+ .pipe(onLine(onCommand, batches))
69
+ .on('error', function(err) {
70
+ callback(err);
71
+ })
72
+ .on('finish', function() {
73
+ callback(null, retval);
33
74
  });
34
- });
35
- });
75
+ };
@@ -1,4 +1,4 @@
1
- // Copyright © 2017 IBM Corp. All rights reserved.
1
+ // Copyright © 2017, 2021 IBM Corp. All rights reserved.
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -11,121 +11,271 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
-
15
- /* global describe it */
16
14
  'use strict';
17
15
 
16
+ const async = require('async');
17
+ const events = require('events');
18
18
  const fs = require('fs');
19
- const u = require('./citestutils.js');
20
-
21
- [{ useApi: true }, { useApi: false }].forEach(function(params) {
22
- describe(u.scenario('Basic backup and restore', params), function() {
23
- it('should backup animaldb to a file correctly', function(done) {
24
- // Allow up to 40 s to backup and compare (it should be much faster)!
25
- u.setTimeout(this, 40);
26
- const actualBackup = `./${this.fileName}`;
27
- // Create a file and backup to it
28
- const output = fs.createWriteStream(actualBackup);
29
- output.on('open', function() {
30
- u.testBackup(params, 'animaldb', output, function(err) {
31
- if (err) {
32
- done(err);
33
- } else {
34
- u.readSortAndDeepEqual(actualBackup, './test/fixtures/animaldb_expected.json', done);
35
- }
36
- });
37
- });
38
- });
19
+ const error = require('./error.js');
20
+ const spoolchanges = require('./spoolchanges.js');
21
+ const logfilesummary = require('./logfilesummary.js');
22
+ const logfilegetbatches = require('./logfilegetbatches.js');
23
+
24
+ /**
25
+ * Read documents from a database to be backed up.
26
+ *
27
+ * @param {string} db - `@cloudant/cloudant` DB object for source database.
28
+ * @param {number} blocksize - number of documents to download in single request
29
+ * @param {number} parallelism - number of concurrent downloads
30
+ * @param {string} log - path to log file to use
31
+ * @param {boolean} resume - whether to resume from an existing log file
32
+ * @returns EventEmitter with following events:
33
+ * - `received` - called with a block of documents to write to backup
34
+ * - `error` - on error
35
+ * - `finished` - when backup process is finished (either complete or errored)
36
+ */
37
+ module.exports = function(db, options) {
38
+ const ee = new events.EventEmitter();
39
+ const start = new Date().getTime(); // backup start time
40
+ const batchesPerDownloadSession = 50; // max batches to read from log file for download at a time (prevent OOM)
39
41
 
40
- it('should restore animaldb to a database correctly', function(done) {
41
- // Allow up to 60 s to restore and compare (again it should be faster)!
42
- u.setTimeout(this, 60);
43
- const input = fs.createReadStream('./test/fixtures/animaldb_expected.json');
44
- const dbName = this.dbName;
45
- input.on('open', function() {
46
- u.testRestore(params, input, dbName, function(err) {
47
- if (err) {
48
- done(err);
49
- } else {
50
- u.dbCompare('animaldb', dbName, done);
51
- }
52
- });
42
+ function proceedWithBackup() {
43
+ if (options.resume) {
44
+ // pick up from existing log file from previous run
45
+ downloadRemainingBatches(options.log, db, ee, start, batchesPerDownloadSession, options.parallelism);
46
+ } else {
47
+ // create new log file and process
48
+ spoolchanges(db, options.log, options.bufferSize, ee, function(err) {
49
+ if (err) {
50
+ ee.emit('error', err);
51
+ } else {
52
+ downloadRemainingBatches(options.log, db, ee, start, batchesPerDownloadSession, options.parallelism);
53
+ }
53
54
  });
55
+ }
56
+ }
57
+
58
+ validateBulkGetSupport(db, function(err) {
59
+ if (err) {
60
+ return ee.emit('error', err);
61
+ } else {
62
+ proceedWithBackup();
63
+ }
64
+ });
65
+
66
+ return ee;
67
+ };
68
+
69
+ /**
70
+ * Validate /_bulk_get support for a specified database.
71
+ *
72
+ * @param {string} db - nodejs-cloudant db
73
+ * @param {function} callback - called on completion with signature (err)
74
+ */
75
+ function validateBulkGetSupport(db, callback) {
76
+ db.service.postBulkGet({ db: db.db, docs: [] }).then(() => { callback(); }).catch(err => {
77
+ err = error.convertResponseError(err, function(err) {
78
+ switch (err.status) {
79
+ case undefined:
80
+ // There was no status code on the error
81
+ return err;
82
+ case 404:
83
+ return new error.BackupError('BulkGetError', 'Database does not support /_bulk_get endpoint');
84
+ default:
85
+ return new error.HTTPError(err);
86
+ }
54
87
  });
88
+ callback(err);
89
+ });
90
+ }
55
91
 
56
- it('should execute a shallow mode backup successfully', function(done) {
57
- // Allow 30 s
58
- u.setTimeout(this, 30);
59
- const actualBackup = `./${this.fileName}`;
60
- const output = fs.createWriteStream(actualBackup);
61
- // Add the shallow mode option
62
- const p = u.p(params, { opts: { mode: 'shallow' } });
63
- output.on('open', function() {
64
- u.testBackup(p, 'animaldb', output, function(err) {
65
- if (err) {
66
- done(err);
67
- } else {
68
- u.readSortAndDeepEqual(actualBackup, './test/fixtures/animaldb_expected_shallow.json', done);
69
- }
70
- });
71
- });
92
+ /**
93
+ * Download remaining batches in a log file, splitting batches into sets
94
+ * to avoid enqueueing too many in one go.
95
+ *
96
+ * @param {string} log - log file name to maintain download state
97
+ * @param {string} db - nodejs-cloudant db
98
+ * @param {events.EventEmitter} ee - event emitter to emit received events on
99
+ * @param {time} startTime - start time for backup process
100
+ * @param {number} batchesPerDownloadSession - max batches to enqueue for
101
+ * download at a time. As batches contain many doc IDs, this helps avoid
102
+ * exhausting memory.
103
+ * @param {number} parallelism - number of concurrent downloads
104
+ * @returns function to call do download remaining batches with signature
105
+ * (err, {batches: batch, docs: doccount}) {@see spoolchanges}.
106
+ */
107
+ function downloadRemainingBatches(log, db, ee, startTime, batchesPerDownloadSession, parallelism) {
108
+ let total = 0; // running total of documents downloaded so far
109
+ let noRemainingBatches = false;
110
+
111
+ // Generate a set of batches (up to batchesPerDownloadSession) to download from the
112
+ // log file and download them. Set noRemainingBatches to `true` for last batch.
113
+ function downloadSingleBatchSet(done) {
114
+ // Fetch the doc IDs for the batches in the current set to
115
+ // download them.
116
+ function batchSetComplete(err, data) {
117
+ if (!err) {
118
+ total = data.total;
119
+ }
120
+ done(err);
121
+ }
122
+ function processRetrievedBatches(err, batches) {
123
+ if (!err) {
124
+ // process them in parallelised queue
125
+ processBatchSet(db, parallelism, log, batches, ee, startTime, total, batchSetComplete);
126
+ } else {
127
+ batchSetComplete(err);
128
+ }
129
+ }
130
+
131
+ readBatchSetIdsFromLogFile(log, batchesPerDownloadSession, function(err, batchSetIds) {
132
+ if (err) {
133
+ ee.emit('error', err);
134
+ // Stop processing changes file for fatal errors
135
+ noRemainingBatches = true;
136
+ done();
137
+ } else {
138
+ if (batchSetIds.length === 0) {
139
+ noRemainingBatches = true;
140
+ return done();
141
+ }
142
+ logfilegetbatches(log, batchSetIds, processRetrievedBatches);
143
+ }
72
144
  });
145
+ }
73
146
 
74
- describe(u.scenario('Buffer size tests', params), function() {
75
- it('should backup/restore animaldb with the same buffer size', function(done) {
76
- // Allow up to 60 s for backup and restore of animaldb
77
- u.setTimeout(this, 60);
78
- const actualBackup = `./${this.fileName}`;
79
- const logFile = `./${this.fileName}` + '.log';
80
- const p = u.p(params, { opts: { log: logFile, bufferSize: 1 } });
81
- u.testBackupAndRestoreViaFile(p, 'animaldb', actualBackup, this.dbName, done);
82
- });
83
- it('should backup/restore animaldb with backup buffer > restore buffer', function(done) {
84
- // Allow up to 60 s for backup and restore of animaldb
85
- u.setTimeout(this, 60);
86
- const actualBackup = `./${this.fileName}`;
87
- const logFile = `./${this.fileName}` + '.log';
88
- const dbName = this.dbName;
89
- const p = u.p(params, { opts: { log: logFile, bufferSize: 2 } }); // backup
90
- const q = u.p(params, { opts: { bufferSize: 1 } }); // restore
91
- u.testBackupToFile(p, 'animaldb', actualBackup, function(err) {
92
- if (err) {
93
- done(err);
94
- } else {
95
- // restore
96
- u.testRestoreFromFile(q, actualBackup, dbName, function(err) {
97
- if (!err) {
98
- u.dbCompare('animaldb', dbName, done);
99
- } else {
100
- done(err);
101
- }
102
- });
103
- }
104
- });
105
- });
106
- it('should backup/restore animaldb with backup buffer < restore buffer', function(done) {
107
- // Allow up to 60 s for backup and restore of animaldb
108
- u.setTimeout(this, 60);
109
- const actualBackup = `./${this.fileName}`;
110
- const logFile = `./${this.fileName}` + '.log';
111
- const dbName = this.dbName;
112
- const p = u.p(params, { opts: { log: logFile, bufferSize: 1 } }); // backup
113
- const q = u.p(params, { opts: { bufferSize: 2 } }); // restore
114
- u.testBackupToFile(p, 'animaldb', actualBackup, function(err) {
115
- if (err) {
116
- done(err);
117
- } else {
118
- // restore
119
- u.testRestoreFromFile(q, actualBackup, dbName, function(err) {
120
- if (!err) {
121
- u.dbCompare('animaldb', dbName, done);
122
- } else {
123
- done(err);
124
- }
125
- });
126
- }
127
- });
147
+ // Return true if all batches in log file have been downloaded
148
+ function isFinished(callback) { callback(null, noRemainingBatches); }
149
+
150
+ function onComplete() {
151
+ ee.emit('finished', { total: total });
152
+ }
153
+
154
+ async.doUntil(downloadSingleBatchSet, isFinished, onComplete);
155
+ }
156
+
157
+ /**
158
+ * Return a set of uncompleted download batch IDs from the log file.
159
+ *
160
+ * @param {string} log - log file path
161
+ * @param {number} batchesPerDownloadSession - maximum IDs to return
162
+ * @param {function} callback - sign (err, batchSetIds array)
163
+ */
164
+ function readBatchSetIdsFromLogFile(log, batchesPerDownloadSession, callback) {
165
+ logfilesummary(log, function processSummary(err, summary) {
166
+ if (!err) {
167
+ if (!summary.changesComplete) {
168
+ callback(new error.BackupError('IncompleteChangesInLogFile',
169
+ 'WARNING: Changes did not finish spooling'));
170
+ return;
171
+ }
172
+ if (Object.keys(summary.batches).length === 0) {
173
+ return callback(null, []);
174
+ }
175
+
176
+ // batch IDs are the property names of summary.batches
177
+ const batchSetIds = getPropertyNames(summary.batches, batchesPerDownloadSession);
178
+ callback(null, batchSetIds);
179
+ } else {
180
+ callback(err);
181
+ }
182
+ });
183
+ }
184
+
185
+ /**
186
+ * Download a set of batches retrieved from a log file. When a download is
187
+ * complete, add a line to the logfile indicating such.
188
+ *
189
+ * @param {any} db - nodejs-cloudant database
190
+ * @param {any} parallelism - number of concurrent requests to make
191
+ * @param {any} log - log file to drive downloads from
192
+ * @param {any} batches - batches to download
193
+ * @param {any} ee - event emitter for progress. This funciton emits
194
+ * received and error events.
195
+ * @param {any} start - time backup started, to report deltas
196
+ * @param {any} grandtotal - count of documents downloaded prior to this set
197
+ * of batches
198
+ * @param {any} callback - completion callback, (err, {total: number}).
199
+ */
200
+ function processBatchSet(db, parallelism, log, batches, ee, start, grandtotal, callback) {
201
+ let hasErrored = false;
202
+ let total = grandtotal;
203
+
204
+ // queue to process the fetch requests in an orderly fashion using _bulk_get
205
+ const q = async.queue(function(payload, done) {
206
+ const output = [];
207
+ const thisBatch = payload.batch;
208
+ delete payload.batch;
209
+ delete payload.command;
210
+
211
+ function logCompletedBatch(batch) {
212
+ if (log) {
213
+ fs.appendFile(log, ':d batch' + thisBatch + '\n', done);
214
+ } else {
215
+ done();
216
+ }
217
+ }
218
+
219
+ // do the /db/_bulk_get request
220
+ db.service.postBulkGet({
221
+ db: db.db,
222
+ revs: true,
223
+ docs: payload.docs
224
+ }).then(response => {
225
+ // create an output array with the docs returned
226
+ response.result.results.forEach(function(d) {
227
+ if (d.docs) {
228
+ d.docs.forEach(function(doc) {
229
+ if (doc.ok) {
230
+ output.push(doc.ok);
231
+ }
232
+ });
233
+ }
128
234
  });
235
+ total += output.length;
236
+ const t = (new Date().getTime() - start) / 1000;
237
+ ee.emit('received', {
238
+ batch: thisBatch,
239
+ data: output,
240
+ length: output.length,
241
+ time: t,
242
+ total: total
243
+ }, q, logCompletedBatch);
244
+ }).catch(err => {
245
+ if (!hasErrored) {
246
+ hasErrored = true;
247
+ err = error.convertResponseError(err);
248
+ // Kill the queue for fatal errors
249
+ q.kill();
250
+ ee.emit('error', err);
251
+ }
252
+ done();
129
253
  });
254
+ }, parallelism);
255
+
256
+ for (const i in batches) {
257
+ q.push(batches[i]);
258
+ }
259
+
260
+ q.drain(function() {
261
+ callback(null, { total: total });
130
262
  });
131
- });
263
+ }
264
+
265
+ /**
266
+ * Returns first N properties on an object.
267
+ *
268
+ * @param {object} obj - object with properties
269
+ * @param {number} count - number of properties to return
270
+ */
271
+ function getPropertyNames(obj, count) {
272
+ // decide which batch numbers to deal with
273
+ const batchestofetch = [];
274
+ let j = 0;
275
+ for (const i in obj) {
276
+ batchestofetch.push(parseInt(i));
277
+ j++;
278
+ if (j >= count) break;
279
+ }
280
+ return batchestofetch;
281
+ }
@@ -11,19 +11,31 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
-
15
- /* global describe it */
16
14
  'use strict';
17
15
 
18
- const u = require('./citestutils.js');
16
+ // stolen from http://strongloop.com/strongblog/practical-examples-of-the-new-node-js-streams-api/
17
+ const stream = require('stream');
18
+
19
+ module.exports = function(onChange) {
20
+ const change = new stream.Transform({ objectMode: true });
21
+
22
+ change._transform = function(line, encoding, done) {
23
+ let obj = null;
24
+
25
+ // one change per line - remove the trailing comma
26
+ line = line.trim().replace(/,$/, '');
27
+
28
+ // extract thee last_seq at the end of the changes feed
29
+ if (line.match(/^"last_seq":/)) {
30
+ line = '{' + line;
31
+ }
32
+ try {
33
+ obj = JSON.parse(line);
34
+ } catch (e) {
35
+ }
36
+ onChange(obj);
37
+ done();
38
+ };
19
39
 
20
- [{ useApi: true }, { useApi: false }].forEach(function(params) {
21
- describe(u.scenario('#slowest End to end backup and restore', params), function() {
22
- // 10 GB is about the largest the CI can handle before getting very upset
23
- // about how long things are taking
24
- it('should backup and restore largedb10g', function(done) {
25
- u.setTimeout(this, 350 * 60);
26
- u.testDirectBackupAndRestore(params, 'largedb10g', this.dbName, done);
27
- });
28
- });
29
- });
40
+ return change;
41
+ };