forked from openstack/swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG
2704 lines (1774 loc) · 104 KB
/
CHANGELOG
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
swift (2.18.0)
* Added container sharding, an operator controlled feature that
may be used to shard very large container databases into a
number of smaller shard containers. This mitigates the issues
with one large DB by distributing the data across multiple
smaller databases throughout the cluster. Please read the full
overview at
https://docs.openstack.org/swift/latest/overview_container_sharding.html
* Provide an S3 API compatibility layer. The external "swift3"
project has been imported into Swift's codebase as the "s3api"
middleware.
* Added "emergency mode" hooks in the account and container replicators.
These options may be used to prioritize moving handoff
partitions to primary locations more quickly. This helps when
adding capacity to a ring.
- Added `-d <devs>` and `-p <partitions>` command line options.
- Added a handoffs-only mode.
* Add a multiprocess mode to the object replicator. Setting the
"replicator_workers" setting to a positive value N will result
in the replicator using up to N worker processes to perform
replication tasks. At most one worker per disk will be spawned.
Worker process logs will have a bit of information prepended so
operators can tell which messages came from which worker. The
prefix is "[worker M/N pid=P] ", where M is the worker's index,
N is the total number of workers, and P is the process ID. Every
message from the replicator's logger will have the prefix
* The object reconstructor will now fork all available worker
processes when operating on a subset of local devices.
* Add support for PROXY protocol v1 to the proxy server. This
allows the Swift proxy server to log accurate client IP
addresses when there is a proxy or SSL-terminator between the
client and the Swift proxy server. Example servers supporting
this PROXY protocol include stunnel, haproxy, hitch, and
varnish. See the sample proxy server config file for the
appropriate config setting to enable or disable this
functionality.
* In the ratelimit middleware, account whitelist and blacklist
settings have been deprecated and may be removed in a future
release. When found, a deprecation message will be logged.
Instead of these config file values, set X-Account-Sysmeta-
Global-Write-Ratelimit:WHITELIST and X-Account-Sysmeta-Global-
Write-Ratelimit:BLACKLIST on the particular accounts that need
to be whitelisted or blacklisted. System metadata cannot be added
or modified by standard clients. Use the internal client to set sysmeta.
* Add a --drop-prefixes flag to swift-account-info,
swift-container-info, and swift-object-info. This makes the
output between the three more consistent.
* statsd error messages correspond to 5xx responses only. This
makes monitoring more useful because actual errors (5xx) will
not be hidden by common user requests (4xx). Previously, some 4xx
responses would be included in timing information in the statsd
error messages.
* Truncate error logs to prevent log handler from running out of buffer.
* Updated requirements.txt to match global exclusions and formatting.
* tempauth user names now support unicode characters.
* Various other minor bug fixes and improvements.
swift (2.17.0, OpenStack Queens)
* Added symlink objects support.
Symlink objects reference one other object. They are created by
creating an empty object with an X-Symlink-Target header. The value of
the header is of the format <container>/<object>, and the target does
not need to exist at the time of symlink creation. Cross-account
symlinks can be created by including the
X-Symlink-Target-Account header.
GET and HEAD requests to a symlink will operate on the
referenced object and require appropriate permission in the
target container. DELETE and PUT requests will operate on the
symlink object itself. POST requests are not forwarded to the
referenced object. POST requests sent to a symlink will result
in a 307 Temporary Redirect response.
* Added support for inline data segments in SLO manifests.
Upgrade impact: during a rolling upgrade, an updated proxy server
may write a manifest that an out-of-date proxy server will not be
able to read. This will resolve itself once the upgrade completes
on all nodes.
* The tempurl digest algorithm is now configurable, and Swift added
support for both SHA-256 and SHA-512. Supported tempurl digests
are exposed to clients in `/info`. Additionally, tempurl signatures
can now be base64 encoded.
* Object expiry improvements
- Disallow X-Delete-At header values equal to the X-Timestamp header.
- X-Delete-At computation now uses X-Timestamp instead of
system time. This prevents clock skew causing inconsistent
expiry data.
- Deleting an expiring object will now cause less work in the system.
The number of async pending files written has been reduced for all
objects and greatly reduced for erasure-coded objects. This
dramatically reduces the burden on container servers.
- Stopped logging tracebacks when receiving an unexpected response.
- Allow the expirer to gracefully move past updating stale work items.
* When the object auditor examines an object, it will now add any
missing metadata checksums.
* `swift-ring-builder` improvements
- Save the ring when dispersion improves, even if balance
doesn't improve.
- Improved the granularity of the ring dispersion metric so that
small improvements after a rebalance can show changes in the
dispersion number. Dispersion in existing and new rings can be
recalculated using the new '--recalculate' option to
`swift-ring-builder`.
- Display more info on empty rings.
* Fixed rare socket leak on range requests to erasure-coded objects.
* The number of container updates on object PUTs (ie to update listings)
has been recomputed to be far more efficient while maintaining
durability guarantees. Specifically, object PUTs to erasure-coded
policies will now normally result in far fewer container updates.
* Moved Zuul v3 tox jobs into the Swift code repo.
* Changed where liberasurecode-devel for CentOS 7 is referenced and
installed as a dependency.
* Added container/object listing with prefix to InternalClient.
* Added '--swift-versions' to `swift-recon` CLI to compare installed
versions in the cluster.
* Stop logging tracebacks in the `object-replicator` when it runs
out of handoff locations.
* Send ETag header in 206 Partial Content responses to SLO reads.
* Now `swift-recon-cron` works with conf.d configs.
* Improved `object-updater` stats logging. It now tells you all of
its stats (successes, failures, quarantines due to bad pickles,
unlinks, and errors), and it tells you incremental progress every
five minutes. The logging at the end of a pass remains and has
been expanded to also include all stats.
* If a proxy server is configured to autocreate accounts and the
account create fails, it will now return a server error (500)
instead of Not Found (404).
* Fractional replicas are no longer allowed for erasure code policies.
* Various other minor bug fixes and improvements.
swift (2.16.0)
* Add checksum to object extended attributes.
* Let clients request heartbeats during SLO PUTs by including
the query parameter `heartbeat=on`.
With heartbeating turned on, the proxy will start its response
immediately with 202 Accepted then send a single whitespace
character periodically until the request completes. At that
point, a final summary chunk will be sent which includes a
"Response Status" key indicating success or failure and (if
successful) an "Etag" key indicating the Etag of the resulting
SLO.
* Added support for retrieving the encryption root secret from an
external key management system. In practice, this is currently limited
to Barbican.
* Move listing formatting out to a new proxy middleware named
`listing_formats`. `listing_formats` should be just right of the
first proxy-logging middleware, and left of most other
middlewares. If it is not already present, it will be
automatically inserted for you.
Note: if you have a custom middleware that makes account or
container listings, it will only receive listings in JSON format.
* Log deprecation warning for `allow_versions` in the container
server config. Configure the `versioned_writes` middleware in
the proxy server instead. This option will be ignored in a
future release.
* Replaced `replication_one_per_device` by custom count defined by
`replication_concurrency_per_device`. The original config value
is deprecated, but continues to function for now. If both values
are defined, the old `replication_one_per_device` is ignored.
* Fixed a rare issue where multiple backend timeouts could result
in bad data being returned to the client.
* Cleaned up logged tracebacks when talking to memcached servers.
* Account and container replication stats logs now include
`remote_merges`, the number of times a whole database was sent
to another node.
* Respond 400 Bad Request when Accept headers fail to parse
instead of returning 406 Not Acceptable.
* The `domain_remap` middleware now supports the
`mangle_client_paths` option. Its default "false" value changes
`domain_remap` parsing to stop stripping the `path_root` value
from URL paths. If users depend on this path mangling, operators
should set `mangle_client_paths` to "True" before upgrading.
* Remove `swift-temp-url` script. The functionality has been in
swiftclient for a long time and this script has been deprecated
since 2.10.0.
* Removed all `post_as_copy` related code and configs. The option
has been deprecated since 2.13.0.
* Fixed XML responses (eg on bulk extractions and SLO upload
failures) to be more correct. The enclosing "delete" tag was
removed where it doesn't make sense and replaced with "extract"
or "upload" depending on the context.
* Static Large Object (SLO) manifest may now (again) have zero-byte
last segments.
* Fixed an issue where background consistency daemon child
processes would deadlock waiting on the same file descriptor.
* Removed a race condition where a POST to an SLO could modify the
X-Static-Large-Object metadata.
* Accept a trade off of dispersion for balance in the ring builder
that will result in getting to balanced rings much more quickly
in some cases.
* Fixed using `swift-ring-builder set_weight` with more than one
device.
* When requesting objects, return 404 if a tombstone is found and
is newer than any data found. Previous behavior was to return
stale data.
* Various other minor bug fixes and improvements.
swift (2.15.1, OpenStack Pike)
* Fixed a bug introduced in 2.15.0 where the object reconstructor
would exit with a traceback if no EC policy was configured.
* Fixed deadlock when logging from a tpool thread.
The object server runs certain IO-intensive methods outside the
main pthread for performance. Previously, if one of those methods
tried to log, this can cause a crash that eventually leads to an
object server with hundreds or thousands of greenthreads, all
deadlocked. The fix is to use a mutex that works across different
greenlets and different pthreads.
* The object reconstructor can now rebuild an EC fragment for an
expired object.
* Various other minor bug fixes and improvements.
swift (2.15.0)
* Add Composite Ring Functionality
A composite ring comprises two or more component rings that are
combined to form a single ring with a replica count equal to the
sum of the component rings. The component rings are built
independently, using distinct devices in distinct regions, which
means that the dispersion of replicas between the components can
be guaranteed.
Composite rings can be used for explicit replica placement and
"replicated EC" for global erasure codes policies.
Composite rings support 'cooperative' rebalance which means that
during rebalance all component rings will be consulted before a
partition is moved in any component ring. This avoids the same
partition being simultaneously moved in multiple components.
We do not yet have CLI tools for creating composite rings, but
the functionality has been enabled in the ring modules to
support this advanced functionality. CLI tools will be delivered
in a subsequent release.
For further information see the docs at
<https://docs.openstack.org/swift/latest/overview_ring.html#module-swift.common.ring.composite_builder>
* The EC reconstructor process has been dramatically improved by
adding support for multiple concurrent workers. Multiple
processes are required to get high concurrency, and this change
results in much faster rebalance times on servers with many
drives.
Currently the default is still only one process, and no workers.
Set `reconstructor_workers` in the `[object-reconstructor]`
section to some whole number <= the number of devices on a node
to get that many reconstructor workers.
* Add support to increase object ring partition power transparently
to end users and with no cluster downtime. Increasing the ring
part power allows for incremental adjustment to the upper bound
of the cluster size. Please review the full docs at
<https://docs.openstack.org/swift/latest/ring_partpower.html>.
* Added support for per-policy proxy config options. This allows
per-policy affinity options to be set for use with duplicated EC
policies and composite rings. Certain options found in per-policy
conf sections will override their equivalents that may be set
in the [app:proxy-server] section. Currently the options handled that
way are sorting_method, read_affinity, write_affinity,
write_affinity_node_count, and write_affinity_handoff_delete_count.
* Enabled versioned writes on Dynamic Large Objects (DLOs).
* Write-affinity aware object deletion
Previously, when deleting objects in multi-region swift
deployment with write affinity configured, users always get 404
when deleting object before it's replicated to appropriate nodes.
Now Swift will use `write_affinity_handoff_delete_count` to
define how many local handoff nodes should swift send request to
get more candidates for the final response. The default value
"auto" means Swift will calculate the number automatically based
on the number of replicas and current cluster topology.
* Require that known-bad EC schemes be deprecated
Erasure-coded storage policies using isa_l_rs_vand and nparity
>= 5 must be configured as deprecated, preventing any new
containers from being created with such a policy. This
configuration is known to harm data durability. Any data in such
policies should be migrated to a new policy. See
https://bugs.launchpad.net/swift/+bug/1639691 for more
information
* Optimize the Erasure Code reconstructor protocol to reduce IO
load on servers.
* Fixed a bug where SSYNC would fail to replicate unexpired object.
* Fixed a bug in domain_remap when obj starts/ends with slash.
* Fixed a socket leak in copy middleware when a large object was copied.
* Fixed a few areas where the `swiftdir` option was not respected.
* `swift-recon` now respects storage policy aliases.
* cname_lookup middleware now accepts a `nameservers` config
variable that, if defined, will be used for DNS lookups instead of
the system default.
* Make mount_check option usable in containerized environments by
adding a check for an ".ismount" file at the root directory of
a device.
* Remove deprecated `vm_test_mode` option.
* The object and container server config option `slowdown` has been
deprecated in favor of the new `objects_per_second` and
`containers_per_second` options.
* The output of devices from `swift-ring-builder` has been reordered
by region, zone, ip, and device.
* Imported docs content from openstack-manuals project.
* Various other minor bug fixes and improvements.
swift (2.14.0)
* Fixed error where a container drive error resulted in double space
usage on rest drives. When drive with container or account database
is unmounted, the bug would create handoff replicas on all remaining
drives, increasing the drive space used and filling the cluster.
* Fixed UnicodeDecodeError in the object reconstructor that would
prevent objects with non-ascii names from being reconstructed and
caused the reconstructor process to hang.
* EC Fragment Duplication - Foundational Global EC Cluster Support.
* Fixed encoding issue in ssync where a mix of ascii and non-ascii
metadata values would cause an error.
* `name_check` and `cname_lookup` keys have been added to `/info`.
* Add Vary: headers for CORS responses.
* Always set Swift processes to use UTC.
* Prevent logged traceback in object-server on client disconnect for
chunked transfers to replicated policies.
* Removed per-device reconstruction stats. Now that the reconstructor
is shuffling parts before going through them, those stats no longer
make sense.
* Log correct status code for conditional requests.
* Drop support for auth-server from common/manager.py and `swift-init`.
* Include received fragment index in reconstructor log warnings.
* Fixed a race condition in updating hashes.pkl where a partition
suffix invalidation may have been skipped.
* `domain_remap` now accepts a list of domains in "storage_domain".
* Do not follow CNAME when host is in storage_domain.
* Enable cluster-wide CORS Expose-Headers setting via
"cors_expose_headers".
* Cache all answers from nameservers in cname_lookup.
* Log the correct request type of a subrequest downstream of copy.
* Various other minor bug fixes and improvements.
swift (2.13.0, OpenStack Ocata)
* Improvements in key parts of the consistency engine
- Improved performance by eliminating an unneeded directory
structure hash.
- Optimized the common case for hashing filesystem trees, thus
eliminating a lot of extraneous disk I/O.
- Updated the `hashes.pkl` file format to include timestamp information
for race detection. Also simplified hashing logic to prevent race
conditions and optimize for the common case.
- The erasure code reconstructor will now shuffle work jobs across all
disks instead of going disk-by-disk. This eliminates single-disk I/O
contention and allows continued scaling as concurrency is increased.
- Erasure code reconstruction handles moving data from handoff nodes
better. Instead of moving the data to another handoff, it waits
until it can be moved to a primary node.
Upgrade Impact: If you upgrade and roll back, you must delete all
`hashes.pkl` files.
* If using erasure coding with ISA-L in rs_vand mode and 5 or more parity
fragments, Swift will emit a warning. This is a configuration that is
known to harm data durability. In a future release, this warning will be
upgraded to an error unless the policy is marked as deprecated. All data
in an erasure code storage policy using isa_l_rs_vand with 5 or more
parity should be migrated as soon as possible. Please see
https://bugs.launchpad.net/swift/+bug/1639691 for more information.
* The erasure code reconstructor `handoffs_first` option has been
deprecated in favor of `handoffs_only`. `handoffs_only` is far more
useful, and just like `handoffs_first` mode in the replicator, it gives
the operator the option of forcing the consistency engine to focus
solely on revert (handoff) jobs, thus improving the speed of
rebalances. The `handoffs_only` behavior is somewhat consistent with
the replicator's `handoffs_first` option (any error on any handoff in
the replicator will make it essentially handoff only forever) but the
`handoff_only` option does what you want and is named correctly in the
reconstructor.
* The default for `object_post_as_copy` has been changed to False. The
option is now deprecated and will be removed in a future release. If
your cluster is still running with post-as-copy enabled, please update
it to use the "fast-post" method. Future versions of Swift will not
support post-as-copy, and future features will not be supported under
post-as-copy. ("Fast-post" is where `object_post_as_copy` is false).
* Temporary URLs now support one common form of ISO 8601 timestamps in
addition to Unix seconds-since-epoch timestamps. The ISO 8601 format
accepted is '%Y-%m-%dT%H:%M:%SZ'. This makes TempURLs more
user-friendly to produce and consume.
* Listing containers in accounts with json or xml now includes a
`last_modified` time. This does not change any on-disk data, but simply
exposes the value to offer consistency with the object listings on
containers.
* Fixed a bug where the ring builder would not allow removal of a device
when min_part_seconds_left was greater than zero.
* PUT subrequests generated from a client-side COPY will now properly log
the SSC (server-side copy) Swift source field. See
https://docs.openstack.org/swift/latest/logs.html#swift-source for
more information.
* Fixed a bug where an SLO download with a range request may have resulted
in a 5xx series response.
* SLO manifest PUT requests can now be properly validated by sending an
ETag header of the md5 sum of the concatenated md5 sums of the
referenced segments.
* Fixed the stats calculation in the erasure code reconstructor.
* Rings with min_part_hours set to zero will now only move one partition
replica per rebalance, thus matching behavior when min_part_hours is
greater than zero.
* I/O priority is now supported on AArch64 architecture.
* Various other minor bug fixes and improvements.
swift (2.12.0)
* Ring files now include byteorder information about the endian of
the machine used to generate the file, and the values are
appropriately byteswapped if deserialized on a machine with a
different endianness.
Newly created ring files will be byteorder agnostic, but
previously generated ring files will still fail on different
endian architectures. Regenerating older ring files will cause
them to become byteorder agnostic. The regeneration of the ring
files will not cause any new data movement. Newer ring files
will still be usable by older versions of Swift (on machines
with the same endianness--this maintains existing behavior).
* All 416 responses will now include a Content-Range header with
an unsatisfied-range value. This allows the caller to know the
valid range request value for an object.
* TempURLs now support a validation against a common prefix. A
prefix-based signature grants access to all objects which share the
same prefix. This avoids the creation of a large amount of signatures,
when a whole container or pseudofolder is shared.
* Correctly handle deleted files with if-none-match requests.
* Correctly send 412 Precondition Failed if a user sends an
invalid copy destination. Previously Swift would send a 500
Internal Server Error.
* In SLO manifests, the `etag` and `size_bytes` keys are now fully
optional and not required. Previously, the keys needed to exist
but the values were optional. The only required key is `path`.
* Fixed a rare infinite loop in `swift-ring-builder` while placing parts.
* Ensure update of the container by object-updater, removing a rare
possibility that objects would never be added to a container listing.
* Fixed non-deterministic suffix updates in hashes.pkl where a partition
may be updated much less often than expected.
* Fixed regression in consolidate_hashes that occurred when a new
file was stored to new suffix to a non-empty partition. This bug
was introduced in 2.7.0 and could cause an increase in rsync
replication stats during and after upgrade, due to inconsistent
hashing of partition suffixes.
* Account and container databases will now be quarantined if the
database schema has been corrupted.
* Removed "in-process-" from func env tox name to work with
upstream CI.
* Respect server type for --md5 check in swift-recon.
* Remove empty db hash and suffix directories if a db gets quarantined.
* Various other minor bug fixes and improvements.
swift (2.11.0)
* We have made significant improvements and changes to the erasure
code implementation.
- Instead of using a separate .durable file to indicate the
durable status of an EC fragment archive, we rename the .data
to include a durable marker in the filename. This saves one
inode for every EC .data file. Existing .durable files will not
be removed, and they will continue to work just fine.
Note that after writing EC data with Swift 2.11.0 or later, that
data will not be accessible to earlier versions of Swift.
- Closed a bug where ssync may have written bad fragment data in
some circumstances. A check was added to ensure the correct number
of bytes is written for a fragment before finalizing the write.
Also, erasure coded fragment metadata will now be validated on read
requests and, if bad data is found, the fragment will be quarantined.
- The improvements to EC reads made in Swift 2.10.0 have also been
applied to the reconstructor. This allows fragments to be rebuilt
in more circumstances, resulting in faster recovery from failures.
- WARNING: If you are using the ISA-L library for erasure codes,
please upgrade to liberasurecode 1.3.1 (or later) as soon as
possible. If you are using isa_l_rs_vand with more than 4 parity,
please read https://bugs.launchpad.net/swift/+bug/1639691 and take
necessary action.
- Updated the PyECLib dependency to 1.3.1.
* Added a configurable URL base to staticweb.
* Support multi-range GETs for static large objects.
* TempURLs using the "inline" parameter can now also set the
"filename" parameter. Both are used in the Content-Disposition
response header.
* Mirror X-Trans-Id to X-Openstack-Request-Id.
* SLO will now concurrently HEAD segments, resulting in much faster
manifest validation and object creation. By default, two HEAD requests
will be done at a time, but this can be changed by the operator via
the new `concurrency` setting in the "[filter:slo]" section of
the proxy server config.
* Suppressed the KeyError message when auditor finds an expired object.
* Daemons using InternalClient can now be properly killed with SIGTERM.
* Added a "user" option to the drive-audit config file. Its value is
used to set the owner of the drive-audit recon cache.
* Throttle update_auditor_status calls so it updates no more than once
per minute.
* Suppress unexpected-file warnings for rsync temp files.
* Various other minor bug fixes and improvements.
swift (2.10.0, OpenStack Newton)
* Object versioning now supports a "history" mode in addition to
the older "stack" mode. The difference is in how DELETE requests
are handled. For full details, please read
https://docs.openstack.org/swift/latest/overview_object_versioning.html.
* New config variables to change the schedule priority and I/O
scheduling class. Servers and daemons now understand
`nice_priority`, `ionice_class`, and `ionice_priority` to
schedule their relative importance. Please read
https://docs.openstack.org/swift/latest/admin_guide.html
for full config details.
* On newer kernels (3.15+ when using xfs), Swift will use the O_TMPFILE
flag when opening a file instead of creating a temporary file
and renaming it on commit. This makes the data path simpler and
allows the filesystem to more efficiently optimize the files on
disk, resulting in better performance.
* Erasure code GET performance has been significantly
improved in clusters that are not completely healthy.
* Significant improvements to the api-ref doc available at
https://developer.openstack.org/api-ref/object-storage/.
* A PUT or POST to a container will now update the container's
Last-Modified time, and that value will be included in a
GET/HEAD response.
* Include object sysmeta in POST responses. Sysmeta is still
stripped from the response before being sent to the client, but
this allows middleware to make use of the information.
* Fixed a bug where a container listing delimiter wouldn't work
with encryption.
* Fixed a bug where some headers weren't being copied correctly
in a COPY request.
* Container sync can now copy SLOs more efficiently by allowing
the manifest to be synced before all of the referenced segments.
This fixes a bug where container sync would not copy SLO manifests.
* Fixed a bug where some tombstone files might never be reclaimed.
* Update dnspython dependency to 1.14, removing the need to have
separate dnspython dependencies for Py2 and Py3.
* Deprecate swift-temp-url and call python-swiftclient's
implementation instead. This adds python-swiftclient as an
optional dependency of Swift.
* Moved other-requirements.txt to bindep.txt. bindep.txt lists
non-python dependencies of Swift.
* Various other minor bug fixes and improvements.
swift (2.9.0)
* Swift now supports at-rest encryption. This feature encrypts all
object data and user-set object metadata as it is sent to the cluster.
This feature is designed to prevent information leaks if a hard drive
leaves the cluster. The encryption is transparent to the end-user.
At-rest encryption in Swift is enabled on the proxy server by
adding two middlewares to the pipeline. The `keymaster` middleware
is responsible for managing the encryption keys and the `encryption`
middleware does the actual encryption and decryption.
Existing clusters will continue to work without enabling
encryption. Although enabling this feature on existing clusters
is supported, best practice is to enable this feature on new
clusters when the cluster is created.
For more information on the details of the at-rest encryption
feature, please see the docs at
https://docs.openstack.org/swift/latest/overview_encryption.html.
* `swift-recon` can now be called with more than one server type.
* Fixed a bug where non-ascii names could cause an error in logging
and cause a 5xx response to the client.
* The install guide and API reference have been moved into Swift's
source code repository.
* Various other minor bug fixes and improvements.
swift (2.8.0)
* Allow concurrent bulk deletes for server-side deletes of static
large objects. Previously this would be single-threaded and each
DELETE executed serially. The new `delete_concurrency` value
(default value is 2) in the `[filter:slo]` and `[filter:bulk]`
sections of the proxy server config controls the concurrency
used to perform the DELETE requests for referenced segments. The
default value is recommended, but setting the value to 1
restores previous behavior.
* Refactor server-side copy as middleware
The COPY verb is now implemented in the `copy` middleware instead
of in the proxy server code. If not explicitly added, the server
side copy middleware is auto-inserted to the left of `dlo`, `slo`
and `versioned_writes` middlewares in the proxy server pipeline.
As a result, dlo and slo `copy_hooks` are no longer required. SLO
manifests are now validated when copied so when copying a
manifest to another account the referenced segments must be
readable in that account for the manifest copy to succeed
(previously this validation was not made, meaning the manifest
was copied but could be unusable if the segments were not
readable).
With this change, there should be no change in functionality or
existing behavior.
* `fallocate_reserve` can now be a percentage (a value ending in "%"),
and the default has been adjusted to "1%".
* Now properly require account/container metadata be valid UTF-8
* TempURL responses now include an `Expires` header with the
expiration time embedded in the URL.
* Non-Python dependencies are now listed in other-requirements.txt.
* `swift-ring-builder` now supports a `--yes` option to assume a
yes response to all questions. This is useful for scripts.
* Write requests to a replicated storage policy with an even number
of replicas now have a quorum size of half the replica count
instead of half-plus-one.
* Container sync now logs per-container stat information so operators
can track progress. This is logged at INFO level.
* `swift-dispersion-*` now allows region to be specified when there
are multiple Swift regions served by the same Keystone instance
* Fix infinite recursion during logging when syslog is down.
* Fixed a bug where a backend failure during a read could result in
a missing byte in the response body.
* Stop `staticweb` revealing container existence to unauth'd requests.
* Reclaim isolated .meta files if they are older than the `reclaim_age`.
* Make `rsync` ignore its own temporary files instead of spreading
them around the cluster, wasting space.
* The object auditor now ignores files in the devices directory when
auditing objects.
* The deprecated `threads_per_disk` setting has been removed. Deployers
are encouraged to use `servers_per_port` instead.
* Fixed an issue where a single-replica configuration for account or
container DBs could result in the DB being inadvertently deleted if
it was placed on a handoff node.
* `disable_fallocate` now also correctly disables `fallocate_reserve`.
* Fixed a bug where the account-reaper did not delete all containers
in a reaped account.
* Correctly handle delimiter queries where results start with the
delimiter and no prefix is given.
* Changed the recommended ports for Swift services from ports
6000-6002 to unused ports 6200-6202 so they do not conflict with
X-Windows or other services. Since these config values must be
explicitly set in the config file, this doesn't impact existing
deployments.
* Fixed an instance where REPLICATE requests would not use
`replication_ip`.
* Various other minor bug fixes and improvements.
swift (2.7.0, OpenStack Mitaka)
* Bump PyECLib requirement to >= 1.2.0
* Update container on fast-POST
"Fast-POST" is the mode where `object_post_as_copy` is set to
`False` in the proxy server config. This mode now allows for
fast, efficient updates of metadata without needing to fully
recopy the contents of the object. While the default still is
`object_post_as_copy` as True, the plan is to change the default
to False and then deprecate post-as-copy functionality in later
releases. Fast-POST now supports container-sync functionality.
* Add concurrent reads option to proxy.
This change adds 2 new parameters to enable and control concurrent
GETs in Swift, these are `concurrent_gets` and `concurrency_timeout`.
`concurrent_gets` allows you to turn on or off concurrent
GETs; when on, it will set the GET/HEAD concurrency to the
replica count. And in the case of EC HEADs it will set it to
ndata. The proxy will then serve only the first valid source to
respond. This applies to all account, container, and replicated
object GETs and HEADs. For EC only HEAD requests are affected.
The default for `concurrent_gets` is off.
`concurrency_timeout` is related to `concurrent_gets` and is
the amount of time to wait before firing the next thread. A
value of 0 will fire at the same time (fully concurrent), but
setting another value will stagger the firing allowing you the
ability to give a node a short chance to respond before firing
the next. This value is a float and should be somewhere between
0 and `node_timeout`. The default is `conn_timeout`, meaning by
default it will stagger the firing.
* Added an operational procedures guide to the docs. It can be
found at https://docs.openstack.org/swift/latest/ops_runbook/index.html and
includes information on detecting and handling day-to-day
operational issues in a Swift cluster.
* Make `handoffs_first` a more useful mode for the object replicator.
The `handoffs_first` replication mode is used during periods of
problematic cluster behavior (e.g. full disks) when replication
needs to quickly drain partitions from a handoff node and move
them to a primary node.
Previously, `handoffs_first` would sort that handoff work before
"normal" replication jobs, but the normal replication work could
take quite some time and result in handoffs not being drained
quickly enough.
In order to focus on getting handoff partitions off the node
`handoffs_first` mode will now abort the current replication
sweep before attempting any primary suffix syncing if any of the
handoff partitions were not removed for any reason - and start
over with replication of handoffs jobs as the highest priority.
Note that `handoffs_first` being enabled will emit a warning on
start up, even if no handoff jobs fail, because of the negative
impact it can have during normal operations by dog-piling on a
node that was temporarily unavailable.
* By default, inbound `X-Timestamp` headers are now disallowed
(except when in an authorized container-sync request). This
header is useful for allowing data migration from other storage
systems to Swift and keeping the original timestamp of the data.
If you have this migration use case (or any other requirement on
allowing the clients to set an object's timestamp), set the
`shunt_inbound_x_timestamp` config variable to False in the
gatekeeper middleware config section of the proxy server config.
* Requesting a SLO manifest file with the query parameters
"?multipart-manifest=get&format=raw" will return the contents of
the manifest in the format as was originally sent by the client.
The "format=raw" is new.
* Static web page listings can now be rendered with a custom
label. By default listings are rendered with a label of:
"Listing of /v1/<account>/<container>/<path>". This change adds
a new custom metadata key/value pair
`X-Container-Meta-Web-Listings-Label: My Label` that when set,
will cause the following: "Listing of My Label/<path>" to be
rendered instead.
* Previously, static large objects (SLOs) had a minimum segment
size (default to 1MiB). This limit has been removed, but small
segments will be ratelimited. The config parameter
`rate_limit_under_size` controls the definition of "small"
segments (1MiB by default), and `rate_limit_segments_per_sec`
controls how many segments per second can be served (default is 1).
With the default values, the effective behavior is identical to the
previous behavior when serving SLOs.
* Container sync has been improved to perform a HEAD on the remote
side of the sync for each object being synced. If the object
exists on the remote side, container-sync will no longer
transfer the object, thus significantly lowering the network
requirements to use the feature.
* The object auditor will now clean up any old, stale rsync temp
files that it finds. These rsync temp files are left if the
rsync process fails without completing a full transfer of an
object. Since these files can be large, the temp files may end
up filling a disk. The new auditor functionality will reap these
rsync temp files if they are old. The new object-auditor config
variable `rsync_tempfile_timeout` is the number of seconds old a
tempfile must be before it is reaped. By default, this variable
is set to "auto" or the rsync_timeout plus 900 seconds (falling
back to a value of 1 day).
* The Erasure Code reconstruction process has been made more
efficient by not syncing data files when only the durable commit
file is missing.
* Fixed a bug where 304 and 416 response may not have the right
Etag and Accept-Ranges headers when the object is stored in an
Erasure Coded policy.
* Versioned writes now correctly stores the date of previous versions
using GMT instead of local time.
* The deprecated Keystone middleware option is_admin has been removed.
* Fixed log format in object auditor.
* The zero-byte mode (ZBF) of the object auditor will now properly
observe the `--once` option.
* Swift keeps track, internally, of "dirty" parts of the partition
keyspace with a "hashes.pkl" file. Operations on this file no
longer require a read-modify-write cycle and use a new
"hashes.invalid" file to track dirty partitions. This change
will improve end-user performance for PUT and DELETE operations.
* The object replicator's succeeded and failed counts are now logged.
* `swift-recon` can now query hosts by storage policy.
* The log_statsd_host value can now be an IPv6 address or a hostname
which only resolves to an IPv6 address.
* Erasure coded fragments now properly call fallocate to reserve disk
space before being written.
* Various other minor bug fixes and improvements.
swift (2.6.0)
* Dependency changes
- Updated minimum version of eventlet to 0.17.4 to support IPv6.
- Updated the minimum version of PyECLib to 1.0.7.