Anda dapat menyimpan beberapa versi dari konten Anda sehingga Anda dapat pulih dari timpaan yang tidak diinginkan. Objek versi adalah cara mudah untuk menerapkan kontrol versi, yang dapat Anda gunakan dengan semua tipe konten.
Catatan
Anda tidak bisa memversi file manifest large-object, tapi file manifest large-object dapat menunjuk ke segmen berversi.
Kami sangat menyarankan agar Anda menaruh objek non-current dalam kontainer berbeda dari kontainer dimana versi objek saat berada.
Untuk mengaktifkan objek versioning, mintalah penyedia cloud Anda untuk mengatur opsi allow_versions untuk TRUE di file konfigurasi kontainer.
Buat wadah (container) archive untuk menyimpan versi objek:
$ curl -i $publicURL/archive -X PUT -H "Content-Length: 0" -H "X-Auth-Token: $token"
HTTP/1.1 201 Created
Content-Length: 0
Content-Type: text/html; charset=UTF-8
X-Trans-Id: tx46f8c29050834d88b8d7e-0052e1859d
Date: Thu, 23 Jan 2014 21:11:57 GMT
Buat wadah (container) current untuk menyimpan versi saat ini dari objek.
Sertakan header X-Versi-Location. Header ini mendefinisikan kontainer yang memegang versi non-current objek Anda. Anda harus utf-8-encode dan kemudian URL-encode nama kontainer sebelum Anda memasukkannya dalam header X-Versi-Location. Header ini memungkinkan objek versi untuk semua objek dalam kontainer current. Perubahan ke objek dalam kontainer current otomatis membuat versi non-current di kontainer archive.
$ curl -i $publicURL/current -X PUT -H "Content-Length: 0" -H \
”X-Auth-Token: $token" -H "X-Versions-Location: archive"
HTTP/1.1 201 Created
Content-Length: 0
Content-Type: text/html; charset=UTF-8
X-Trans-Id: txb91810fb717347d09eec8-0052e18997
Date: Thu, 23 Jan 2014 21:28:55 GMT
Buat versi pertama dari sebuah objek dalam kontainer current:
$ curl -i $publicURL/current/my_object --data-binary 1 -X PUT -H \
”Content-Length: 0" -H "X-Auth-Token: $token"
HTTP/1.1 201 Created
Last-Modified: Thu, 23 Jan 2014 21:31:22 GMT
Content-Length: 0
Etag: d41d8cd98f00b204e9800998ecf8427e
Content-Type: text/html; charset=UTF-8
X-Trans-Id: tx5992d536a4bd4fec973aa-0052e18a2a
Date: Thu, 23 Jan 2014 21:31:22 GMT
Tidak ada yang ditulis ke kontainer versi non-current ketika Anda awalnya PUT obyek dalam kontainer current. Namun, selanjutnya request (permintaan) PUT yang mengedit sebuah objek memicu penciptaan versi objek yang di kontainer archive.
Versi non-current ini diberi nama sebagai berikut:
<length><object_name><timestamp>
Dimana length adalah 3 karakter, panjang karakter heksadesimal zero-padded dari objek, ``<object_name> `` adalah nama objek, dan ``<timestamp> `` adalah waktu ketika objek itu awalnya diciptakan sebagai versi saat ini.
Membuat versi kedua dari objek dalam kontainer current:
$ curl -i $publicURL/current/my_object --data-binary 2 -X PUT -H \
“Content-Length: 0" -H "X-Auth-Token: $token"
HTTP/1.1 201 Created
Last-Modified: Thu, 23 Jan 2014 21:41:32 GMT
Content-Length: 0
Etag: d41d8cd98f00b204e9800998ecf8427e
Content-Type: text/html; charset=UTF-8
X-Trans-Id: tx468287ce4fc94eada96ec-0052e18c8c
Date: Thu, 23 Jan 2014 21:41:32 GMT
Mengeluarkan request (permintaan) GET ke objek berversi untuk mendapatkan versi terbaru dari objek. Anda tidak perlu melakukan apapun pengalihan permintaan atau pencarian metadata.
Daftar versi lama dari objek dalam kontainer archive:
$ curl -i $publicURL/archive?prefix=009my_object -X GET -H \
"X-Auth-Token: $token"
HTTP/1.1 200 OK
Content-Length: 30
X-Container-Object-Count: 1
Accept-Ranges: bytes
X-Timestamp: 1390513280.79684
X-Container-Bytes-Used: 0
Content-Type: text/plain; charset=utf-8
X-Trans-Id: tx9a441884997542d3a5868-0052e18d8e
Date: Thu, 23 Jan 2014 21:45:50 GMT
009my_object/1390512682.92052
Catatan
Sebuah request (permintaan) POST ke objek berversi update hanya metadata untuk objek dan tidak membuat versi baru dari objek. Versi baru diciptakan hanya bila ada perubahan isi dari objek.
Mengeluarkan request (permintaan) DELETE ke objek berversi untuk menghapus versi dari objek dan menggantinya dengan versi berikutnya terbaru dalam kontainer non-current ini.
$ curl -i $publicURL/current/my_object -X DELETE -H \
"X-Auth-Token: $token"
HTTP/1.1 204 No Content
Content-Length: 0
Content-Type: text/html; charset=UTF-8
X-Trans-Id: tx006d944e02494e229b8ee-0052e18edd
Date: Thu, 23 Jan 2014 21:51:25 GMT
Daftar objek di kontainer archive untuk menunjukkan bahwa objek diarsipkan dipindahkan kembali ke kontainer current:
$ curl -i $publicURL/archive?prefix=009my_object -X GET -H \
"X-Auth-Token: $token"
HTTP/1.1 204 No Content
Content-Length: 0
X-Container-Object-Count: 0
Accept-Ranges: bytes
X-Timestamp: 1390513280.79684
X-Container-Bytes-Used: 0
Content-Type: text/html; charset=UTF-8
X-Trans-Id: tx044f2a05f56f4997af737-0052e18eed
Date: Thu, 23 Jan 2014 21:51:41 GMT
Versi terbaru berikutnya (next-most) ini membawa dengan semua set terakhir metadata. Jika Anda ingin benar-benar menghapus objek dan Anda memiliki lima versi itu, Anda harus DELETE lima kali.
Untuk menonaktifkan objek versi kontainer current, hapuslah header metadata X-Versi-Location dengan mengirimkan nilai kunci kosong.
$ curl -i $publicURL/current -X PUT -H "Content-Length: 0" -H \
"X-Auth-Token: $token" -H "X-Versions-Location: "
HTTP/1.1 202 Accepted
Content-Length: 76
Content-Type: text/html; charset=UTF-8
X-Trans-Id: txe2476de217134549996d0-0052e19038
Date: Thu, 23 Jan 2014 21:57:12 GMT
<html><h1>Accepted</h1><p>The request is accepted for processing.</p></html>
You can utilize python-swiftclient to enable object versioning.
Create an additional container to hold previous versions:
$ swift post CONTAINER_versions
Enable object versioning on your desired container:
$ swift post CONTAINER -H "X-Versions-Location:CONTAINER-versions"
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.