forked from openstack/swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGELOG
3398 lines (2234 loc) · 131 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.25.0, OpenStack Ussuri)
* WSGI server processes can now notify systemd when they are ready.
* Added `ttfb` (Time to First Byte) and `pid` (Process ID) to the set
of available proxy-server log fields. For more information, see
https://docs.openstack.org/swift/latest/logs.html
* Improved proxy-server performance by reducing unnecessary locking,
memory copies, and eventlet scheduling.
* Reduced object-replicator and object-reconstructor CPU usage by only
checking that the device list is current when rings change.
* Improved performance of sharded container listings when performing
prefix listings.
* Improved container-sync performance when data has already been
deleted or overwritten.
* Account quotas are now enforced even on empty accounts.
* Getting an SLO manifest with `?format=raw` now responds with an ETag
that matches the MD5 of the generated body rather than the MD5 of
the manifest stored on disk.
* Provide useful status codes in logs for some versioning and symlink
subrequests that were previously logged as 499.
* Fixed 500 from cname_lookup middleware. Previously, if the looked-up
domain was used by domain_remap to update the request path, the
server would respond Internal Error.
* On Python 3, fixed an issue when reading or writing objects with a
content-type like `message/*`. Previously, Swift would fail to respond.
* On Python 3, fixed a RecursionError in swift-dispersion-report when
using TLS.
* Fixed a bug in the new object versioning API that would cause more
than `limit` results to be returned when listing.
* Various other minor bug fixes and improvements.
swift (2.24.0)
* Added a new object versioning mode, with APIs for querying and
accessing old versions. For more information, see the documentation
at https://docs.openstack.org/swift/latest/middleware.html#module-swift.common.middleware.versioned_writes.object_versioning
* Added support for S3 versioning using the above new mode.
* Added a new middleware to allow accounts and containers to opt-in to
RFC-compliant ETags. This may be useful when using Swift as an origin
for some content delivery networks. For more information, see the
documentation at https://docs.openstack.org/swift/latest/middleware.html#module-swift.common.middleware.etag_quoter
Clients should be aware of the fact that ETags may be quoted for RFC
compliance; this may become the default behavior in some future release.
* Proxy, account, container, and object servers now support "seamless
reloads" via `SIGUSR1`. This is similar to the existing graceful
restarts but keeps the server socket open the whole time, reducing
service downtime.
* New buckets created via the S3 API will now store multi-part upload
data in the same storage policy as other data rather than the
cluster's default storage policy.
* Device region and zone can now be changed via `swift-ring-builder`.
Note that this may cause a lot of data movement on the next rebalance
as the builder tries to reach full dispersion.
* Added support for Python 3.8.
* The container sharder can now handle containers with special
characters in their names.
* Internal client no longer logs object DELETEs as status 499.
* Objects with an `X-Delete-At` value in the far future no longer cause
backend server errors.
* The bulk extract middleware once again allows clients to specify metadata
(including expiration timestamps) for all objects in the archive.
* Container sync now synchronizes static symlinks in a way similar to
static large objects.
* `swift_source` is set for more sub-requests in the proxy-server. See
https://docs.openstack.org/swift/latest/logs.html#swift-source
* Errors encountered while validating static symlink targets no longer
cause BadResponseLength errors in the proxy-server.
* On Python 3, the KMS keymaster now works with secrets stored
in Barbican with a text/plain payload-content-type.
* On Python 3, the formpost middleware now works with unicode file names.
* Several utility scripts now work better on Python 3:
* swift-account-audit
* swift-dispersion-populate
* swift-drive-recon
* swift-recon
* On Python 3, certain S3 API headers are now lower case as they
would be coming from AWS.
* Per-service `auto_create_account_prefix` settings are now deprecated
and may be ignored in a future release; if you need to use this, please
set it in the `[swift-constraints]` section of /etc/swift/swift.conf.
* Various other minor bug fixes and improvements.
swift (2.23.1, train stable backports)
* On Python 3, the KMS keymaster now works with secrets stored
in Barbican with a text/plain payload-content-type.
* Several utility scripts now work better on Python 3:
* swift-account-audit
* swift-dispersion-populate
* swift-drive-recon
* swift-recon
swift (2.23.0, OpenStack Train)
* Python 3.6 and 3.7 are now fully supported. Several py3-related
fixes are included:
* Removed a request-smuggling vector when running a mixed
py2/py3 cluster.
* Allow fallocate_reserve to be specified as a percentage.
* Fixed listings for sharded containers.
* Fixed non-ASCII account metadata handling.
* Fixed rsync output parsing.
* Fixed some title-casing of headers.
If you've been testing Swift on Python 3, upgrade at your earliest
convenience.
* Added "static symlinks", which perform some validation as they
follow redirects and include more information about their target
in container listings.
* Multi-character strings may now be used as delimiters in account
and container listings.
* Sharding improvements
* Container metadata related to sharding are now removed when no
longer needed.
* Empty container databases (such as might be created on handoffs)
now shard much more quickly.
* The proxy-server now ignores 404 responses from handoffs that have
no data when deciding on the correct response for object requests,
similar to what it already does for account and container requests.
* Static Large Object sizes in listings for versioned containers are
now more accurate.
* When refetching Static Large Object manifests, non-manifest responses
are now handled better.
* S3 API now translates 503 Service Unavailable responses to a more
S3-like response instead of raising an error.
* Improved proxy-to-backend requests to be more RFC-compliant.
* Dependency update: eventlet must be at least 0.25.0. This also
dragged forward minimum-supported versions of dnspython (1.15.0),
greenlet (0.3.2), and six (1.10.0).
* Various other minor bug fixes and improvements.
swift (2.22.0)
* Experimental support for Python 3.6 and 3.7 is now available.
Note that this requires eventlet>=0.25.0. All unit tests pass,
and running functional tests under Python 2 will pass against
services running under Python 3. Expect full support in the
next minor release.
* Log formats are now more configurable and include support for
anonymization. See the log_msg_template option in proxy-server.conf
and https://docs.openstack.org/swift/latest/logs.html#proxy-logs
for more information.
* Added an operator tool, swift-container-deleter, to asynchronously
delete some or all objects in a container using the object expirers.
* Swift-all-in-one Docker images are now built and published to
https://hub.docker.com/r/openstackswift/saio. These are intended
for use as development targets, but will hopefully be useful as a
starting point for other work involving containerizing Swift.
* The object-expirer may now be configured in object-server.conf.
This is in anticipation of a future change to allow the
object-expirer to be deployed on all nodes that run object-servers.
* Correctness improvements
* The proxy-server now ignores 404 responses from handoffs without
databases when deciding on the correct response for account and
container requests.
* Object writes to a container whose existence cannot be verified
now 503 instead of 404.
* Sharding improvements
* The container-replicator now only attempts to fetch shard ranges if
the remote indicates that it has shard ranges. Further, it does so
with a timeout to prevent the process from hanging in certain cases.
* The proxy-server now caches 'updating' shards, improving write
performance for sharded containers. A new config option,
`recheck_updating_shard_ranges`, controls the cache time; set it to
0 to disable caching.
* The container-replicator now correctly enqueues container-reconciler
work for sharded containers.
* S3 API improvements
* Unsigned payloads work with v4 signatures once more.
* Multipart upload parts may now be copied from other multipart uploads.
* CompleteMultipartUpload requests with a Content-MD5 now work.
* Content-Type can now be updated when copying an object.
* Fixed v1 listings that end with a non-ASCII object name.
* Background corruption-detection improvements
* Detect and remove invalid entries from hashes.pkl
* When object path is not a directory, just quarantine it,
rather than the whole suffix.
* Dependency updates: we've increased our minimum supported version
of cryptography to 2.0.2 and netifaces to 0.8. This is largely due
to the difficulty of continuing to test with the old versions.
If running Swift under Python 3, eventlet must be at least 0.25.0.
* Various other minor bug fixes and improvements.
swift (2.21.1, stein stable backports)
* Sharding improvements
* The container-replicator now only attempts to fetch shard ranges if
the remote indicates that it has shard ranges. Further, it does so
with a timeout to prevent the process from hanging in certain cases.
* The container-replicator now correctly enqueues container-reconciler
work for sharded containers.
* Container metadata related to sharding are now removed when no
longer needed.
* S3 API improvements
* Unsigned payloads work with v4 signatures once more.
* Multipart upload parts may now be copied from other multipart uploads.
* CompleteMultipartUpload requests with a Content-MD5 now work.
* Content-Type can now be updated when copying an object.
* Fixed v1 listings that end with a non-ASCII object name.
* Background corruption-detection improvements
* Detect and remove invalid entries from hashes.pkl
* When object path is not a directory, just quarantine it,
rather than the whole suffix.
* Static Large Object sizes in listings for versioned containers are
now more accurate.
* When refetching Static Large Object manifests, non-manifest responses
are now handled better.
* Cross-account symlinks now store correct account information in
container listings. This was previously fixed in 2.22.0.
* Requesting multiple ranges from a Dynamic Large Object now returns the
entire object instead of incorrect data. This was previously fixed in
2.23.0.
* When making backend requests, the proxy-server now ensures query
parameters are always properly quoted. Previously, the proxy would
encounter an error on Python 2.7.17 if the client included non-ASCII
query parameters in object requests. This was previously fixed in
2.23.0.
swift (2.21.0, OpenStack Stein)
* Change the behavior of the EC reconstructor to perform a
fragment rebuild to a handoff node when a primary peer responds
with 507 to the REPLICATE request. This changes EC to match the
existing behavior of replication when drives fail. After a
rebalance of EC rings (potentially removing unmounted/failed
devices), it's most IO efficient to run in handoffs_only mode to
avoid unnecessary rebuilds.
* O_TMPFILE support is now detected by attempting to use it
instead of looking at the kernel version. This allows older
kernels with backported patches to take advantage of the
O_TMPFILE functionality.
* Add slo_manifest_hook callback to allow other middlewares to
impose additional constraints on or make edits to SLO manifests
before being written. For example, a middleware could enforce
minimum segment size or insert data segments.
* Fixed an issue with multi-region EC policies that caused the EC
reconstructor to constantly attempt cross-region rebuild
traffic.
* Fixed an issue where S3 API v4 signatures would not be validated
against the body of the request, allowing a replay attack if
request headers were captured by a malicious third party.
* Display crypto data/metadata details in swift-object-info.
* formpost can now accept a content-encoding parameter.
* Fixed an issue where multipart uploads with the S3 API would
sometimes report an error despite all segments being upload
successfully.
* Multipart object segments are now actually deleted when the
multipart object is deleted via the S3 API.
* Swift now returns a 503 (instead of a 500) when an account
auto-create fails.
* Fixed a bug where encryption would store the incorrect key
metadata if the object name starts with a slash.
* Fixed an issue where an object server failure during a client
download could leave an open socket between the proxy and
client.
* Fixed an issue where deleted EC objects didn't have their
on-disk directories cleaned up. This would cause extra resource
usage on the object servers.
* Fixed issue where bulk requests using xml and expect
100-continue would return a malformed HTTP response.
* Various other minor bug fixes and improvements.
swift (2.20.0)
* S3 API compatibility updates
* Swift can now cache the S3 secret from Keystone to use for
subsequent requests. This functionality is disabled by default but
can be enabled by setting the `secret_cache_duration` in the s3token
section of the proxy server config to a number greater than 0.
* s3api now mimics the AWS S3 behavior of periodically sending
whitespace characters on a Complete Multipart Upload request to keep
the connection from timing out. Note that since a request could fail
after the initial 200 OK response has been sent, it is important to
check the response body to determine if the request succeeded.
* s3api now properly handles x-amz-metadata-directive headers on
COPY operations.
* s3api now uses concurrency (default 2) to handle multi-delete
requests. This allows multi-delete requests to be processed much
more quickly.
* s3api now mimics some forms of AWS server-side encryption
based on whether Swift's at-rest encryption functionality is enabled.
Note that S3 API users are now able to know more about how the
cluster is configured than they were previously, ie knowledge of
encryption at-rest functionality being enabled or not.
* s3api responses now include a '-' in multipart ETags.
For new multipart-uploads via the S3 API, the ETag that is
stored will be calculated in the same way that AWS uses. This
ETag will be used in GET/HEAD responses, bucket listings, and
conditional requests via the S3 API. Accessing the same object
via the Swift API will use the SLO Etag; however, in JSON
container listings the multipart upload etag will be exposed
in a new "s3_etag" key. Previously, some S3 clients would complain
about download corruption when the ETag did not have a '-'.
* S3 ETag for SLOs now include a '-'.
Ordinary objects in S3 use the MD5 of the object as the ETag,
just like Swift. Multipart Uploads follow a different format, notably
including a dash followed by the number of segments. To that end
(and for S3 API requests *only*), SLO responses via the S3 API have a
literal '-N' added on the end of the ETag.
* The default location is now set to "us-east-1". This is more likely
to be the default region that a client will try when using v4
signatures.
Deployers with clusters that relied on the old implicit default
location of "US" should explicitly set `location = US` in the
`[filter:s3api]` section of proxy-server.conf before upgrading.
* Add basic support for ?versions bucket listings. We still do not
have support for toggling S3 bucket versioning, but we can at least
support getting the latest versions of all objects.
* Fixed an issue with SSYNC requests to ensure that only one request
can be running on a partition at a time.
* Data encryption updates
* The kmip_keymaster middleware can now be configured directly in the
proxy-server config file. The existing behavior of using an external
config file is still supported.
* Multiple keymaster middlewares are now supported. This allows
migration from one key provider to another.
Note that secret_id values must remain unique across all keymasters
in a given pipeline. If they are not unique, the right-most keymaster
will take precedence.
When looking for the active root secret, only the right-most
keymaster is used.
* Prevent PyKMIP's kmip_protocol logger from logging at DEBUG.
Previously, some versions of PyKMIP would include all wire
data when the root logger was configured to log at DEBUG; this
could expose key material in logs. Only the kmip_keymaster was
affected.
* Fixed an issue where a failed drive could prevent the container sharder
from making progress.
* Storage policy definitions in swift.conf can now define the diskfile
to use to access objects. See the included swift.conf-sample file for
a description of usage.
* The EC reconstructor will now attempt to remove empty directories
immediately, while the inodes are still cached, rather than waiting
until the next run.
* Added a keep_idle config option to configure KEEPIDLE time for TCP
sockets. The default value is the old constant of 600.
* Add databases_per_second to the account-replicator,
container-replicator, and container-sharder. This prevents them from
using a full CPU core when they are not IO limited.
* Allow direct_client users to overwrite the X-Timestamp header.
* Various other minor bug fixes and improvements.
swift (2.19.2, rocky stable backports)
* Sharding improvements
* The container-replicator now only attempts to fetch shard ranges if
the remote indicates that it has shard ranges. Further, it does so
with a timeout to prevent the process from hanging in certain cases.
* The container-replicator now correctly enqueues container-reconciler
work for sharded containers.
* S3 API improvements
* Fixed an issue where v4 signatures would not be validated against
the body of the request, allowing a replay attack if request headers
were captured by a malicious third party. Note that unsigned payloads
still function normally.
* CompleteMultipartUpload requests with a Content-MD5 now work.
* Fixed v1 listings that end with a non-ASCII object name.
* Multipart object segments are now actually deleted when the
multipart object is deleted via the S3 API.
* Fixed an issue that caused Delete Multiple Objects requests with
large bodies to 400. This was previously fixed in 2.20.0.
* Fixed an issue where non-ASCII Keystone EC2 credentials would not get
mapped to the correct account. This was previously fixed in 2.20.0.
* Background corruption-detection improvements
* Detect and remove invalid entries from hashes.pkl
* When object path is not a directory, just quarantine it,
rather than the whole suffix.
* Fixed a bug where encryption would store the incorrect key
metadata if the object name starts with a slash.
* Fixed an issue where an object server failure during a client
download could leave an open socket between the proxy and
client.
* Static Large Object sizes in listings for versioned containers are
now more accurate.
* When refetching Static Large Object manifests, non-manifest responses
are now handled better.
* Cross-account symlinks now store correct account information in
container listings. This was previously fixed in 2.22.0.
* Requesting multiple ranges from a Dynamic Large Object now returns the
entire object instead of incorrect data. This was previously fixed in
2.23.0.
* When making backend requests, the proxy-server now ensures query
parameters are always properly quoted. Previously, the proxy would
encounter an error on Python 2.7.17 if the client included non-ASCII
query parameters in object requests. This was previously fixed in
2.23.0.
swift (2.19.1, rocky stable backports)
* Prevent PyKMIP's kmip_protocol logger from logging at DEBUG.
Previously, some versions of PyKMIP would include all wire
data when the root logger was configured to log at DEBUG; this
could expose key material in logs. Only the kmip_keymaster was
affected.
* Fixed an issue where a failed drive could prevent the container sharder
from making progress.
* Fixed a bug in how Swift uses eventlet that was exposed under high
concurrency.
swift (2.19.0, OpenStack Rocky)
* TempURLs now support IP range restrictions. Please see
https://docs.openstack.org/swift/latest/middleware.html#client-usage
for more information on how to use this additional restriction.
* Add support for multiple root encryption secrets for the trivial
and KMIP keymasters. This allows operators to rotate encryption
keys over time without needing to re-encrypt all existing data
in the cluster. Please see the included sample config files for
instructions on how to multiple encryption keys.
* The object updater now supports two configuration settings:
"concurrency" and "updater_workers". The latter controls how many
worker processes are spawned, while the former controls how many
concurrent container updates are performed by each worker
process. This should speed the processing of async_pendings.
On upgrade, a node configured with concurrency=N will still handle
async updates N-at-a-time, but will do so using only one process
instead of N.
If you have a config file like this:
[object-updater]
concurrency = <N>
and you want to take advantage of faster updates, then do this:
[object-updater]
concurrency = 8 # the default; you can omit this line
updater_workers = <N>
If you want updates to be processed exactly as before, do this:
[object-updater]
concurrency = 1
updater_workers = <N>
* When listing objects in a container in json format, static large
objects (SLOs) will now include an additional new "slo_etag" key
that matches the etag returned when requesting the SLO. The
existing "hash" key remains unchanged as the MD5 of the SLO
manifest. Text and XML listings are unaffected by this change.
* Log deprecation warnings for `run_pause`. This setting was
deprecated in Swift 2.4.0 and is replaced by `interval`.
It may be removed in a future release.
* Object reconstructor logs are now prefixed with information
about the specific worker process logging the message. This
makes reading the logs and understanding the messages much simpler.
* Lower bounds of dependencies have been updated to reflect what
is actually tested.
* SSYNC replication mode now removes as much of the directory
structure as possible as soon at it observes that the directory
is empty. This reduces the work needed for subsequent replication
passes.
* The container-updater now reports zero objects and bytes used for
child DBs in sharded containers. This prevents double-counting in
utilization reports.
* Add fallocate_reserve to account and container servers. This
allows disks shared between account/container and object rings to
avoid getting 100% full. The default value of 1% matches the
existing default on object servers.
* Added an experimental `swift-ring-composer` CLI tool to build
composite rings.
* Added an optional `read_only` middleware to make an entire cluster
or individual accounts read only.
* Fixed a bug where zero-byte PUTs would not work properly
with "If-None-Match: *" conditional requests.
* ACLs now work with unicode in user/account names.
* COPY now works with unicode account names.
* Improved S3 API compatibility.
* Lock timeouts in the container updater are now logged at INFO
level, not ERROR.
* Various other minor bug fixes and improvements.
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.1, queens stable backports)
* Fix SLO delete for accounts with non-ASCII names.
* Fixed an issue in COPY where concurrent requests may have copied the
wrong data.
* Fixed a bug in how Swift uses eventlet that was exposed under high
concurrency.
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.2, pike stable backports)
* Fixed a cache invalidation issue related to GET and PUT requests to
containers that would occasionally cause object PUTs to a container to
404 after the container had been successfully created.
* Removed a race condition where a POST to an SLO could modify the
X-Static-Large-Object metadata.
* Fixed rare socket leak on range requests to erasure-coded objects.
* Fix SLO delete for accounts with non-ASCII names.
* Fixed an issue in COPY where concurrent requests may have copied the
wrong data.
* Fixed time skew when using X-Delete-After.
* Send ETag header in 206 Partial Content responses to SLO reads.
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