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.