@cloudant/couchbackup 2.9.8 → 2.9.9-SNAPSHOT.101
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-warnings.pb +2 -2
- package/.scannerwork/scanner-report/analysis.log +1 -1
- package/.scannerwork/scanner-report/changesets-11.pb +1 -0
- package/.scannerwork/scanner-report/changesets-12.pb +1 -0
- package/.scannerwork/scanner-report/changesets-13.pb +1 -0
- package/.scannerwork/scanner-report/changesets-14.pb +1 -0
- package/.scannerwork/scanner-report/changesets-15.pb +1 -0
- package/.scannerwork/scanner-report/changesets-16.pb +1 -0
- package/.scannerwork/scanner-report/changesets-17.pb +1 -0
- package/.scannerwork/scanner-report/changesets-18.pb +1 -0
- package/.scannerwork/scanner-report/changesets-2.pb +1 -0
- package/.scannerwork/scanner-report/changesets-3.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-40.pb +1 -0
- package/.scannerwork/scanner-report/changesets-55.pb +1 -0
- package/.scannerwork/scanner-report/changesets-56.pb +1 -0
- package/.scannerwork/scanner-report/changesets-59.pb +1 -0
- package/.scannerwork/scanner-report/changesets-60.pb +1 -0
- package/.scannerwork/scanner-report/changesets-61.pb +1 -0
- package/.scannerwork/scanner-report/changesets-62.pb +1 -0
- package/.scannerwork/scanner-report/changesets-63.pb +1 -0
- package/.scannerwork/scanner-report/changesets-64.pb +1 -0
- package/.scannerwork/scanner-report/changesets-67.pb +1 -0
- package/.scannerwork/scanner-report/changesets-68.pb +1 -0
- package/.scannerwork/scanner-report/component-1.pb +2 -1
- package/.scannerwork/scanner-report/component-10.pb +2 -0
- package/.scannerwork/scanner-report/component-11.pb +1 -0
- package/.scannerwork/scanner-report/component-12.pb +1 -0
- package/.scannerwork/scanner-report/component-13.pb +1 -0
- package/.scannerwork/scanner-report/component-14.pb +1 -0
- package/.scannerwork/scanner-report/component-15.pb +1 -0
- package/.scannerwork/scanner-report/component-16.pb +1 -0
- package/.scannerwork/scanner-report/component-17.pb +1 -0
- package/.scannerwork/scanner-report/component-18.pb +1 -0
- package/.scannerwork/scanner-report/component-19.pb +1 -1
- package/.scannerwork/scanner-report/component-2.pb +1 -0
- package/.scannerwork/scanner-report/component-20.pb +1 -1
- package/.scannerwork/scanner-report/component-21.pb +1 -1
- package/.scannerwork/scanner-report/component-22.pb +1 -1
- package/.scannerwork/scanner-report/component-23.pb +1 -1
- package/.scannerwork/scanner-report/component-24.pb +1 -1
- package/.scannerwork/scanner-report/component-25.pb +1 -1
- package/.scannerwork/scanner-report/component-27.pb +1 -1
- 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-33.pb +1 -1
- package/.scannerwork/scanner-report/component-34.pb +1 -1
- package/.scannerwork/scanner-report/component-36.pb +1 -1
- package/.scannerwork/scanner-report/component-37.pb +1 -1
- package/.scannerwork/scanner-report/component-38.pb +1 -1
- package/.scannerwork/scanner-report/component-39.pb +1 -0
- package/.scannerwork/scanner-report/component-4.pb +1 -1
- package/.scannerwork/scanner-report/component-40.pb +1 -1
- package/.scannerwork/scanner-report/component-52.pb +1 -1
- 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 -0
- 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-60.pb +1 -0
- package/.scannerwork/scanner-report/component-61.pb +1 -1
- package/.scannerwork/scanner-report/component-62.pb +1 -0
- package/.scannerwork/scanner-report/component-63.pb +1 -0
- package/.scannerwork/scanner-report/component-64.pb +1 -0
- package/.scannerwork/scanner-report/component-65.pb +1 -1
- package/.scannerwork/scanner-report/component-66.pb +1 -1
- package/.scannerwork/scanner-report/component-67.pb +1 -0
- package/.scannerwork/scanner-report/component-68.pb +1 -0
- package/.scannerwork/scanner-report/component-69.pb +1 -1
- package/.scannerwork/scanner-report/coverages-12.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-2.pb +0 -0
- package/.scannerwork/scanner-report/coverages-20.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-23.pb +0 -0
- package/.scannerwork/scanner-report/coverages-24.pb +0 -0
- package/.scannerwork/scanner-report/coverages-3.pb +0 -0
- package/.scannerwork/scanner-report/coverages-30.pb +0 -0
- package/.scannerwork/scanner-report/coverages-33.pb +0 -0
- package/.scannerwork/scanner-report/coverages-34.pb +0 -0
- package/.scannerwork/scanner-report/coverages-36.pb +0 -0
- package/.scannerwork/scanner-report/coverages-37.pb +0 -0
- package/.scannerwork/scanner-report/coverages-38.pb +0 -0
- package/.scannerwork/scanner-report/coverages-4.pb +0 -0
- package/.scannerwork/scanner-report/coverages-52.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-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-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-66.pb +0 -0
- package/.scannerwork/scanner-report/duplications-17.pb +2 -0
- package/.scannerwork/scanner-report/duplications-19.pb +1 -2
- package/.scannerwork/scanner-report/duplications-21.pb +0 -2
- package/.scannerwork/scanner-report/duplications-22.pb +0 -3
- package/.scannerwork/scanner-report/duplications-3.pb +2 -0
- package/.scannerwork/scanner-report/duplications-36.pb +0 -2
- package/.scannerwork/scanner-report/duplications-38.pb +3 -0
- package/.scannerwork/scanner-report/duplications-4.pb +2 -0
- package/.scannerwork/scanner-report/duplications-54.pb +2 -0
- package/.scannerwork/scanner-report/duplications-60.pb +2 -0
- package/.scannerwork/scanner-report/duplications-63.pb +3 -0
- package/.scannerwork/scanner-report/duplications-65.pb +0 -2
- package/.scannerwork/scanner-report/duplications-66.pb +0 -2
- package/.scannerwork/scanner-report/measures-10.pb +0 -0
- package/.scannerwork/scanner-report/measures-12.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-2.pb +0 -0
- package/.scannerwork/scanner-report/measures-20.pb +0 -0
- package/.scannerwork/scanner-report/measures-21.pb +0 -0
- package/.scannerwork/scanner-report/measures-22.pb +0 -0
- package/.scannerwork/scanner-report/measures-23.pb +0 -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-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-33.pb +0 -0
- package/.scannerwork/scanner-report/measures-34.pb +0 -0
- package/.scannerwork/scanner-report/measures-36.pb +0 -0
- package/.scannerwork/scanner-report/measures-37.pb +0 -0
- package/.scannerwork/scanner-report/measures-38.pb +0 -0
- package/.scannerwork/scanner-report/measures-4.pb +0 -0
- package/.scannerwork/scanner-report/measures-40.pb +0 -0
- package/.scannerwork/scanner-report/measures-52.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-60.pb +15 -0
- package/.scannerwork/scanner-report/measures-61.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 +167 -0
- package/.scannerwork/scanner-report/source-12.txt +164 -0
- package/.scannerwork/scanner-report/source-18.txt +111 -0
- package/.scannerwork/scanner-report/source-19.txt +71 -110
- package/.scannerwork/scanner-report/source-2.txt +114 -0
- package/.scannerwork/scanner-report/source-20.txt +25 -19
- package/.scannerwork/scanner-report/source-21.txt +105 -269
- package/.scannerwork/scanner-report/source-22.txt +57 -96
- package/.scannerwork/scanner-report/source-23.txt +40 -78
- package/.scannerwork/scanner-report/source-24.txt +19 -598
- package/.scannerwork/scanner-report/source-25.txt +509 -29
- package/.scannerwork/scanner-report/source-27.txt +509 -36
- package/.scannerwork/scanner-report/source-3.txt +190 -0
- package/.scannerwork/scanner-report/source-30.txt +399 -17
- package/.scannerwork/scanner-report/source-31.txt +509 -100
- package/.scannerwork/scanner-report/source-33.txt +52 -131
- package/.scannerwork/scanner-report/source-34.txt +36 -48
- package/.scannerwork/scanner-report/source-36.txt +25 -203
- package/.scannerwork/scanner-report/source-37.txt +121 -93
- package/.scannerwork/scanner-report/source-38.txt +119 -167
- package/.scannerwork/scanner-report/source-4.txt +158 -17
- package/.scannerwork/scanner-report/source-40.txt +244 -509
- package/.scannerwork/scanner-report/source-52.txt +599 -85
- package/.scannerwork/scanner-report/source-53.txt +47 -30
- package/.scannerwork/scanner-report/source-54.txt +202 -141
- package/.scannerwork/scanner-report/source-55.txt +68 -509
- package/.scannerwork/scanner-report/source-56.txt +36 -0
- package/.scannerwork/scanner-report/source-57.txt +20 -62
- package/.scannerwork/scanner-report/source-58.txt +140 -40
- package/.scannerwork/scanner-report/source-59.txt +34 -509
- package/.scannerwork/scanner-report/source-60.txt +293 -0
- package/.scannerwork/scanner-report/source-61.txt +366 -509
- package/.scannerwork/scanner-report/source-63.txt +131 -0
- package/.scannerwork/scanner-report/source-64.txt +92 -0
- package/.scannerwork/scanner-report/source-65.txt +80 -170
- package/.scannerwork/scanner-report/source-66.txt +46 -153
- package/.scannerwork/scanner-report/source-67.txt +36 -0
- package/.scannerwork/scanner-report/source-68.txt +29 -0
- package/.scannerwork/scanner-report/source-69.txt +509 -418
- package/.scannerwork/scanner-report/symbols-12.pb +126 -0
- package/.scannerwork/scanner-report/symbols-18.pb +59 -0
- package/.scannerwork/scanner-report/symbols-19.pb +44 -97
- package/.scannerwork/scanner-report/symbols-2.pb +28 -0
- package/.scannerwork/scanner-report/symbols-20.pb +17 -16
- package/.scannerwork/scanner-report/symbols-21.pb +33 -486
- package/.scannerwork/scanner-report/symbols-22.pb +41 -72
- package/.scannerwork/scanner-report/symbols-23.pb +15 -60
- package/.scannerwork/scanner-report/symbols-24.pb +19 -1253
- package/.scannerwork/scanner-report/symbols-3.pb +180 -0
- package/.scannerwork/scanner-report/symbols-30.pb +610 -14
- package/.scannerwork/scanner-report/symbols-33.pb +29 -111
- package/.scannerwork/scanner-report/symbols-34.pb +18 -35
- package/.scannerwork/scanner-report/symbols-36.pb +26 -417
- package/.scannerwork/scanner-report/symbols-37.pb +116 -28
- package/.scannerwork/scanner-report/symbols-38.pb +77 -0
- package/.scannerwork/scanner-report/symbols-4.pb +152 -9
- package/.scannerwork/scanner-report/symbols-52.pb +1251 -56
- package/.scannerwork/scanner-report/symbols-53.pb +42 -19
- package/.scannerwork/scanner-report/symbols-54.pb +417 -125
- package/.scannerwork/scanner-report/symbols-56.pb +14 -0
- package/.scannerwork/scanner-report/symbols-57.pb +16 -29
- package/.scannerwork/scanner-report/symbols-58.pb +111 -18
- package/.scannerwork/scanner-report/symbols-59.pb +10 -0
- package/.scannerwork/scanner-report/symbols-60.pb +486 -0
- package/.scannerwork/scanner-report/symbols-63.pb +97 -0
- package/.scannerwork/scanner-report/symbols-64.pb +60 -0
- package/.scannerwork/scanner-report/symbols-65.pb +69 -180
- package/.scannerwork/scanner-report/symbols-66.pb +35 -152
- package/.scannerwork/scanner-report/syntax-highlightings-10.pb +949 -0
- package/.scannerwork/scanner-report/syntax-highlightings-12.pb +213 -0
- package/.scannerwork/scanner-report/syntax-highlightings-18.pb +133 -0
- package/.scannerwork/scanner-report/syntax-highlightings-19.pb +57 -149
- package/.scannerwork/scanner-report/syntax-highlightings-2.pb +138 -0
- package/.scannerwork/scanner-report/syntax-highlightings-20.pb +20 -33
- package/.scannerwork/scanner-report/syntax-highlightings-21.pb +91 -621
- package/.scannerwork/scanner-report/syntax-highlightings-22.pb +58 -121
- package/.scannerwork/scanner-report/syntax-highlightings-23.pb +22 -78
- package/.scannerwork/scanner-report/syntax-highlightings-24.pb +33 -856
- package/.scannerwork/scanner-report/syntax-highlightings-25.pb +3731 -31
- package/.scannerwork/scanner-report/syntax-highlightings-27.pb +3738 -48
- package/.scannerwork/scanner-report/syntax-highlightings-3.pb +225 -0
- package/.scannerwork/scanner-report/syntax-highlightings-30.pb +619 -25
- package/.scannerwork/scanner-report/syntax-highlightings-31.pb +3737 -94
- package/.scannerwork/scanner-report/syntax-highlightings-33.pb +74 -194
- package/.scannerwork/scanner-report/syntax-highlightings-34.pb +61 -74
- package/.scannerwork/scanner-report/syntax-highlightings-36.pb +28 -291
- package/.scannerwork/scanner-report/syntax-highlightings-37.pb +99 -103
- package/.scannerwork/scanner-report/syntax-highlightings-38.pb +147 -937
- package/.scannerwork/scanner-report/syntax-highlightings-4.pb +185 -21
- package/.scannerwork/scanner-report/syntax-highlightings-40.pb +222 -3642
- package/.scannerwork/scanner-report/syntax-highlightings-52.pb +845 -91
- package/.scannerwork/scanner-report/syntax-highlightings-53.pb +51 -33
- package/.scannerwork/scanner-report/syntax-highlightings-54.pb +286 -168
- package/.scannerwork/scanner-report/syntax-highlightings-55.pb +99 -3735
- package/.scannerwork/scanner-report/syntax-highlightings-56.pb +54 -0
- package/.scannerwork/scanner-report/syntax-highlightings-57.pb +42 -82
- package/.scannerwork/scanner-report/syntax-highlightings-58.pb +196 -55
- package/.scannerwork/scanner-report/syntax-highlightings-59.pb +32 -3729
- package/.scannerwork/scanner-report/syntax-highlightings-60.pb +659 -0
- package/.scannerwork/scanner-report/syntax-highlightings-61.pb +385 -3503
- package/.scannerwork/scanner-report/syntax-highlightings-63.pb +182 -0
- package/.scannerwork/scanner-report/syntax-highlightings-64.pb +110 -0
- package/.scannerwork/scanner-report/syntax-highlightings-65.pb +67 -187
- package/.scannerwork/scanner-report/syntax-highlightings-66.pb +64 -183
- package/.scannerwork/scanner-report/syntax-highlightings-67.pb +59 -0
- package/.scannerwork/scanner-report/syntax-highlightings-68.pb +48 -0
- package/.scannerwork/scanner-report/syntax-highlightings-69.pb +3545 -445
- package/package.json +5 -5
- package/test-14-results.xml +155 -155
- package/test-16-results.xml +147 -147
- package/test-18-results.xml +158 -158
- package/test-19-results.xml +150 -150
- package/test-iam-18-results.xml +50 -50
- package/.scannerwork/scanner-report/changesets-25.pb +0 -1
- package/.scannerwork/scanner-report/changesets-26.pb +0 -1
- package/.scannerwork/scanner-report/changesets-27.pb +0 -1
- package/.scannerwork/scanner-report/changesets-28.pb +0 -1
- package/.scannerwork/scanner-report/changesets-29.pb +0 -1
- package/.scannerwork/scanner-report/changesets-31.pb +0 -1
- package/.scannerwork/scanner-report/changesets-32.pb +0 -1
- package/.scannerwork/scanner-report/changesets-35.pb +0 -1
- package/.scannerwork/scanner-report/changesets-41.pb +0 -1
- package/.scannerwork/scanner-report/changesets-42.pb +0 -1
- package/.scannerwork/scanner-report/changesets-43.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-6.pb +0 -1
- package/.scannerwork/scanner-report/changesets-69.pb +0 -1
- package/.scannerwork/scanner-report/changesets-7.pb +0 -1
- package/.scannerwork/scanner-report/component-26.pb +0 -1
- package/.scannerwork/scanner-report/component-28.pb +0 -1
- package/.scannerwork/scanner-report/component-29.pb +0 -1
- package/.scannerwork/scanner-report/component-32.pb +0 -1
- package/.scannerwork/scanner-report/component-35.pb +0 -1
- package/.scannerwork/scanner-report/component-41.pb +0 -1
- package/.scannerwork/scanner-report/component-42.pb +0 -1
- package/.scannerwork/scanner-report/component-43.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-6.pb +0 -1
- package/.scannerwork/scanner-report/component-7.pb +0 -1
- package/.scannerwork/scanner-report/coverages-26.pb +0 -0
- package/.scannerwork/scanner-report/coverages-28.pb +0 -0
- package/.scannerwork/scanner-report/coverages-31.pb +0 -0
- package/.scannerwork/scanner-report/coverages-43.pb +0 -0
- package/.scannerwork/scanner-report/coverages-46.pb +0 -0
- package/.scannerwork/scanner-report/coverages-47.pb +0 -0
- package/.scannerwork/scanner-report/coverages-49.pb +0 -0
- package/.scannerwork/scanner-report/coverages-51.pb +0 -0
- package/.scannerwork/scanner-report/coverages-69.pb +0 -0
- package/.scannerwork/scanner-report/coverages-7.pb +0 -0
- package/.scannerwork/scanner-report/duplications-43.pb +0 -2
- package/.scannerwork/scanner-report/duplications-45.pb +0 -2
- package/.scannerwork/scanner-report/duplications-6.pb +0 -0
- package/.scannerwork/scanner-report/duplications-69.pb +0 -0
- package/.scannerwork/scanner-report/duplications-7.pb +0 -0
- package/.scannerwork/scanner-report/measures-26.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-43.pb +0 -0
- package/.scannerwork/scanner-report/measures-46.pb +0 -0
- package/.scannerwork/scanner-report/measures-47.pb +0 -0
- package/.scannerwork/scanner-report/measures-49.pb +0 -0
- package/.scannerwork/scanner-report/measures-5.pb +0 -0
- package/.scannerwork/scanner-report/measures-51.pb +0 -0
- package/.scannerwork/scanner-report/measures-6.pb +0 -0
- package/.scannerwork/scanner-report/measures-7.pb +0 -0
- package/.scannerwork/scanner-report/source-26.txt +0 -63
- package/.scannerwork/scanner-report/source-28.txt +0 -142
- package/.scannerwork/scanner-report/source-29.txt +0 -366
- package/.scannerwork/scanner-report/source-43.txt +0 -92
- package/.scannerwork/scanner-report/source-46.txt +0 -54
- package/.scannerwork/scanner-report/source-47.txt +0 -41
- package/.scannerwork/scanner-report/source-49.txt +0 -129
- package/.scannerwork/scanner-report/source-5.txt +0 -244
- package/.scannerwork/scanner-report/source-51.txt +0 -80
- package/.scannerwork/scanner-report/source-6.txt +0 -68
- package/.scannerwork/scanner-report/source-7.txt +0 -47
- package/.scannerwork/scanner-report/symbols-26.pb +0 -43
- package/.scannerwork/scanner-report/symbols-28.pb +0 -116
- package/.scannerwork/scanner-report/symbols-31.pb +0 -69
- package/.scannerwork/scanner-report/symbols-43.pb +0 -44
- package/.scannerwork/scanner-report/symbols-46.pb +0 -15
- package/.scannerwork/scanner-report/symbols-47.pb +0 -18
- package/.scannerwork/scanner-report/symbols-49.pb +0 -33
- package/.scannerwork/scanner-report/symbols-51.pb +0 -46
- package/.scannerwork/scanner-report/symbols-69.pb +0 -610
- package/.scannerwork/scanner-report/symbols-7.pb +0 -27
- package/.scannerwork/scanner-report/syntax-highlightings-26.pb +0 -82
- package/.scannerwork/scanner-report/syntax-highlightings-28.pb +0 -134
- package/.scannerwork/scanner-report/syntax-highlightings-29.pb +0 -630
- package/.scannerwork/scanner-report/syntax-highlightings-43.pb +0 -90
- package/.scannerwork/scanner-report/syntax-highlightings-46.pb +0 -54
- package/.scannerwork/scanner-report/syntax-highlightings-47.pb +0 -50
- package/.scannerwork/scanner-report/syntax-highlightings-49.pb +0 -129
- package/.scannerwork/scanner-report/syntax-highlightings-5.pb +0 -329
- package/.scannerwork/scanner-report/syntax-highlightings-51.pb +0 -95
- package/.scannerwork/scanner-report/syntax-highlightings-6.pb +0 -110
- package/.scannerwork/scanner-report/syntax-highlightings-7.pb +0 -68
- /package/.scannerwork/scanner-report/{coverages-48.pb → coverages-11.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-42.pb → coverages-13.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-44.pb → coverages-14.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-50.pb → coverages-15.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-41.pb → coverages-16.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-45.pb → coverages-17.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-35.pb → coverages-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-5.pb → coverages-40.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-6.pb → coverages-55.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-29.pb → coverages-61.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-32.pb → coverages-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-27.pb → coverages-67.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-25.pb → coverages-68.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-26.pb → duplications-11.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-27.pb → duplications-12.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-28.pb → duplications-13.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-29.pb → duplications-14.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-31.pb → duplications-15.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-35.pb → duplications-16.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-41.pb → duplications-18.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-42.pb → duplications-2.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-44.pb → duplications-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-5.pb → duplications-40.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-46.pb → duplications-55.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-47.pb → duplications-56.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-48.pb → duplications-59.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-49.pb → duplications-61.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-32.pb → duplications-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-50.pb → duplications-64.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-51.pb → duplications-67.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-7.pb → issues-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-28.pb → issues-37.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-5.pb → issues-40.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-29.pb → issues-61.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-48.pb → measures-11.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-42.pb → measures-13.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-44.pb → measures-14.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-50.pb → measures-15.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-41.pb → measures-16.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-45.pb → measures-17.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-35.pb → measures-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-32.pb → measures-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{source-48.txt → source-11.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-42.txt → source-13.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-44.txt → source-14.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-50.txt → source-15.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-41.txt → source-16.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-45.txt → source-17.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-35.txt → source-39.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-32.txt → source-62.txt} +0 -0
- /package/.scannerwork/scanner-report/{symbols-48.pb → symbols-11.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-42.pb → symbols-13.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-44.pb → symbols-14.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-50.pb → symbols-15.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-41.pb → symbols-16.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-45.pb → symbols-17.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-35.pb → symbols-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-5.pb → symbols-40.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-6.pb → symbols-55.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-29.pb → symbols-61.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-32.pb → symbols-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-27.pb → symbols-67.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-25.pb → symbols-68.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-48.pb → syntax-highlightings-11.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-42.pb → syntax-highlightings-13.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-44.pb → syntax-highlightings-14.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-50.pb → syntax-highlightings-15.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-41.pb → syntax-highlightings-16.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-45.pb → syntax-highlightings-17.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-35.pb → syntax-highlightings-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-32.pb → syntax-highlightings-62.pb} +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// Copyright © 2017 IBM Corp. All rights reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
/* global describe it */
|
|
16
|
+
'use strict';
|
|
17
|
+
|
|
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
|
+
});
|
|
39
|
+
|
|
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
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
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
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
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
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Copyright © 2018, 2021 IBM Corp. All rights reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
/* global describe it */
|
|
16
|
+
'use strict';
|
|
17
|
+
|
|
18
|
+
const fs = require('fs');
|
|
19
|
+
const readline = require('readline');
|
|
20
|
+
const u = require('./citestutils.js');
|
|
21
|
+
const uuid = require('uuid').v4;
|
|
22
|
+
|
|
23
|
+
const params = { useApi: true };
|
|
24
|
+
|
|
25
|
+
describe(u.scenario('Concurrent database backups', params), function() {
|
|
26
|
+
it('should run concurrent API database backups correctly #slower', function(done) {
|
|
27
|
+
// Allow up to 900 s to backup and compare (it should be much faster)!
|
|
28
|
+
u.setTimeout(this, 900);
|
|
29
|
+
|
|
30
|
+
let doneCount = 0;
|
|
31
|
+
let doneErr;
|
|
32
|
+
const finished = function(err) {
|
|
33
|
+
doneCount++;
|
|
34
|
+
if (doneCount === 2) {
|
|
35
|
+
done(doneErr || err);
|
|
36
|
+
}
|
|
37
|
+
doneErr = err;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const checkForEmptyBatches = function(fileName, cb) {
|
|
41
|
+
let foundEmptyBatch = false;
|
|
42
|
+
|
|
43
|
+
const rd = readline.createInterface({
|
|
44
|
+
input: fs.createReadStream(fileName),
|
|
45
|
+
output: fs.createWriteStream('/dev/null'),
|
|
46
|
+
terminal: false
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
rd.on('line', function(line) {
|
|
50
|
+
if (JSON.parse(line).length === 0) {
|
|
51
|
+
// Note: Empty batch arrays indicate that the running backup is
|
|
52
|
+
// incorrectly sharing a log file with another ongoing backup job.
|
|
53
|
+
foundEmptyBatch = true;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
rd.on('close', function() {
|
|
58
|
+
if (foundEmptyBatch) {
|
|
59
|
+
cb(new Error(`Log file '${fileName}' contains empty batches`));
|
|
60
|
+
} else {
|
|
61
|
+
cb();
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// [1] Run 'largedb2g' database backup
|
|
67
|
+
const actualBackup1 = `./${uuid()}`;
|
|
68
|
+
const output1 = fs.createWriteStream(actualBackup1);
|
|
69
|
+
output1.on('open', function() {
|
|
70
|
+
u.testBackup(params, 'largedb2g', output1, function(err) {
|
|
71
|
+
if (err) {
|
|
72
|
+
finished(err);
|
|
73
|
+
} else {
|
|
74
|
+
checkForEmptyBatches(actualBackup1, finished);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// [2] Run 'largedb1g' database backup
|
|
80
|
+
const actualBackup2 = `./${uuid()}`;
|
|
81
|
+
const output2 = fs.createWriteStream(actualBackup2);
|
|
82
|
+
output2.on('open', function() {
|
|
83
|
+
u.testBackup(params, 'largedb1g', output2, function(err) {
|
|
84
|
+
if (err) {
|
|
85
|
+
finished(err);
|
|
86
|
+
} else {
|
|
87
|
+
checkForEmptyBatches(actualBackup2, finished);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright ©
|
|
1
|
+
// Copyright © 2023 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.
|
|
@@ -12,179 +12,89 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
// Small script which backs up a Cloudant or CouchDB database to an S3
|
|
16
|
-
// bucket, using an intermediary file on disk.
|
|
17
|
-
//
|
|
18
|
-
// The script generates the backup object name by combining together the path
|
|
19
|
-
// part of the database URL and the current time.
|
|
20
|
-
|
|
21
15
|
'use strict';
|
|
22
16
|
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
s3url: { nargs: 1, describe: 'S3 endpoint URL' },
|
|
45
|
-
awsprofile: { nargs: 1, describe: 'The profile section to use in the ~/.aws/credentials file', default: 'default' }
|
|
46
|
-
})
|
|
47
|
-
.help('h').alias('h', 'help')
|
|
48
|
-
.epilog('Copyright (C) IBM 2017')
|
|
49
|
-
.argv;
|
|
50
|
-
|
|
51
|
-
const sourceUrl = argv.source;
|
|
52
|
-
const backupBucket = argv.bucket;
|
|
53
|
-
const backupName = new url.URL(sourceUrl).pathname.split('/').filter(function(x) { return x; }).join('-');
|
|
54
|
-
const backupKeyPrefix = `${argv.prefix}-${backupName}`;
|
|
55
|
-
|
|
56
|
-
const backupKey = `${backupKeyPrefix}-${new Date().toISOString()}`;
|
|
57
|
-
const backupTmpFile = tmp.fileSync();
|
|
58
|
-
|
|
59
|
-
const s3Endpoint = argv.s3url;
|
|
60
|
-
const awsProfile = argv.awsprofile;
|
|
61
|
-
|
|
62
|
-
// Creds are from ~/.aws/credentials, environment etc. (see S3 docs).
|
|
63
|
-
const awsOpts = {
|
|
64
|
-
signatureVersion: 'v4',
|
|
65
|
-
credentials: new AWS.SharedIniFileCredentials({ profile: awsProfile })
|
|
66
|
-
};
|
|
67
|
-
if (typeof s3Endpoint !== 'undefined') {
|
|
68
|
-
awsOpts.endpoint = new AWS.Endpoint(s3Endpoint);
|
|
17
|
+
const chunk = require('lodash/chunk');
|
|
18
|
+
const difference = require('lodash/difference');
|
|
19
|
+
const forOwn = require('lodash/forOwn');
|
|
20
|
+
const isEmpty = require('lodash/isEmpty');
|
|
21
|
+
const union = require('lodash/union');
|
|
22
|
+
|
|
23
|
+
const compare = async(database1, database2, client) => {
|
|
24
|
+
// check docs same in both dbs
|
|
25
|
+
const allDocs1 = await getAllDocs(client, database1);
|
|
26
|
+
const allDocs2 = await getAllDocs(client, database2);
|
|
27
|
+
|
|
28
|
+
const onlyInDb1 = (difference(allDocs1, allDocs2));
|
|
29
|
+
const onlyInDb2 = (difference(allDocs2, allDocs1));
|
|
30
|
+
|
|
31
|
+
let databasesSame = isEmpty(onlyInDb1) && isEmpty(onlyInDb2);
|
|
32
|
+
|
|
33
|
+
if (!databasesSame) {
|
|
34
|
+
console.log(onlyInDb1.length + ' documents only in db 1.');
|
|
35
|
+
console.log('Document IDs only in db 1: ' + onlyInDb1);
|
|
36
|
+
console.log(onlyInDb2.length + ' documents only in db 2.');
|
|
37
|
+
console.log('Document IDs only in db 2: ' + onlyInDb2);
|
|
69
38
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
resolve();
|
|
39
|
+
|
|
40
|
+
// check revs same in docs common to both dbs
|
|
41
|
+
const partitionSize = 500;
|
|
42
|
+
const batches = chunk(union(allDocs1, allDocs2), partitionSize);
|
|
43
|
+
|
|
44
|
+
const missingRevsInDb2 = await getMissingRevs(client, database1, database2, batches);
|
|
45
|
+
const missingRevsInDb1 = await getMissingRevs(client, database2, database1, batches);
|
|
46
|
+
|
|
47
|
+
databasesSame = databasesSame && isEmpty(missingRevsInDb1) && isEmpty(missingRevsInDb2);
|
|
48
|
+
|
|
49
|
+
if (!databasesSame) {
|
|
50
|
+
console.log('Missing revs in db 1:' + JSON.stringify(missingRevsInDb1));
|
|
51
|
+
console.log('Missing revs in db 2:' + JSON.stringify(missingRevsInDb2));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return databasesSame;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const getMissingRevs = async(client, databaseName1, databaseName2, batcheses) => {
|
|
58
|
+
const fakeRevisionId = '9999-a';
|
|
59
|
+
|
|
60
|
+
const missing = {};
|
|
61
|
+
|
|
62
|
+
// look in db1 - use a fake revision ID to fetch all leaf revisions
|
|
63
|
+
|
|
64
|
+
for (const batches of batcheses) {
|
|
65
|
+
const documentRevisions = {};
|
|
66
|
+
batches.forEach(id => (documentRevisions[id] = [fakeRevisionId]));
|
|
67
|
+
|
|
68
|
+
const result1 = await client.postRevsDiff({ db: databaseName1, documentRevisions });
|
|
69
|
+
const revsDiffRequestDb2 = {};
|
|
70
|
+
forOwn(result1.result, (v, k) => (revsDiffRequestDb2[k] = v.possible_ancestors));
|
|
71
|
+
// look in db2
|
|
72
|
+
const result2 = await client.postRevsDiff({ db: databaseName2, documentRevisions: revsDiffRequestDb2 });
|
|
73
|
+
forOwn(result2.result, (v, k) => {
|
|
74
|
+
if ('missing' in v) {
|
|
75
|
+
missing[k] = v.missing;
|
|
108
76
|
}
|
|
109
77
|
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
(err) => {
|
|
126
|
-
if (err) {
|
|
127
|
-
return reject(new VError(err, 'CouchBackup process failed'));
|
|
128
|
-
}
|
|
129
|
-
debug('couchbackup to file done; uploading to S3');
|
|
130
|
-
resolve('creating backup file complete');
|
|
131
|
-
}
|
|
132
|
-
);
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Upload a backup file to an S3 bucket.
|
|
138
|
-
*
|
|
139
|
-
* @param {any} s3 Object store client
|
|
140
|
-
* @param {any} backupTmpFilePath Path of backup file to write.
|
|
141
|
-
* @param {any} bucket Object store bucket name
|
|
142
|
-
* @param {any} key Object store key name
|
|
143
|
-
* @returns Promise
|
|
144
|
-
*/
|
|
145
|
-
function uploadNewBackup(s3, backupTmpFilePath, bucket, key) {
|
|
146
|
-
return new Promise((resolve, reject) => {
|
|
147
|
-
debug(`Uploading from ${backupTmpFilePath} to ${bucket}/${key}`);
|
|
148
|
-
|
|
149
|
-
function uploadFromStream(s3, bucket, key) {
|
|
150
|
-
const pass = new stream.PassThrough();
|
|
151
|
-
|
|
152
|
-
const params = {
|
|
153
|
-
Bucket: bucket,
|
|
154
|
-
Key: key,
|
|
155
|
-
Body: pass
|
|
156
|
-
};
|
|
157
|
-
s3.upload(params, function(err, data) {
|
|
158
|
-
debug('S3 upload done');
|
|
159
|
-
if (err) {
|
|
160
|
-
debug(err);
|
|
161
|
-
reject(new VError(err, 'Upload failed'));
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
debug('Upload succeeded');
|
|
165
|
-
debug(data);
|
|
166
|
-
resolve();
|
|
167
|
-
}).httpUploadProgress = (progress) => {
|
|
168
|
-
debug(`S3 upload progress: ${progress}`);
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
return pass;
|
|
78
|
+
}
|
|
79
|
+
return missing;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const getAllDocs = async(client, database) => {
|
|
83
|
+
let allDocIds = [];
|
|
84
|
+
const limit = 2000;
|
|
85
|
+
let startKey = '\u0000';
|
|
86
|
+
do {
|
|
87
|
+
const pageOfDocIds = (await client.postAllDocs({ db: database, startKey, limit })).result.rows.map(r => r.id);
|
|
88
|
+
allDocIds = allDocIds.concat(pageOfDocIds);
|
|
89
|
+
if (pageOfDocIds.length < limit) {
|
|
90
|
+
startKey = null;
|
|
91
|
+
} else {
|
|
92
|
+
startKey = pageOfDocIds[limit - 1] + '\u0000';
|
|
172
93
|
}
|
|
94
|
+
} while (startKey != null);
|
|
95
|
+
return allDocIds;
|
|
96
|
+
};
|
|
173
97
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Remove creds from a URL, e.g., before logging
|
|
182
|
-
*
|
|
183
|
-
* @param {string} url URL to safen
|
|
184
|
-
*/
|
|
185
|
-
function s(originalUrl) {
|
|
186
|
-
const parts = new url.URL(originalUrl);
|
|
187
|
-
return url.format(parts, { auth: false });
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
main();
|
|
98
|
+
module.exports = {
|
|
99
|
+
compare
|
|
100
|
+
};
|