@cloudant/couchbackup 2.9.15-SNAPSHOT.176 → 2.9.15
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.
- package/.scannerwork/report-task.txt +2 -2
- package/.scannerwork/scanner-report/analysis-cache2.pb +0 -0
- package/.scannerwork/scanner-report/analysis-warnings.pb +2 -2
- package/.scannerwork/scanner-report/analysis.log +1 -1
- package/.scannerwork/scanner-report/changesets-19.pb +1 -0
- package/.scannerwork/scanner-report/changesets-20.pb +1 -0
- package/.scannerwork/scanner-report/changesets-21.pb +1 -0
- package/.scannerwork/scanner-report/changesets-22.pb +1 -0
- package/.scannerwork/scanner-report/changesets-23.pb +1 -0
- package/.scannerwork/scanner-report/changesets-24.pb +1 -0
- package/.scannerwork/scanner-report/changesets-26.pb +1 -0
- package/.scannerwork/scanner-report/changesets-29.pb +1 -0
- package/.scannerwork/scanner-report/changesets-30.pb +1 -0
- package/.scannerwork/scanner-report/changesets-31.pb +1 -0
- package/.scannerwork/scanner-report/changesets-33.pb +1 -0
- package/.scannerwork/scanner-report/changesets-34.pb +1 -0
- package/.scannerwork/scanner-report/changesets-35.pb +1 -0
- package/.scannerwork/scanner-report/changesets-36.pb +1 -0
- package/.scannerwork/scanner-report/changesets-37.pb +1 -0
- package/.scannerwork/scanner-report/changesets-38.pb +1 -0
- package/.scannerwork/scanner-report/changesets-39.pb +1 -0
- package/.scannerwork/scanner-report/changesets-66.pb +1 -0
- package/.scannerwork/scanner-report/changesets-67.pb +1 -0
- package/.scannerwork/scanner-report/component-1.pb +2 -2
- package/.scannerwork/scanner-report/component-10.pb +1 -1
- package/.scannerwork/scanner-report/component-12.pb +1 -1
- package/.scannerwork/scanner-report/component-14.pb +1 -1
- package/.scannerwork/scanner-report/component-16.pb +1 -1
- package/.scannerwork/scanner-report/component-17.pb +1 -1
- package/.scannerwork/scanner-report/component-18.pb +1 -1
- package/.scannerwork/scanner-report/component-19.pb +1 -0
- package/.scannerwork/scanner-report/component-20.pb +1 -0
- package/.scannerwork/scanner-report/component-21.pb +1 -0
- package/.scannerwork/scanner-report/component-22.pb +1 -0
- package/.scannerwork/scanner-report/component-23.pb +1 -0
- package/.scannerwork/scanner-report/component-24.pb +1 -1
- package/.scannerwork/scanner-report/component-25.pb +1 -1
- package/.scannerwork/scanner-report/component-26.pb +1 -0
- package/.scannerwork/scanner-report/component-27.pb +1 -1
- package/.scannerwork/scanner-report/component-28.pb +1 -1
- package/.scannerwork/scanner-report/component-29.pb +1 -0
- package/.scannerwork/scanner-report/component-3.pb +1 -0
- package/.scannerwork/scanner-report/component-30.pb +1 -1
- package/.scannerwork/scanner-report/component-31.pb +1 -1
- package/.scannerwork/scanner-report/component-32.pb +1 -1
- package/.scannerwork/scanner-report/component-33.pb +1 -0
- package/.scannerwork/scanner-report/component-34.pb +1 -0
- package/.scannerwork/scanner-report/component-35.pb +1 -0
- package/.scannerwork/scanner-report/component-36.pb +1 -0
- package/.scannerwork/scanner-report/component-37.pb +1 -0
- package/.scannerwork/scanner-report/component-38.pb +1 -0
- package/.scannerwork/scanner-report/component-39.pb +1 -0
- package/.scannerwork/scanner-report/component-53.pb +1 -1
- package/.scannerwork/scanner-report/component-54.pb +1 -1
- package/.scannerwork/scanner-report/component-55.pb +1 -1
- package/.scannerwork/scanner-report/component-56.pb +1 -1
- package/.scannerwork/scanner-report/component-57.pb +1 -1
- package/.scannerwork/scanner-report/component-58.pb +1 -1
- package/.scannerwork/scanner-report/component-59.pb +1 -1
- package/.scannerwork/scanner-report/component-6.pb +1 -1
- package/.scannerwork/scanner-report/component-60.pb +1 -1
- package/.scannerwork/scanner-report/component-61.pb +1 -1
- package/.scannerwork/scanner-report/component-62.pb +1 -1
- package/.scannerwork/scanner-report/component-63.pb +1 -1
- package/.scannerwork/scanner-report/component-64.pb +1 -1
- package/.scannerwork/scanner-report/component-65.pb +1 -1
- package/.scannerwork/scanner-report/component-66.pb +1 -0
- package/.scannerwork/scanner-report/component-67.pb +1 -0
- package/.scannerwork/scanner-report/component-68.pb +1 -1
- package/.scannerwork/scanner-report/component-69.pb +1 -1
- package/.scannerwork/scanner-report/component-70.pb +1 -1
- package/.scannerwork/scanner-report/coverages-12.pb +0 -0
- package/.scannerwork/scanner-report/coverages-14.pb +0 -0
- package/.scannerwork/scanner-report/coverages-16.pb +0 -0
- package/.scannerwork/scanner-report/coverages-17.pb +0 -0
- package/.scannerwork/scanner-report/coverages-18.pb +0 -0
- package/.scannerwork/scanner-report/coverages-19.pb +0 -0
- package/.scannerwork/scanner-report/coverages-21.pb +0 -0
- package/.scannerwork/scanner-report/coverages-22.pb +0 -0
- package/.scannerwork/scanner-report/coverages-24.pb +0 -0
- package/.scannerwork/scanner-report/coverages-25.pb +0 -0
- package/.scannerwork/scanner-report/coverages-27.pb +0 -0
- package/.scannerwork/scanner-report/coverages-28.pb +0 -0
- package/.scannerwork/scanner-report/coverages-29.pb +0 -0
- package/.scannerwork/scanner-report/coverages-30.pb +0 -0
- package/.scannerwork/scanner-report/coverages-31.pb +0 -0
- package/.scannerwork/scanner-report/coverages-32.pb +0 -0
- package/.scannerwork/scanner-report/coverages-34.pb +0 -0
- package/.scannerwork/scanner-report/coverages-35.pb +0 -0
- package/.scannerwork/scanner-report/coverages-37.pb +0 -0
- package/.scannerwork/scanner-report/coverages-53.pb +0 -0
- package/.scannerwork/scanner-report/coverages-54.pb +0 -0
- package/.scannerwork/scanner-report/coverages-55.pb +0 -0
- package/.scannerwork/scanner-report/coverages-56.pb +0 -0
- package/.scannerwork/scanner-report/coverages-57.pb +0 -0
- package/.scannerwork/scanner-report/coverages-58.pb +0 -0
- package/.scannerwork/scanner-report/coverages-59.pb +0 -0
- package/.scannerwork/scanner-report/coverages-60.pb +0 -0
- package/.scannerwork/scanner-report/coverages-61.pb +0 -0
- package/.scannerwork/scanner-report/coverages-62.pb +0 -0
- package/.scannerwork/scanner-report/coverages-63.pb +0 -0
- package/.scannerwork/scanner-report/coverages-64.pb +0 -0
- package/.scannerwork/scanner-report/coverages-65.pb +0 -0
- package/.scannerwork/scanner-report/coverages-67.pb +0 -0
- package/.scannerwork/scanner-report/coverages-68.pb +0 -0
- package/.scannerwork/scanner-report/coverages-69.pb +0 -0
- package/.scannerwork/scanner-report/duplications-12.pb +2 -0
- package/.scannerwork/scanner-report/duplications-14.pb +2 -0
- package/.scannerwork/scanner-report/duplications-25.pb +2 -0
- package/.scannerwork/scanner-report/duplications-54.pb +0 -0
- package/.scannerwork/scanner-report/duplications-56.pb +2 -0
- package/.scannerwork/scanner-report/duplications-66.pb +2 -0
- package/.scannerwork/scanner-report/duplications-67.pb +0 -0
- package/.scannerwork/scanner-report/duplications-68.pb +0 -2
- package/.scannerwork/scanner-report/duplications-69.pb +0 -2
- package/.scannerwork/scanner-report/issues-17.pb +3 -0
- package/.scannerwork/scanner-report/issues-32.pb +4 -1
- package/.scannerwork/scanner-report/measures-10.pb +0 -0
- package/.scannerwork/scanner-report/measures-12.pb +0 -0
- package/.scannerwork/scanner-report/measures-14.pb +0 -0
- package/.scannerwork/scanner-report/measures-16.pb +0 -0
- package/.scannerwork/scanner-report/measures-17.pb +0 -0
- package/.scannerwork/scanner-report/measures-18.pb +0 -0
- package/.scannerwork/scanner-report/measures-19.pb +0 -0
- package/.scannerwork/scanner-report/measures-21.pb +0 -0
- package/.scannerwork/scanner-report/measures-22.pb +16 -0
- package/.scannerwork/scanner-report/measures-24.pb +0 -0
- package/.scannerwork/scanner-report/measures-25.pb +0 -0
- package/.scannerwork/scanner-report/measures-27.pb +0 -0
- package/.scannerwork/scanner-report/measures-28.pb +0 -0
- package/.scannerwork/scanner-report/measures-29.pb +0 -0
- package/.scannerwork/scanner-report/measures-3.pb +0 -0
- package/.scannerwork/scanner-report/measures-30.pb +0 -0
- package/.scannerwork/scanner-report/measures-31.pb +0 -0
- package/.scannerwork/scanner-report/measures-32.pb +0 -0
- package/.scannerwork/scanner-report/measures-34.pb +0 -0
- package/.scannerwork/scanner-report/measures-35.pb +0 -0
- package/.scannerwork/scanner-report/measures-37.pb +0 -0
- package/.scannerwork/scanner-report/measures-53.pb +0 -0
- package/.scannerwork/scanner-report/measures-54.pb +0 -0
- package/.scannerwork/scanner-report/measures-55.pb +0 -0
- package/.scannerwork/scanner-report/measures-56.pb +0 -0
- package/.scannerwork/scanner-report/measures-57.pb +0 -0
- package/.scannerwork/scanner-report/measures-58.pb +0 -0
- package/.scannerwork/scanner-report/measures-59.pb +0 -0
- package/.scannerwork/scanner-report/measures-6.pb +0 -0
- package/.scannerwork/scanner-report/measures-60.pb +0 -0
- package/.scannerwork/scanner-report/measures-61.pb +0 -0
- package/.scannerwork/scanner-report/measures-62.pb +0 -0
- package/.scannerwork/scanner-report/measures-63.pb +0 -0
- package/.scannerwork/scanner-report/measures-64.pb +0 -0
- package/.scannerwork/scanner-report/measures-65.pb +0 -0
- package/.scannerwork/scanner-report/measures-66.pb +0 -0
- package/.scannerwork/scanner-report/measures-67.pb +0 -0
- package/.scannerwork/scanner-report/measures-68.pb +0 -0
- package/.scannerwork/scanner-report/measures-69.pb +0 -0
- package/.scannerwork/scanner-report/metadata.pb +0 -0
- package/.scannerwork/scanner-report/source-10.txt +424 -92
- package/.scannerwork/scanner-report/source-12.txt +173 -14
- package/.scannerwork/scanner-report/source-14.txt +156 -145
- package/.scannerwork/scanner-report/source-16.txt +32 -99
- package/.scannerwork/scanner-report/source-17.txt +116 -115
- package/.scannerwork/scanner-report/source-18.txt +117 -29
- package/.scannerwork/scanner-report/source-19.txt +37 -0
- package/.scannerwork/scanner-report/source-21.txt +41 -0
- package/.scannerwork/scanner-report/source-22.txt +293 -0
- package/.scannerwork/scanner-report/source-24.txt +32 -424
- package/.scannerwork/scanner-report/source-25.txt +155 -386
- package/.scannerwork/scanner-report/source-27.txt +84 -65
- package/.scannerwork/scanner-report/source-28.txt +432 -43
- package/.scannerwork/scanner-report/source-29.txt +42 -0
- package/.scannerwork/scanner-report/source-3.txt +424 -0
- package/.scannerwork/scanner-report/source-30.txt +29 -424
- package/.scannerwork/scanner-report/source-31.txt +37 -102
- package/.scannerwork/scanner-report/source-32.txt +288 -89
- package/.scannerwork/scanner-report/source-34.txt +106 -0
- package/.scannerwork/scanner-report/source-35.txt +75 -0
- package/.scannerwork/scanner-report/source-37.txt +191 -0
- package/.scannerwork/scanner-report/source-53.txt +104 -61
- package/.scannerwork/scanner-report/source-54.txt +31 -14
- package/.scannerwork/scanner-report/source-55.txt +150 -23
- package/.scannerwork/scanner-report/source-56.txt +51 -167
- package/.scannerwork/scanner-report/source-57.txt +255 -80
- package/.scannerwork/scanner-report/source-58.txt +58 -427
- package/.scannerwork/scanner-report/source-59.txt +162 -118
- package/.scannerwork/scanner-report/source-6.txt +102 -41
- package/.scannerwork/scanner-report/source-60.txt +99 -27
- package/.scannerwork/scanner-report/source-61.txt +43 -16
- package/.scannerwork/scanner-report/source-62.txt +115 -315
- package/.scannerwork/scanner-report/source-63.txt +16 -27
- package/.scannerwork/scanner-report/source-64.txt +25 -21
- package/.scannerwork/scanner-report/source-65.txt +92 -274
- package/.scannerwork/scanner-report/{source-15.txt → source-66.txt} +29 -12
- package/.scannerwork/scanner-report/source-67.txt +414 -0
- package/.scannerwork/scanner-report/source-68.txt +42 -157
- package/.scannerwork/scanner-report/source-69.txt +57 -166
- package/.scannerwork/scanner-report/source-70.txt +155 -155
- package/.scannerwork/scanner-report/symbols-12.pb +180 -14
- package/.scannerwork/scanner-report/symbols-14.pb +147 -120
- package/.scannerwork/scanner-report/symbols-16.pb +7 -46
- package/.scannerwork/scanner-report/symbols-17.pb +86 -33
- package/.scannerwork/scanner-report/symbols-18.pb +71 -7
- package/.scannerwork/scanner-report/symbols-19.pb +9 -0
- package/.scannerwork/scanner-report/symbols-21.pb +31 -0
- package/.scannerwork/scanner-report/symbols-22.pb +428 -0
- package/.scannerwork/scanner-report/symbols-24.pb +9 -0
- package/.scannerwork/scanner-report/symbols-25.pb +179 -580
- package/.scannerwork/scanner-report/symbols-27.pb +69 -32
- package/.scannerwork/scanner-report/symbols-28.pb +790 -21
- package/.scannerwork/scanner-report/symbols-29.pb +19 -0
- package/.scannerwork/scanner-report/symbols-30.pb +8 -0
- package/.scannerwork/scanner-report/symbols-31.pb +13 -0
- package/.scannerwork/scanner-report/symbols-32.pb +353 -86
- package/.scannerwork/scanner-report/symbols-34.pb +59 -0
- package/.scannerwork/scanner-report/symbols-35.pb +39 -0
- package/.scannerwork/scanner-report/symbols-37.pb +209 -0
- package/.scannerwork/scanner-report/symbols-53.pb +30 -39
- package/.scannerwork/scanner-report/symbols-54.pb +20 -8
- package/.scannerwork/scanner-report/symbols-55.pb +126 -9
- package/.scannerwork/scanner-report/symbols-56.pb +41 -208
- package/.scannerwork/scanner-report/symbols-57.pb +354 -59
- package/.scannerwork/scanner-report/symbols-58.pb +43 -787
- package/.scannerwork/scanner-report/symbols-59.pb +143 -70
- package/.scannerwork/scanner-report/symbols-60.pb +46 -31
- package/.scannerwork/scanner-report/symbols-61.pb +19 -9
- package/.scannerwork/scanner-report/symbols-62.pb +33 -353
- package/.scannerwork/scanner-report/symbols-63.pb +14 -19
- package/.scannerwork/scanner-report/symbols-64.pb +18 -13
- package/.scannerwork/scanner-report/symbols-65.pb +57 -426
- package/.scannerwork/scanner-report/symbols-67.pb +604 -0
- package/.scannerwork/scanner-report/symbols-68.pb +21 -153
- package/.scannerwork/scanner-report/symbols-69.pb +32 -180
- package/.scannerwork/scanner-report/syntax-highlightings-10.pb +3329 -82
- package/.scannerwork/scanner-report/syntax-highlightings-12.pb +195 -15
- package/.scannerwork/scanner-report/syntax-highlightings-14.pb +156 -155
- package/.scannerwork/scanner-report/syntax-highlightings-16.pb +32 -96
- package/.scannerwork/scanner-report/syntax-highlightings-17.pb +90 -94
- package/.scannerwork/scanner-report/syntax-highlightings-18.pb +145 -26
- package/.scannerwork/scanner-report/syntax-highlightings-19.pb +61 -0
- package/.scannerwork/scanner-report/syntax-highlightings-21.pb +69 -0
- package/.scannerwork/scanner-report/syntax-highlightings-22.pb +720 -0
- package/.scannerwork/scanner-report/syntax-highlightings-24.pb +43 -3329
- package/.scannerwork/scanner-report/syntax-highlightings-25.pb +187 -548
- package/.scannerwork/scanner-report/syntax-highlightings-27.pb +77 -70
- package/.scannerwork/scanner-report/syntax-highlightings-28.pb +598 -53
- package/.scannerwork/scanner-report/syntax-highlightings-29.pb +66 -0
- package/.scannerwork/scanner-report/syntax-highlightings-3.pb +3342 -0
- package/.scannerwork/scanner-report/syntax-highlightings-30.pb +32 -3323
- package/.scannerwork/scanner-report/syntax-highlightings-31.pb +44 -674
- package/.scannerwork/scanner-report/syntax-highlightings-32.pb +582 -87
- package/.scannerwork/scanner-report/syntax-highlightings-34.pb +178 -0
- package/.scannerwork/scanner-report/syntax-highlightings-35.pb +101 -0
- package/.scannerwork/scanner-report/syntax-highlightings-37.pb +290 -0
- package/.scannerwork/scanner-report/syntax-highlightings-53.pb +83 -71
- package/.scannerwork/scanner-report/syntax-highlightings-54.pb +35 -20
- package/.scannerwork/scanner-report/syntax-highlightings-55.pb +179 -27
- package/.scannerwork/scanner-report/syntax-highlightings-56.pb +47 -256
- package/.scannerwork/scanner-report/syntax-highlightings-57.pb +244 -137
- package/.scannerwork/scanner-report/syntax-highlightings-58.pb +58 -590
- package/.scannerwork/scanner-report/syntax-highlightings-59.pb +196 -134
- package/.scannerwork/scanner-report/syntax-highlightings-6.pb +673 -34
- package/.scannerwork/scanner-report/syntax-highlightings-60.pb +95 -38
- package/.scannerwork/scanner-report/syntax-highlightings-61.pb +28 -23
- package/.scannerwork/scanner-report/syntax-highlightings-62.pb +93 -584
- package/.scannerwork/scanner-report/syntax-highlightings-63.pb +15 -36
- package/.scannerwork/scanner-report/syntax-highlightings-64.pb +23 -33
- package/.scannerwork/scanner-report/syntax-highlightings-65.pb +96 -683
- package/.scannerwork/scanner-report/syntax-highlightings-66.pb +93 -0
- package/.scannerwork/scanner-report/syntax-highlightings-67.pb +641 -0
- package/.scannerwork/scanner-report/syntax-highlightings-68.pb +58 -190
- package/.scannerwork/scanner-report/syntax-highlightings-69.pb +75 -200
- package/.scannerwork/scanner-report/syntax-highlightings-70.pb +94 -96
- package/CHANGES.md +4 -0
- package/package.json +1 -1
- package/test-18-results.xml +157 -157
- package/test-20-results.xml +153 -153
- package/test-21-results.xml +145 -145
- package/test-iam-20-results.xml +50 -50
- package/.scannerwork/scanner-report/changesets-10.pb +0 -2
- package/.scannerwork/scanner-report/changesets-11.pb +0 -1
- package/.scannerwork/scanner-report/changesets-13.pb +0 -1
- package/.scannerwork/scanner-report/changesets-15.pb +0 -1
- package/.scannerwork/scanner-report/changesets-4.pb +0 -1
- package/.scannerwork/scanner-report/changesets-44.pb +0 -1
- package/.scannerwork/scanner-report/changesets-45.pb +0 -1
- package/.scannerwork/scanner-report/changesets-46.pb +0 -1
- package/.scannerwork/scanner-report/changesets-47.pb +0 -1
- package/.scannerwork/scanner-report/changesets-48.pb +0 -1
- package/.scannerwork/scanner-report/changesets-49.pb +0 -1
- package/.scannerwork/scanner-report/changesets-5.pb +0 -1
- package/.scannerwork/scanner-report/changesets-50.pb +0 -1
- package/.scannerwork/scanner-report/changesets-51.pb +0 -1
- package/.scannerwork/scanner-report/changesets-52.pb +0 -1
- package/.scannerwork/scanner-report/changesets-6.pb +0 -1
- package/.scannerwork/scanner-report/changesets-7.pb +0 -1
- package/.scannerwork/scanner-report/changesets-8.pb +0 -1
- package/.scannerwork/scanner-report/changesets-9.pb +0 -1
- package/.scannerwork/scanner-report/component-11.pb +0 -1
- package/.scannerwork/scanner-report/component-13.pb +0 -1
- package/.scannerwork/scanner-report/component-15.pb +0 -1
- package/.scannerwork/scanner-report/component-4.pb +0 -1
- package/.scannerwork/scanner-report/component-44.pb +0 -1
- package/.scannerwork/scanner-report/component-45.pb +0 -1
- package/.scannerwork/scanner-report/component-46.pb +0 -1
- package/.scannerwork/scanner-report/component-47.pb +0 -1
- package/.scannerwork/scanner-report/component-48.pb +0 -1
- package/.scannerwork/scanner-report/component-49.pb +0 -1
- package/.scannerwork/scanner-report/component-5.pb +0 -1
- package/.scannerwork/scanner-report/component-50.pb +0 -1
- package/.scannerwork/scanner-report/component-51.pb +0 -1
- package/.scannerwork/scanner-report/component-52.pb +0 -1
- package/.scannerwork/scanner-report/component-7.pb +0 -1
- package/.scannerwork/scanner-report/component-8.pb +0 -1
- package/.scannerwork/scanner-report/component-9.pb +0 -1
- package/.scannerwork/scanner-report/coverages-11.pb +0 -0
- package/.scannerwork/scanner-report/coverages-13.pb +0 -0
- package/.scannerwork/scanner-report/coverages-15.pb +0 -0
- package/.scannerwork/scanner-report/coverages-4.pb +0 -0
- package/.scannerwork/scanner-report/coverages-44.pb +0 -0
- package/.scannerwork/scanner-report/coverages-47.pb +0 -0
- package/.scannerwork/scanner-report/coverages-5.pb +0 -0
- package/.scannerwork/scanner-report/coverages-6.pb +0 -0
- package/.scannerwork/scanner-report/coverages-7.pb +0 -0
- package/.scannerwork/scanner-report/coverages-8.pb +0 -0
- package/.scannerwork/scanner-report/coverages-9.pb +0 -0
- package/.scannerwork/scanner-report/duplications-10.pb +0 -2
- package/.scannerwork/scanner-report/duplications-15.pb +0 -3
- package/.scannerwork/scanner-report/duplications-44.pb +0 -2
- package/.scannerwork/scanner-report/issues-62.pb +0 -6
- package/.scannerwork/scanner-report/measures-11.pb +0 -0
- package/.scannerwork/scanner-report/measures-13.pb +0 -0
- package/.scannerwork/scanner-report/measures-15.pb +0 -0
- package/.scannerwork/scanner-report/measures-4.pb +0 -0
- package/.scannerwork/scanner-report/measures-44.pb +0 -0
- package/.scannerwork/scanner-report/measures-47.pb +0 -0
- package/.scannerwork/scanner-report/measures-5.pb +0 -0
- package/.scannerwork/scanner-report/measures-7.pb +0 -16
- package/.scannerwork/scanner-report/measures-8.pb +0 -0
- package/.scannerwork/scanner-report/measures-9.pb +0 -0
- package/.scannerwork/scanner-report/source-11.txt +0 -46
- package/.scannerwork/scanner-report/source-13.txt +0 -111
- package/.scannerwork/scanner-report/source-4.txt +0 -118
- package/.scannerwork/scanner-report/source-44.txt +0 -183
- package/.scannerwork/scanner-report/source-47.txt +0 -100
- package/.scannerwork/scanner-report/source-5.txt +0 -80
- package/.scannerwork/scanner-report/source-7.txt +0 -178
- package/.scannerwork/scanner-report/source-8.txt +0 -281
- package/.scannerwork/scanner-report/source-9.txt +0 -59
- package/.scannerwork/scanner-report/symbols-11.pb +0 -20
- package/.scannerwork/scanner-report/symbols-13.pb +0 -59
- package/.scannerwork/scanner-report/symbols-15.pb +0 -42
- package/.scannerwork/scanner-report/symbols-4.pb +0 -30
- package/.scannerwork/scanner-report/symbols-44.pb +0 -203
- package/.scannerwork/scanner-report/symbols-47.pb +0 -69
- package/.scannerwork/scanner-report/symbols-5.pb +0 -46
- package/.scannerwork/scanner-report/symbols-6.pb +0 -18
- package/.scannerwork/scanner-report/symbols-7.pb +0 -144
- package/.scannerwork/scanner-report/symbols-8.pb +0 -354
- package/.scannerwork/scanner-report/symbols-9.pb +0 -19
- package/.scannerwork/scanner-report/syntax-highlightings-11.pb +0 -64
- package/.scannerwork/scanner-report/syntax-highlightings-13.pb +0 -133
- package/.scannerwork/scanner-report/syntax-highlightings-15.pb +0 -81
- package/.scannerwork/scanner-report/syntax-highlightings-4.pb +0 -113
- package/.scannerwork/scanner-report/syntax-highlightings-44.pb +0 -280
- package/.scannerwork/scanner-report/syntax-highlightings-47.pb +0 -107
- package/.scannerwork/scanner-report/syntax-highlightings-5.pb +0 -95
- package/.scannerwork/scanner-report/syntax-highlightings-7.pb +0 -243
- package/.scannerwork/scanner-report/syntax-highlightings-8.pb +0 -285
- package/.scannerwork/scanner-report/syntax-highlightings-9.pb +0 -59
- /package/.scannerwork/scanner-report/{coverages-50.pb → coverages-20.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-48.pb → coverages-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-51.pb → coverages-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-45.pb → coverages-33.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-46.pb → coverages-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-52.pb → coverages-38.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-49.pb → coverages-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-10.pb → coverages-66.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-11.pb → duplications-19.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-13.pb → duplications-20.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-4.pb → duplications-21.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-45.pb → duplications-22.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-46.pb → duplications-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-47.pb → duplications-24.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-51.pb → duplications-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-48.pb → duplications-29.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-5.pb → duplications-31.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-50.pb → duplications-33.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-52.pb → duplications-34.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-6.pb → duplications-35.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-7.pb → duplications-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-8.pb → duplications-37.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-9.pb → duplications-38.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-49.pb → duplications-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-51.pb → issues-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-63.pb → issues-29.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-50.pb → measures-20.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-48.pb → measures-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-51.pb → measures-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-45.pb → measures-33.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-46.pb → measures-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-52.pb → measures-38.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-49.pb → measures-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{source-50.txt → source-20.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-48.txt → source-23.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-51.txt → source-26.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-45.txt → source-33.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-46.txt → source-36.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-52.txt → source-38.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-49.txt → source-39.txt} +0 -0
- /package/.scannerwork/scanner-report/{symbols-50.pb → symbols-20.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-48.pb → symbols-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-51.pb → symbols-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-45.pb → symbols-33.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-46.pb → symbols-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-52.pb → symbols-38.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-49.pb → symbols-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-10.pb → symbols-66.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-50.pb → syntax-highlightings-20.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-48.pb → syntax-highlightings-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-51.pb → syntax-highlightings-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-45.pb → syntax-highlightings-33.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-46.pb → syntax-highlightings-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-52.pb → syntax-highlightings-38.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-49.pb → syntax-highlightings-39.pb} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright © 2017,
|
|
1
|
+
// Copyright © 2017, 2022 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,283 +11,101 @@
|
|
|
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 before after beforeEach */
|
|
16
14
|
'use strict';
|
|
17
15
|
|
|
18
|
-
const assert = require('assert');
|
|
19
16
|
const fs = require('fs');
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
.then(() => {
|
|
68
|
-
return testPromiseWithAssertNock(u.testBackup(p, 'fakenockdb', output));
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async function restoreHttpError(opts, errorName, errorCode) {
|
|
73
|
-
const q = u.p(opts, { expectedRestoreError: { name: errorName, code: errorCode } });
|
|
74
|
-
return testPromiseWithAssertNock(u.testRestoreFromFile(q, './test/fixtures/animaldb_expected.json', 'fakenockdb'));
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
[{ useApi: true }, { useApi: false }].forEach(function(params) {
|
|
78
|
-
describe(u.scenario('#unit Fatal errors', params), function() {
|
|
79
|
-
// These tests do real requests with mocks and if they run slowly
|
|
80
|
-
// the 2 second default mocha timeout can be insufficient, use 10 s
|
|
81
|
-
this.timeout(10000);
|
|
82
|
-
|
|
83
|
-
let processEnvCopy;
|
|
84
|
-
let proxy;
|
|
85
|
-
|
|
86
|
-
before('Set process data for test', function() {
|
|
87
|
-
const proxyPort = mockServerPort + 1000;
|
|
88
|
-
// Copy env and argv so we can reset them after the tests
|
|
89
|
-
processEnvCopy = JSON.parse(JSON.stringify(process.env));
|
|
90
|
-
|
|
91
|
-
// Set up a proxy to point to our nock server because the nock override
|
|
92
|
-
// isn't visible to the spawned CLI process
|
|
93
|
-
if (!params.useApi) {
|
|
94
|
-
proxy = httpProxy.createProxyServer({ target: url }).listen(proxyPort, 'localhost');
|
|
95
|
-
proxy.on('error', (err, req, res) => {
|
|
96
|
-
console.log(`Proxy received error ${err}`);
|
|
97
|
-
res.writeHead(400, {
|
|
98
|
-
'Content-Type': 'application/json'
|
|
99
|
-
});
|
|
100
|
-
res.end(JSON.stringify(err));
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// setup environment variables
|
|
105
|
-
process.env.COUCH_URL = (params.useApi) ? url : `http://localhost:${proxyPort}`;
|
|
106
|
-
|
|
107
|
-
nock.emitter.on('no match', (req, opts) => {
|
|
108
|
-
console.error(`Unmatched nock request ${opts.method} ${opts.protocol}${opts.host}${opts.path}`);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
after('Reset process data', function(done) {
|
|
113
|
-
process.env = processEnvCopy;
|
|
114
|
-
nock.emitter.removeAllListeners();
|
|
115
|
-
if (!params.useApi) {
|
|
116
|
-
proxy.close(done);
|
|
117
|
-
} else {
|
|
118
|
-
done();
|
|
17
|
+
const liner = require('./liner.js');
|
|
18
|
+
const change = require('./change.js');
|
|
19
|
+
const error = require('./error.js');
|
|
20
|
+
const debug = require('debug')('couchbackup:spoolchanges');
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Write log file for all changes from a database, ready for downloading
|
|
24
|
+
* in batches.
|
|
25
|
+
*
|
|
26
|
+
* @param {string} dbUrl - URL of database
|
|
27
|
+
* @param {string} log - path to log file to use
|
|
28
|
+
* @param {number} bufferSize - the number of changes per batch/log line
|
|
29
|
+
* @param {function(err)} callback - a callback to run on completion
|
|
30
|
+
*/
|
|
31
|
+
module.exports = function(db, log, bufferSize, ee, callback) {
|
|
32
|
+
// list of document ids to process
|
|
33
|
+
const buffer = [];
|
|
34
|
+
let batch = 0;
|
|
35
|
+
let lastSeq = null;
|
|
36
|
+
const logStream = fs.createWriteStream(log);
|
|
37
|
+
let pending = 0;
|
|
38
|
+
// The number of changes to fetch per request
|
|
39
|
+
const limit = 100000;
|
|
40
|
+
|
|
41
|
+
// send documents ids to the queue in batches of bufferSize + the last batch
|
|
42
|
+
const processBuffer = function(lastOne) {
|
|
43
|
+
if (buffer.length >= bufferSize || (lastOne && buffer.length > 0)) {
|
|
44
|
+
debug('writing', buffer.length, 'changes to the backup file');
|
|
45
|
+
const b = { docs: buffer.splice(0, bufferSize), batch: batch };
|
|
46
|
+
logStream.write(':t batch' + batch + ' ' + JSON.stringify(b.docs) + '\n');
|
|
47
|
+
ee.emit('changes', batch);
|
|
48
|
+
batch++;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// called once per received change
|
|
53
|
+
const onChange = function(c) {
|
|
54
|
+
if (c) {
|
|
55
|
+
if (c.error) {
|
|
56
|
+
ee.emit('error', new error.BackupError('InvalidChange', `Received invalid change: ${c}`));
|
|
57
|
+
} else if (c.changes) {
|
|
58
|
+
const obj = { id: c.id };
|
|
59
|
+
buffer.push(obj);
|
|
60
|
+
processBuffer(false);
|
|
61
|
+
} else if (c.last_seq) {
|
|
62
|
+
lastSeq = c.last_seq;
|
|
63
|
+
pending = c.pending;
|
|
119
64
|
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
it('should terminate on _bulk_get HTTPFatalError', function() {
|
|
154
|
-
// Provide a mock complete changes log to allow a resume to skip ahead
|
|
155
|
-
const p = u.p(params, { opts: { resume: true, log: './test/fixtures/test.log' } });
|
|
156
|
-
// Allow the existence and _bulk_get checks to pass
|
|
157
|
-
const n = nock(url).head('/fakenockdb').reply(200);
|
|
158
|
-
n.post('/fakenockdb/_bulk_get').reply(200, '{"results": []}');
|
|
159
|
-
// Simulate a fatal HTTP error when trying to fetch docs
|
|
160
|
-
// Note: 2 outstanding batches, so 2 responses, 1 mock is optional because we can't guarantee timing
|
|
161
|
-
n.post('/fakenockdb/_bulk_get').query(true).reply(400, { error: 'bad_request', reason: 'testing bad response' });
|
|
162
|
-
n.post('/fakenockdb/_bulk_get').query(true).optionally().reply(400, { error: 'bad_request', reason: 'testing bad response' });
|
|
163
|
-
return backupHttpError(p, 'HTTPFatalError', 40);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
it('should terminate on NoLogFileName', function() {
|
|
167
|
-
// Don't supply a log file name with resume
|
|
168
|
-
const p = u.p(params, { opts: { resume: true } });
|
|
169
|
-
return backupHttpError(p, 'NoLogFileName', 20);
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
it('should terminate on LogDoesNotExist', function() {
|
|
173
|
-
// Use a non-existent log file
|
|
174
|
-
const p = u.p(params, { opts: { resume: true, log: './test/fixtures/doesnotexist.log' } });
|
|
175
|
-
return backupHttpError(p, 'LogDoesNotExist', 21);
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
it('should terminate on IncompleteChangesInLogFile', function() {
|
|
179
|
-
// Use an incomplete changes log file
|
|
180
|
-
const p = u.p(params, { opts: { resume: true, log: './test/fixtures/incomplete_changes.log' } });
|
|
181
|
-
// Allow the existence and _bulk_get checks to pass
|
|
182
|
-
const n = nock(url).head('/fakenockdb').reply(200);
|
|
183
|
-
n.post('/fakenockdb/_bulk_get').reply(200, '{"results": []}');
|
|
184
|
-
// Should fail when it reads the incomplete changes
|
|
185
|
-
return backupHttpError(p, 'IncompleteChangesInLogFile', 22);
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it('should terminate on _changes HTTPFatalError', function() {
|
|
189
|
-
// Allow the existence and _bulk_get checks to pass
|
|
190
|
-
const n = nock(url).head('/fakenockdb').reply(200);
|
|
191
|
-
n.post('/fakenockdb/_bulk_get').reply(200, '{"results": []}');
|
|
192
|
-
// Simulate a fatal HTTP error when trying to fetch docs (note 2 outstanding batches)
|
|
193
|
-
n.post('/fakenockdb/_changes').query(true).reply(400, { error: 'bad_request', reason: 'testing bad response' });
|
|
194
|
-
return backupHttpError(params, 'HTTPFatalError', 40);
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
it('should terminate on SpoolChangesError', function() {
|
|
198
|
-
// Allow the existence and _bulk_get checks to pass
|
|
199
|
-
const n = nock(url).head('/fakenockdb').reply(200);
|
|
200
|
-
n.post('/fakenockdb/_bulk_get').reply(200, '{"results": []}');
|
|
201
|
-
// Simulate a changes without a last_seq
|
|
202
|
-
n.post('/fakenockdb/_changes').query(true).reply(200,
|
|
203
|
-
{
|
|
204
|
-
results: [{
|
|
205
|
-
seq: '2-g1AAAAEbeJzLYWBgYMlgTmFQSElKzi9KdUhJstTLTS3KLElMT9VLzskvTUnMK9HLSy3JAapkSmRIsv___39WBnMiUy5QgN3MzDIxOdEMWb85dv0gSxThigyN8diS5AAkk-pBFiUyoOkzxKMvjwVIMjQAKaDW_Zh6TQnqPQDRC7I3CwDPDV1k',
|
|
206
|
-
id: 'badger',
|
|
207
|
-
changes: [{ rev: '4-51aa94e4b0ef37271082033bba52b850' }]
|
|
208
|
-
}]
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
function getChanges(since = 0) {
|
|
69
|
+
debug('making changes request since ' + since);
|
|
70
|
+
return db.service.postChangesAsStream({ db: db.db, since: since, limit: limit, seqInterval: limit })
|
|
71
|
+
.then(response => {
|
|
72
|
+
response.result.pipe(liner())
|
|
73
|
+
.on('error', function(err) {
|
|
74
|
+
logStream.end();
|
|
75
|
+
callback(err);
|
|
76
|
+
})
|
|
77
|
+
.pipe(change(onChange))
|
|
78
|
+
.on('error', function(err) {
|
|
79
|
+
logStream.end();
|
|
80
|
+
callback(err);
|
|
81
|
+
})
|
|
82
|
+
.on('finish', function() {
|
|
83
|
+
processBuffer(true);
|
|
84
|
+
if (!lastSeq) {
|
|
85
|
+
logStream.end();
|
|
86
|
+
debug('changes request terminated before last_seq was sent');
|
|
87
|
+
callback(new error.BackupError('SpoolChangesError', 'Changes request terminated before last_seq was sent'));
|
|
88
|
+
} else {
|
|
89
|
+
debug(`changes request completed with last_seq: ${lastSeq} and ${pending} changes pending.`);
|
|
90
|
+
if (pending > 0) {
|
|
91
|
+
// Return the next promise
|
|
92
|
+
return getChanges(lastSeq);
|
|
93
|
+
} else {
|
|
94
|
+
debug('finished streaming database changes');
|
|
95
|
+
logStream.end(':changes_complete ' + lastSeq + '\n', 'utf8', callback);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
209
98
|
});
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return restoreHttpError(params, 'Unauthorized', 11);
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
it('should terminate on Forbidden no _writer', function() {
|
|
222
|
-
// Simulate the DB exists (i.e. you can read it)
|
|
223
|
-
const n = nock(url).get('/fakenockdb').reply(200, { doc_count: 0, doc_del_count: 0 });
|
|
224
|
-
// Simulate a 403 trying to write
|
|
225
|
-
n.post('/fakenockdb/_bulk_docs').reply(403, { error: 'forbidden', reason: '_writer access is required for this request' });
|
|
226
|
-
return restoreHttpError(params, 'Forbidden', 12);
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it('should terminate on RestoreDatabaseNotFound', function() {
|
|
230
|
-
// Simulate the DB does not exist
|
|
231
|
-
nock(url).get('/fakenockdb').reply(404, { error: 'not_found', reason: 'Database does not exist.' });
|
|
232
|
-
return restoreHttpError(params, 'DatabaseNotFound', 10);
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
it('should terminate on notEmptyDBErr when database is not empty', function() {
|
|
236
|
-
// Simulate the DB that does exist and not empty
|
|
237
|
-
nock(url).get('/fakenockdb').reply(200, { doc_count: 10, doc_del_count: 0 });
|
|
238
|
-
return restoreHttpError(params, 'DatabaseNotEmpty', 13);
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
it('should terminate on notEmptyDBErr when database is not new', function() {
|
|
242
|
-
// Simulate the DB that does exist and not new
|
|
243
|
-
nock(url).get('/fakenockdb').reply(200, { doc_count: 0, doc_del_count: 10 });
|
|
244
|
-
return restoreHttpError(params, 'DatabaseNotEmpty', 13);
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
it('should terminate on _bulk_docs HTTPFatalError', function() {
|
|
248
|
-
// Simulate the DB exists
|
|
249
|
-
const n = nock(url).get('/fakenockdb').reply(200, { doc_count: 0, doc_del_count: 0 });
|
|
250
|
-
// Use a parallelism of one and mock one response
|
|
251
|
-
const p = u.p(params, { opts: { parallelism: 1 } });
|
|
252
|
-
// Simulate a 400 trying to write
|
|
253
|
-
n.post('/fakenockdb/_bulk_docs').reply(400, { error: 'bad_request', reason: 'testing bad response' });
|
|
254
|
-
return restoreHttpError(p, 'HTTPFatalError', 40);
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
it('should terminate on _bulk_docs HTTPFatalError from system database', function() {
|
|
258
|
-
// Simulate that target database exists and is _not_ empty.
|
|
259
|
-
// This should pass validator as we exclude system databases from the check.
|
|
260
|
-
const n = nock(url).get('/_replicator').reply(200, { doc_count: 1, doc_del_count: 0 });
|
|
261
|
-
// Simulate a 400 trying to write
|
|
262
|
-
n.post('/_replicator/_bulk_docs').reply(400, { error: 'bad_request', reason: 'testing bad response' });
|
|
263
|
-
// Use a parallelism of one and mock one response
|
|
264
|
-
const q = u.p(params, { opts: { parallelism: 1 }, expectedRestoreError: { name: 'HTTPFatalError', code: 40 } });
|
|
265
|
-
return testPromiseWithAssertNock(u.testRestore(q, new InfiniteBackupStream(), '_replicator'));
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
it('should terminate on _bulk_docs HTTPFatalError large stream', function() {
|
|
269
|
-
// Simulate the DB exists
|
|
270
|
-
const n = nock(url).get('/fakenockdb').reply(200, { doc_count: 0, doc_del_count: 0 });
|
|
271
|
-
// Simulate a 400 trying to write
|
|
272
|
-
// Provide a body function to handle the stream, but allow any body
|
|
273
|
-
n.post('/fakenockdb/_bulk_docs', function(body) { return true; }).reply(400, { error: 'bad_request', reason: 'testing bad response' });
|
|
274
|
-
// Use only parallelism 1 so we don't have to mock up loads of responses
|
|
275
|
-
const q = u.p(params, { opts: { parallelism: 1 }, expectedRestoreError: { name: 'HTTPFatalError', code: 40 } });
|
|
276
|
-
return testPromiseWithAssertNock(u.testRestore(q, new InfiniteBackupStream(), 'fakenockdb'));
|
|
99
|
+
})
|
|
100
|
+
.catch(err => {
|
|
101
|
+
logStream.end();
|
|
102
|
+
if (err.status && err.status >= 400) {
|
|
103
|
+
callback(error.convertResponseError(err));
|
|
104
|
+
} else if (err.name !== 'SpoolChangesError') {
|
|
105
|
+
callback(new error.BackupError('SpoolChangesError', `Failed changes request - ${err.message}`));
|
|
106
|
+
}
|
|
277
107
|
});
|
|
108
|
+
}
|
|
278
109
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const n = nock(url).get('/fakenockdb').reply(200, { doc_count: 0, doc_del_count: 0 });
|
|
282
|
-
// Simulate a 400 trying to write docs, 5 times because of default parallelism
|
|
283
|
-
// Provide a body function to handle the stream, but allow any body
|
|
284
|
-
// Four of the mocks are optional because of parallelism 5 we can't guarantee that the exit will happen
|
|
285
|
-
// after all 5 requests, but we must get at least one of them
|
|
286
|
-
n.post('/fakenockdb/_bulk_docs', function(body) { return true; }).reply(400, { error: 'bad_request', reason: 'testing bad response' });
|
|
287
|
-
n.post('/fakenockdb/_bulk_docs', function(body) { return true; }).times(4).optionally().reply(400, { error: 'bad_request', reason: 'testing bad response' });
|
|
288
|
-
const q = u.p(params, { opts: { bufferSize: 1 }, expectedRestoreError: { name: 'HTTPFatalError', code: 40 } });
|
|
289
|
-
return restoreHttpError(q, 'HTTPFatalError', 40);
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
});
|
|
293
|
-
});
|
|
110
|
+
getChanges();
|
|
111
|
+
};
|
|
@@ -17,8 +17,9 @@ const fs = require('fs');
|
|
|
17
17
|
const stream = require('stream');
|
|
18
18
|
const liner = require('./liner.js');
|
|
19
19
|
|
|
20
|
-
const onLine = function(onCommand,
|
|
20
|
+
const onLine = function(onCommand, getDocs) {
|
|
21
21
|
const change = new stream.Transform({ objectMode: true });
|
|
22
|
+
|
|
22
23
|
change._transform = function(line, encoding, done) {
|
|
23
24
|
if (line && line[0] === ':') {
|
|
24
25
|
const obj = {
|
|
@@ -41,35 +42,51 @@ const onLine = function(onCommand, batches) {
|
|
|
41
42
|
obj.batch = parseInt(matches[1]);
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
//
|
|
45
|
-
if (obj.command === 't'
|
|
45
|
+
// extract doc ids
|
|
46
|
+
if (getDocs && obj.command === 't') {
|
|
46
47
|
const json = line.replace(/^.* batch[0-9]+ /, '').trim();
|
|
47
48
|
obj.docs = JSON.parse(json);
|
|
48
|
-
onCommand(obj);
|
|
49
49
|
}
|
|
50
|
+
onCommand(obj);
|
|
50
51
|
}
|
|
51
52
|
done();
|
|
52
53
|
};
|
|
53
54
|
return change;
|
|
54
55
|
};
|
|
55
56
|
|
|
56
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Generate a list of remaining batches from a download file.
|
|
59
|
+
*
|
|
60
|
+
* @param {string} log - log file name
|
|
61
|
+
* @param {function} callback - callback with err, {changesComplete: N, batches: N}.
|
|
62
|
+
* changesComplete signifies whether the log file appeared to
|
|
63
|
+
* have completed reading the changes feed (contains :changes_complete).
|
|
64
|
+
* batches are remaining batch IDs for download.
|
|
65
|
+
*/
|
|
66
|
+
module.exports = function(log, callback) {
|
|
57
67
|
// our sense of state
|
|
58
|
-
const
|
|
68
|
+
const state = {
|
|
69
|
+
|
|
70
|
+
};
|
|
71
|
+
let changesComplete = false;
|
|
59
72
|
|
|
60
73
|
// called with each line from the log file
|
|
61
74
|
const onCommand = function(obj) {
|
|
62
|
-
|
|
75
|
+
if (obj.command === 't') {
|
|
76
|
+
state[obj.batch] = true;
|
|
77
|
+
} else if (obj.command === 'd') {
|
|
78
|
+
delete state[obj.batch];
|
|
79
|
+
} else if (obj.command === 'changes_complete') {
|
|
80
|
+
changesComplete = true;
|
|
81
|
+
}
|
|
63
82
|
};
|
|
64
83
|
|
|
65
84
|
// stream through the previous log file
|
|
66
85
|
fs.createReadStream(log)
|
|
67
86
|
.pipe(liner())
|
|
68
|
-
.pipe(onLine(onCommand,
|
|
69
|
-
.on('error', function(err) {
|
|
70
|
-
callback(err);
|
|
71
|
-
})
|
|
87
|
+
.pipe(onLine(onCommand, false))
|
|
72
88
|
.on('finish', function() {
|
|
73
|
-
|
|
89
|
+
const obj = { changesComplete: changesComplete, batches: state };
|
|
90
|
+
callback(null, obj);
|
|
74
91
|
});
|
|
75
92
|
};
|