/
release.xml
4749 lines (3795 loc) · 247 KB
/
release.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
68
69
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE doc SYSTEM "doc.dtd">
<doc title="{[project]} Releases" toc-number="n">
<description>The {[project]} Releases detail each version of the software and lists the changes made in each version.</description>
<intro>
<text><backrest/> release numbers consist of two parts, major and minor. A major release <i>may</i> break compatibility with the prior major release, but <proper>v2</proper> releases are fully compatible with <proper>v1</proper> repositories and will accept all <proper>v1</proper> options. Minor releases can include bug fixes and features but do not change the repository format and strive to avoid changing options and naming.
Documentation for the <proper>v1</proper> release can be found <link url="{[backrest-url-base]}/1">here</link>.
The notes for a release may also contain <quote>Additional Notes</quote> but changes in this section are only to documentation or the test suite and have no direct impact the on the <backrest/> codebase.</text>
</intro>
<release-list>
<release date="XXXX-XX-XX" version="2.02dev" title="UNDER DEVELOPMENT">
<release-core-list>
<release-bug-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="james.craig"/>
</release-item-contributor-list>
<p>Fix directory syncs running recursively when only the specified directory should be synced.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="yummyliu"/>
<release-item-ideator id="kukharik.vitaliy"/>
</release-item-contributor-list>
<p>Fix <br-option>archive-copy</br-option> throwing <quote>path not found</quote> error for incr/diff backups.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="kukharik.vitaliy"/>
</release-item-contributor-list>
<p>Fix failure in manifest build when two or more files in <id>PGDATA</id> are linked to the same directory.</p>
</release-item>
<release-item>
<p>Fix delta restore failing when a linked file was missing.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="adams.clinton"/>
</release-item-contributor-list>
<p>Fix rendering of key/value and list options in help.</p>
</release-item>
</release-bug-list>
<release-feature-list>
<release-item>
<p>Add asynchronous, parallel <cmd>archive-get</cmd>. This feature maintains a queue of WAL segments to help reduce latency when <postgres/> requests a WAL segment with <pg-option>restore_command</pg-option>.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Add support for additional <backrest/> configuration files in the directory specified by the <br-option>--config-include-path</br-option> option. Add <br-option>--config-path</br-option> option for overriding the default base path of the <br-option>--config</br-option> and <br-option>--config-include-path</br-option> option.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="sharma.yogesh"/>
</release-item-contributor-list>
<p>Add <br-option>repo-s3-token</br-option> option to allow temporary credentials tokens to be configured. <backrest/> currently has no way to request new credentials so the entire command (e.g. <cmd>backup</cmd>, <cmd>restore</cmd>) must complete before the credentials expire.</p>
</release-item>
</release-feature-list>
<release-improvement-list>
<release-item>
<p>Make backup/restore path sync more efficient. Scanning the entire directory can be very expensive if there are a lot of small tables. The backup manifest contains the path list so use it to perform syncs instead of scanning the backup/restore path. Remove recursive path sync functionality since it is no longer used.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Update the <br-option>archive-push-queue-max</br-option>, <br-option>manifest-save-threshold</br-option>, and <br-option>buffer-size</br-option> options to accept values in <id>KB</id>, <id>MB</id>, <id>GB</id>, <id>TB</id>, or <id>PB</id> where the multiplier is a power of <id>1024</id>.</p>
</release-item>
<release-item>
<p>Show command parameters as well as command options in initial info message.</p>
</release-item>
<release-item>
<p>Rename <br-option>archive-queue-max</br-option> option to <br-option>archive-push-queue-max</br-option> to avoid confusion with the <br-option>archive-get-queue-max</br-option> option. The old option name will continue to be accepted.</p>
</release-item>
</release-improvement-list>
<release-development-list>
<release-item>
<p>Make <path>backup.history</path> sync more efficient. Only the <path>backup.history/[year]</path> directory was being synced, so check if the <path>backup.history</path> is newly created and sync it as well.</p>
</release-item>
<release-item>
<p>Move async forking and more error handling to C. The Perl process was exiting directly when called but that interfered with proper locking for the forked async process. Now Perl returns results to the C process which handles all errors, including signals.</p>
</release-item>
<release-item>
<p>Improved lock implementation written in C. Now only two types of locks can be taken: <id>archive</id> and <id>backup</id>. Most commands use one or the other but the <cmd>stanza-*</cmd> commands acquire both locks. This provides better protection than the old command-based locking scheme.</p>
</release-item>
<release-item>
<p>Storage object improvements. Convert all functions to variadic functions. Enforce read-only storage. Add <code>storageLocalWrite()</code> helper function. Add <code>storageCopy()</code>, <code>storageExists()</code>, <code>storageMove()</code>, <code>storageNewRead()</code>/<code>storageNewWrite()</code>, <code>storagePathCreate()</code>, <code>storagePathRemove()</code>, <code>storagePathSync()</code>, and <code>storageRemove()</code>. Add <code>StorageFileRead</code> and <code>StorageFileWrite</code> objects. Abstract Posix driver code into a separate module. Call <code>storagePathCreate()</code> from the Perl Posix driver.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
<release-item-contributor id="steele.david"/>
</release-item-contributor-list>
<p>Improve <code>String</code> and <code>StringList</code> objects. Add <code>strUpper()</code>, <code>strLower()</code>, <code>strLstExists()</code>, <code>strLstExistsZ()</code>, <code>strChr()</code>, <code>strSub()</code>, <code>strSubN()</code>, and <code>strTrunc()</code>.</p>
</release-item>
<release-item>
<p>Improve <code>Buffer</code> object. Add <code>bufNewC()</code>, <code>bufEq()</code> and <code>bufCat()</code>. Only reallocate buffer when the size has changed.</p>
</release-item>
<release-item>
<p>Add <code>pgControlInfo()</code> to read <file>pg_control</file> and determine the <postgres/> version.</p>
</release-item>
<release-item>
<p>Add <code>walSegmentNext()</code> and <code>walSegmentRange()</code>.</p>
</release-item>
<release-item>
<p>Error handling improvments. Add <code>THROWP_</code>* macro variants for error handling. These macros allow an <code>ErrorType</code> pointer to be passed and are required for functions that may return different errors based on a parameter. Add <code>_FMT</code> variants for all <code>THROW</code> macros so format types are checked by the compiler.</p>
</release-item>
<release-item>
<p>Split <code>cfgLoad()</code> into multiple functions to make testing easier. Mainly this helps with unit tests that need to do log expect testing.</p>
</release-item>
<release-item>
<p>Allow <code>MemContext</code> objects to be copied to a new parent. This makes it easier to create objects and then copy them to another context when they are complete without having to worry about freeing them on error. Update <code>List</code>, <code>StringList</code>, and <code>Buffer</code> to allow moves. Update <code>Ini</code> and <code>Storage</code> to take advantage of moves.</p>
</release-item>
<release-item>
<p>Full branch coverage in C code.</p>
</release-item>
<release-item>
<p>Refactor <id>usec</id> to <id>msec</id> in <code>common/time.c</code>. The implementation provides <id>usec</id> resolution but this is not needed in practice and it makes the interface more complicated due to the extra zeros.</p>
</release-item>
<release-item>
<p>Replace <code>THROW_ON_SYS_ERROR()</code> with <code>THROW_SYS_ERROR()</code>. The former macro was hiding missing branch coverage for critical error handling.</p>
</release-item>
<release-item>
<p>Start work on C handle io object and use it to output help.</p>
</release-item>
<release-item>
<p>Don't copy <id>CFGDEF_NAME_ALT</id> or <id>CFGDEF_INHERIT</id> when processing config option inheritance.</p>
</release-item>
<release-item>
<p>Split debug and assert code into separate headers. Assert can be used earlier because it only depends on the error-handler and not logging. Add <code>ASSERT()</code> that is preserved in production builds.</p>
</release-item>
<release-item>
<p>Cleanup C types. Remove <code>typec.h</code>. Order all typdefs above local includes.</p>
</release-item>
<release-item>
<p>Fix header exclusion defines that do not match the general pattern.</p>
</release-item>
</release-development-list>
</release-core-list>
<release-doc-list>
<release-bug-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="tabara.viorel"/>
</release-item-contributor-list>
<p>Update docs with 32-bit support and caveats. 32-bit support was added in <proper>v1.26</proper>.</p>
</release-item>
</release-bug-list>
<release-improvement-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="frost.stephen"/>
<release-item-ideator id="faherty.brian"/>
</release-item-contributor-list>
<p>Add monitoring examples using <postgres/> and <proper>jq</proper>.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="courtois.christophe"/>
</release-item-contributor-list>
<p>Add example of command section usage to archiving configuration.</p>
</release-item>
<release-item>
<p>Remove documentation describing <code>info --output=json</code> as experimental.</p>
</release-item>
<release-item>
<p>Update out-of-date description for the <br-option>spool-path</br-option> option.</p>
</release-item>
</release-improvement-list>
<release-development-list>
<release-item>
<p>Add logic to find the real oid of the <id>test1</id> database during restore testing.</p>
</release-item>
<release-item>
<p>Document build improvements. Perform <code>apt-get update</code> to ensure packages are up to date before installing. Add <id>-p</id> to the repository <file>mkdir</file> so it won't fail if the directory already exists, handy for testing packages.</p>
</release-item>
</release-development-list>
</release-doc-list>
<release-test-list>
<release-feature-list>
<release-item>
<p>Use <proper>lcov</proper> for C unit test coverage reporting. Switch from <proper>Devel::Cover</proper> because it would not report on branch coverage for reports converted from <proper>gcov</proper>. Incomplete branch coverage for a module now generates an error. Coverage of unit tests is not displayed in the report unless they are incomplete for either statement or branch coverage.</p>
</release-item>
</release-feature-list>
<release-development-list>
<release-item>
<p>Move test definitions to <file>test/define.yaml</file>. The location is better because it is no longer buried in the Perl test libs. Also, the data can be easily accessed from C.</p>
</release-item>
<release-item>
<p>Move help/version integration tests to <id>mock/all</id>. Help and version are covered by unit tests, so we really just to need to make sure there is output when called from the command line.</p>
</release-item>
<release-item>
<p>Move <id>archive-stop</id> and <id>expire</id> tests to the <id>mock</id> module. These are mock integration tests so they should be grouped with the other mock integration tests.</p>
</release-item>
<release-item>
<p>Add <code>harnessCfgLoad()</code> test function, which allows a new config to be loaded for unit testing without resetting log functions, opening a log file, or taking locks.</p>
</release-item>
<release-item>
<p>Add <code>TEST_ERROR_FMT</code> macro to simplify testing of formatted error messages.</p>
</release-item>
<release-item>
<p>Generate code counts for all source files. The source files are also classified by type and purpose.</p>
</release-item>
<release-item>
<p>Include VM type in <id>gcov</id> path to avoid conflicts between VMs with different architectures.</p>
</release-item>
<release-item>
<p>Improve logic for smart builds to include version changes. Skip version checks when testing in <setting>--dev</setting> mode.</p>
</release-item>
<release-item>
<p>Use <proper>pip 9.03</proper> in test VMs. <proper>pip 10</proper> drops support for <proper>Python 2.6</proper> which is still used by the older test VMs.</p>
</release-item>
<release-item>
<p>Allow <code>-DDEBUG_UNIT</code> to be suppressed to test how debug macros behave.</p>
</release-item>
<release-item>
<p>Rename Perl tests so they don't conflict with their C counterparts.</p>
</release-item>
<release-item>
<p>Divide tests into three types (<id>unit</id>, <id>integration</id>, <id>performance</id>). Many options that were set per test can instead be inferred from the types, i.e. <id>container</id>, <id>c</id>, <id>expect</id>, and <id>individual</id>.</p>
</release-item>
<release-item>
<p>Try tweaking time sync settings to prevent clock drift rather than restarting <id>VBoxService</id> on every test run.</p>
</release-item>
</release-development-list>
</release-test-list>
</release>
<release date="2018-03-19" version="2.01" title="Minor Bug Fixes and Improvements">
<release-core-list>
<release-bug-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="nicholson.brad"/>
</release-item-contributor-list>
<p>Fix <br-option>--target-action</br-option> and <br-option>--recovery-option</br-option> options being reported as invalid when restoring with <br-option>--type=immediate</br-option>.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="nicholson.brad"/>
</release-item-contributor-list>
<p>Immediately error when a secure option (e.g. <br-option>repo1-s3-key</br-option>) is passed on the command line. Since <backrest/> would not pass secure options on to sub-processes an obscure error was thrown. The new error is much clearer and provides hints about how to fix the problem. Update command documentation to omit secure options that cannot be specified on the command-line.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="kokdemir.ibrahim.edib"/>
</release-item-contributor-list>
<p>Fix issue passing <br-option>--no-config</br-option> to embedded Perl.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="adams.clinton"/>
</release-item-contributor-list>
<p>Fix issue where specifying <br-setting>log-level-stderr</br-setting> > <id>warn</id> would cause a <cmd>local</cmd>/<cmd>remote</cmd> process to error on exit due to output found on stderr when none was expected. The max value for a <cmd>local</cmd>/<cmd>remote</cmd> process is now <id>error</id> since there is no reason for these processes to emit warnings.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="flatley.thomas"/>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Fix manifest test in the <cmd>check</cmd> command when tablespaces are present.</p>
</release-item>
</release-bug-list>
<release-improvement-list>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Error when multiple arguments are set in the config file for an option that does not accept multiple arguments.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="vondendriesch.adrian"/>
</release-item-contributor-list>
<p>Remove extraneous sudo commands from <file>src/Makefile</file>.</p>
</release-item>
</release-improvement-list>
<release-development-list>
<release-item>
<p>Improve Perl configuration. Set config before <code>Main::main()</code> call to avoid secrets being exposed in a stack trace. Move logic for setting defaults to C.</p>
</release-item>
<release-item>
<p>Improve logging. Move command begin to C except when it must be called after another command in Perl (e.g. <cmd>expire</cmd> after <cmd>backup</cmd>). Command begin logs correctly for complex data types like hash and list. Specify which commands will log to file immediately and set the default log level for log messages that are common to all commands. File logging is initiated from C.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Port most of <code>Config::Config::configLoad()</code> from Perl to C.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="hunley.douglas"/>
</release-item-contributor-list>
<p>Fix incorrect enum types in <file>config.c</file> that throw warnings under clang.</p>
</release-item>
<release-item>
<p>Enable <id>-Wswitch-enum</id>, <id>-Wconversion</id>, <id>-Wformat=2</id>, <id>-Wformat-nonliteral</id>, and <id>-Wformat-signedness</id> and silence new warnings.</p>
</release-item>
<release-item>
<p>Improve code documentation in <code>config</code> module.</p>
</release-item>
<release-item>
<p>Improve debugging. Add <code>ASSERT_DEBUG()</code> macro for debugging and replace all current <code>assert()</code> calls except in tests that can't use the debug code. Replace remaining NDEBUG blocks with the more granular DEBUG_UNIT. Remove some debug <code>memset()</code> calls in <code>MemContext</code> since valgrind is more useful for these checks.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Add <code>cfgOptionTest()</code> and update <code>cfgOption()</code> calls that are better implemented as <code>cfgOptionTest()</code>.</p>
</release-item>
<release-item>
<p>Build with <id>-DNDEBUG</id> by default but disable for testing.</p>
</release-item>
<release-item>
<p>Check <code>int</code> size in <code>common/type.h</code>. This ensures that integers are at least 32-bits without having to run the test suite.</p>
</release-item>
<release-item>
<p>Improve conversion of C exceptions to <code>Exception</code> objects. Colons in the message would prevent all of the message from being loaded into the <code>Exception</code> object.</p>
</release-item>
</release-development-list>
</release-core-list>
<release-doc-list>
<release-improvement-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="frost.stephen"/>
</release-item-contributor-list>
<p>Show index in examples for indexed options, i.e. <id>repo-*</id>, <id>pg-*</id>.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="frost.stephen"/>
</release-item-contributor-list>
<p>Simplify table of contents on command page by only listing commands.</p>
</release-item>
<release-item>
<p>Remove references to the C library being optional.</p>
</release-item>
</release-improvement-list>
</release-doc-list>
<release-test-list>
<release-feature-list>
<release-item>
<p>Add CentOS/RHEL package builds.</p>
</release-item>
<release-item>
<p>Use clang for static code analysis. Nothing found initially except for some functions that should have been marked <code>__noreturn__</code>.</p>
</release-item>
</release-feature-list>
<release-development-list>
<release-item>
<p>Buld performance improvements. Improve bin and libc build performance. Improve code generation performance.</p>
</release-item>
<release-item>
<p>Config test code writes secure options to a file instead of passing on the command-line.</p>
</release-item>
<release-item>
<p>Disable console display of coverage for C files since <code>Devel::Cover</code> does not handle it well.</p>
</release-item>
<release-item>
<p>Add new test for <code>Common::Io::Process</code> to show that output on stderr will raise an exception on <code>close()</code> even if the exit code is 0.</p>
</release-item>
<release-item>
<p>Update <file>pip</file> before installing <file>awscli</file>.</p>
</release-item>
<release-item>
<p>Remove <setting>--smart</setting> from <setting>--expect</setting> tests. This ensures that new binaries are built before running the tests.</p>
</release-item>
<release-item>
<p>Remove Debian package patch now that it has been merged upstream.</p>
</release-item>
</release-development-list>
</release-test-list>
</release>
<release date="2018-02-23" version="2.00" title="Performance Improvements for Archive Push">
<release-core-list>
<release-feature-list>
<release-item>
<release-item-contributor-list>
<release-item-reviewer id="shang.cynthia"/>
</release-item-contributor-list>
<p>The <cmd>archive-push</cmd> command is now partially coded in C which allows the <postgres/> <file>archive_command</file> to run significantly faster when processing status messages from the asynchronous archive process.</p>
</release-item>
</release-feature-list>
<release-improvement-list>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Improve <cmd>check</cmd> command to verify that the backup manifest can be built.</p>
</release-item>
<release-item>
<p>Improve performance of HTTPS client. Buffering now takes the <code>pending</code> bytes on the socket into account (when present) rather than relying entirely on <code>select()</code>. In some instances the final bytes would not be flushed until the connection was closed.</p>
</release-item>
<release-item>
<p>Improve S3 delete performance. The constant <id>S3_BATCH_MAX</id> had been replaced with a hard-coded value of 2, probably during testing.</p>
</release-item>
<release-item>
<p>Allow any non-command-line option to be reset to default on the command-line. This allows options in <file>pgbackrest.conf</file> to be reset to default which reduces the need to write new configuration files for specific needs.</p>
</release-item>
<release-item>
<p>The C library is now required. This eliminates conditional loading and eases development of new library features.</p>
</release-item>
<release-item>
<p>The <file>{[project-exe]}</file> executable is now a C binary instead of Perl. This allows certain time-critical commands (like async <cmd>archive-push</cmd>) to run more quickly.</p>
</release-item>
<release-item>
<p>Rename <id>db-*</id> options to <id>pg-*</id> and <id>backup-*</id> options to <id>repo-*</id> to improve consistency. <id>repo-*</id> options are now indexed although currently only one is allowed.</p>
</release-item>
</release-improvement-list>
<release-development-list>
<release-item>
<p>Implement <cmd>help</cmd> command in C.</p>
</release-item>
<release-item>
<p>Implement <cmd>version</cmd> command in C.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-reviewer id="shang.cynthia"/>
</release-item-contributor-list>
<p>Config parsing implemented in C and passed to Perl as JSON.</p>
</release-item>
<release-item>
<p>Add <code>Buffer</code>, <code>Ini</code>, <code>KeyValue</code>, <code>List</code>, <code>RegExp</code>, <code>Storage</code>, <code>String</code>, <code>StringList</code>, <code>Variant</code>, <code>VariantList</code>, and <code>Wait</code> objects.</p>
</release-item>
<release-item>
<p>Add <code>command</code>, <code>exit</code>, <code>log</code>, and <code>time</code> modules.</p>
</release-item>
<release-item>
<p>Remove deprecated <br-option>archive-max-mb</br-option> option.</p>
</release-item>
<release-item>
<p>Improve <code>MemContext</code> module. Add temporary context blocks and refactor allocation arrays to include allocation size.</p>
</release-item>
<release-item>
<p>Improve <code>error</code> module. Add functions to convert error codes to C errors and handle system errors.</p>
</release-item>
<release-item>
<p>Create a master list of errors in <file>build/error.yaml</file>. The C and Perl errors lists are created automatically by <code>Build.pm</code> so they stay up to date.</p>
</release-item>
<release-item>
<p>Move lock release later in exitSafe() to reduce the chance of a new process starting and acquiring a lock before the old process has exited.</p>
</release-item>
<release-item>
<p>Add 30 second wait loop to lockAcquire() when fail on no lock enabled. This should help prevent processes that are shutting down from interfering with processes that are starting up.</p>
</release-item>
<release-item>
<p>Replace <code>cfgCommandTotal()</code>/<code>cfgOptionTotal()</code> functions with constants. The constants are applicable in more cases and allow the compiler to optimize certain loops more efficiently.</p>
</release-item>
<release-item>
<p>Cleanup usage of internal options. Apply internal to options that need to be read to determine locality but should not appear in the help.</p>
</release-item>
<release-item>
<p>Refactor code to make valgrind happy.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="shang.cynthia"/>
</release-item-contributor-list>
<p>Fix non-compliant formatting for function declarations.</p>
</release-item>
</release-development-list>
</release-core-list>
<release-doc-list>
<release-feature-list>
<release-item>
<p>All clusters in the documentation are initialized with checksums.</p>
</release-item>
</release-feature-list>
<release-improvement-list>
<release-item>
<p>List deprecated option names in documentation and command-line help.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="youatt.david"/>
</release-item-contributor-list>
<p>Clarify that S3 buckets must be created by the user.</p>
</release-item>
</release-improvement-list>
<release-development-list>
<release-item>
<p>Add coding standards document.</p>
</release-item>
<release-item>
<p>Improve section source feature to not require a title or content. The title will be pulled from the source document.</p>
</release-item>
<release-item>
<p>Allow code blocks to have a type. Currently this is only rendered in Markdown.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Add table render for Markdown format.</p>
</release-item>
<release-item>
<p>PDF rendering improvements. Check both <path>doc-path</path> and <path>bin-path</path> for logo. Allow PDF to be output to a location other than the <path>output</path> directory. Use PDF-specific version variable for more flexible formatting. Allow sections to be excluded from table of contents. More flexible replacements for titles and footers. Fill is now the default for table columns. Column width is specified as a percentage rather that using latex-specific notation. Fix missing variable replace for <code>code-block</code> title.</p>
</release-item>
<release-item>
<p>Add <id>id</id> param for hosts created with <code>host-add</code>. The <id>host-*-ip</id> variable is created from the <id>id</id> param so the <id>name</id> param can be changed without affecting the <id>host-*-ip</id> variable. If <id>id</id> is not specified then it is copied from <id>name</id>.</p>
</release-item>
<release-item>
<p>Deploy historical documentation to <path>prior</path> rather than the root directory.</p>
</release-item>
</release-development-list>
</release-doc-list>
<release-test-list>
<release-development-list>
<release-item>
<p>Run valgrind on all C unit tests.</p>
</release-item>
<release-item>
<p>Only build C binary/library for Perl unit/integration tests or C unit tests that require Perl.</p>
</release-item>
<release-item>
<p>Improve speed of C unit tests. Preserve object files between tests and use a Makefile to avoid rebuilding object files.</p>
</release-item>
<release-item>
<p>Report coverage errors via the console. This helps with debugging coverage issues on remote services like Travis.</p>
</release-item>
<release-item>
<p>No longer run <id>master</id> branch through CI. The <id>integration</id> branch will be run through CI and then pushed to <id>master</id> with github status checks.</p>
</release-item>
<release-item>
<p>Rename Perl tests so they don't conflict with their C counterparts.</p>
</release-item>
<release-item>
<p>Update URL for Debian package repository.</p>
</release-item>
</release-development-list>
</release-test-list>
</release>
<release date="2018-02-01" version="1.28" title="Stanza Delete">
<release-core-list>
<release-bug-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="ravilla.chiranjeevi"/>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Fixed inability to restore a single database contained in a tablespace using --db-include.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="sumner.adam.k"/>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Ensure latest <id>db-id</id> is selected on when matching <file>archive.info</file> to <file>backup.info</file>. This provides correct matching in the event there are <id>system-id</id> and <id>db-version</id> duplicates (e.g. after reverting a <id>pg_upgrade</id>).</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="odonnell.jason"/>
<release-item-contributor id="steele.david"/>
</release-item-contributor-list>
<p>Fixed overly chatty error message when reporting an invalid command.</p>
</release-item>
</release-bug-list>
<release-feature-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="hagander.magnus"/>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Add <cmd>stanza-delete</cmd> command to cleanup unused stanzas.</p>
</release-item>
</release-feature-list>
<release-improvement-list>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Improve <cmd>stanza-create</cmd> command so that it does not error when the stanza already exists.</p>
</release-item>
</release-improvement-list>
<release-development-list>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Minor changes to <code>Manifest</code> module, mostly for test reproducibility.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="shang.cynthia"/>
</release-item-contributor-list>
<p>Fix non-compliant formatting for function declarations.</p>
</release-item>
</release-development-list>
</release-core-list>
<release-doc-list>
<release-improvement-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="odonnell.jason"/>
</release-item-contributor-list>
<p>Update <cmd>stanza-create --force</cmd> documentation to urge caution when using.</p>
</release-item>
</release-improvement-list>
</release-doc-list>
<release-test-list>
<release-development-list>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Add unit tests for the <code>Manifest</code> module.</p>
</release-item>
</release-development-list>
</release-test-list>
</release>
<release date="2017-12-19" version="1.27" title="Bug Fixes and Documentation">
<release-core-list>
<release-bug-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="lardiere.sebastien"/>
</release-item-contributor-list>
<p>Fixed an issue that suppressed locality errors for <cmd>backup</cmd> and <cmd>restore</cmd>. When a backup host is present, backups should only be allowed on the backup host and restores should only be allowed on the database host unless an alternate configuration is created that ignores the remote host.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="brusselback.adam"/>
</release-item-contributor-list>
<p>Fixed an issue where WAL was not expired on <postgres/> 10. This was caused by a faulty regex that expected all <postgres/> major versions to be X.X.</p>
</release-item>
<release-item>
<p>Fixed an issue where the <br-option>--no-config</br-option> option was not passed to child processes. This meant the child processes would still read the local config file and possibly cause unexpected behaviors.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="frost.stephen"/>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Fixed <cmd>info</cmd> command to eliminate <code>"db (prior)"</code> output if no backups or archives exist for a prior version of the cluster.</p>
</release-item>
</release-bug-list>
<release-development-list>
<release-item>
<p>Add <code>memGrowRaw()</code> to memory context module.</p>
</release-item>
</release-development-list>
</release-core-list>
<release-doc-list>
<release-feature-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="nullmeier.markus"/>
</release-item-contributor-list>
<p>Document the relationship between the <br-option>archive-copy</br-option> and <br-option>archive-check</br-option> options.</p>
</release-item>
<release-item>
<p>Improve <br-option>archive-copy</br-option> reference documentation.</p>
</release-item>
</release-feature-list>
<release-development-list>
<release-item>
<p>Relax permissions set by <file>release.pl</file>.</p>
</release-item>
<release-item>
<p>Split <quote>refactor</quote> sections into <quote>improvements</quote> and <quote>development</quote> in the release notes. Many development notes are not relevant to users and simply clutter the release notes, so they are no longer shown on the website.</p>
</release-item>
<release-item>
<p>Allow internal options that do not show up in the documentation. Used for test options initially but other use cases are on the horizon.</p>
</release-item>
</release-development-list>
</release-doc-list>
<release-test-list>
<release-development-list>
<release-item>
<p>Update CI branches to <path>release/1</path> and <path>release/1-integration</path>.</p>
</release-item>
<release-item>
<p>No longer run <id>release/1</id> branch through CI. The <id>release/1-integration</id> branch will be run through CI and then pushed to <id>release/1</id> with github status checks.</p>
</release-item>
<release-item>
<p>Move restore test infrastructure to <code>HostBackup.pm</code>. Required to test restores on the backup server, a fairly common scenario. Improve the restore function to accept optional parameters rather than a long list of parameters. In passing, clean up extraneous use of <code>strType</code> and <code>strComment</code> variables.</p>
</release-item>
<release-item>
<p>Sync time to prevent build failures when running on VirtualBox.</p>
</release-item>
</release-development-list>
</release-test-list>
</release>
<release date="2017-11-21" version="1.26" title="Repository Encryption">
<release-core-list>
<release-bug-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="james.craig"/>
</release-item-contributor-list>
<p>Fixed an issue that could cause copying large manifests to fail during restore.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="wilson.javier"/>
</release-item-contributor-list>
<p>Fixed incorrect WAL offset for 32-bit architectures.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="adams.clinton"/>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Fixed an issue retrieving WAL for old database versions. After a <cmd>stanza-upgrade</cmd> it should still be possible to restore backups from the previous version and perform recovery with <cmd>archive-get</cmd>. However, archive-get only checked the most recent db version/id and failed. Also clean up some issues when the same db version/id appears multiple times in the history.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="mccormick.jeff"/>
</release-item-contributor-list>
<p>Fixed an issue with invalid backup groups being set correctly on restore. If the backup cannot map a group to a name it stores the group in the manifest as <id>false</id> then uses either the owner of $PGDATA to set the group during restore or failing that the group of the current user. This logic was not working correctly because the selected group was overwriting the user on restore leaving the group undefined and the user incorrectly set to the group.</p>
</release-item>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="uspen"/>
</release-item-contributor-list>
<p>Fixed an issue passing parameters to remotes. When more than one db was specified the path, port, and socket path would for db1 were passed no matter which db was actually being addressed.</p>
</release-item>
</release-bug-list>
<release-feature-list>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
<release-item-contributor id="steele.david"/>
</release-item-contributor-list>
<p>Repository encryption support.</p>
</release-item>
</release-feature-list>
<release-improvement-list>
<release-item>
<p>Disable gzip filter when <br-option>--compress-level-network=0</br-option>. The filter was used with compress level set to 0 which added overhead without any benefit.</p>
</release-item>
<release-item>
<p>Inflate performance improvement for gzip filter.</p>
</release-item>
</release-improvement-list>
<release-development-list>
<release-item>
<p>Refactor protocol param generation into a new function. This allows the code to be tested more precisely and doesn't require executing a remote process.</p>
</release-item>
<release-item>
<p>Add <id>list</id> type for options. The <id>hash</id> type was being used for lists with an additional flag (`value-hash`) to indicate that it was not really a hash.</p>
</release-item>
<release-item>
<p>Remove configurable option hints. <br-option>db-path</br-option> was the only option with a hint so the feature seemed wasteful. All missing stanza options now output the same hint without needing configuration.</p>
</release-item>
<release-item>
<p>Convert configuration definitions from auto-generated functions to auto-generated data structures.</p>
</release-item>
<release-item>
<p>Add <id>eof</id> to S3 file driver (required for encryption support).</p>
</release-item>
<release-item>
<p>Enable additional warnings for C builds.</p>
</release-item>
<release-item>
<p>Simplify try..catch..finally names. Also wrap in a do...while loop to make sure that no random else is attached to the main if block.</p>
</release-item>
<release-item>
<p>Improve base64 implementation. Different encoded strings could be generated based on compiler optimizations. Even though decoding was still successful the encoded strings did not match the standard.</p>
</release-item>
<release-item>
<p>Disable <id>-Wclobber</id> compiler warning because it is mostly useless but keep the rest of of <id>-Wextra</id>.</p>
</release-item>
</release-development-list>
</release-core-list>
<release-doc-list>
<release-feature-list>
<release-item>
<release-item-contributor-list>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>
<p>Add template to improve initial information gathered for issue submissions.</p>
</release-item>
</release-feature-list>
<release-improvement-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="fiske.keith"/>
<release-item-contributor id="shang.cynthia"/>
</release-item-contributor-list>