Object versioning

Object versioning

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 dan menggunakan objek versioning

  1. Untuk mengaktifkan objek versioning, mintalah penyedia cloud Anda untuk mengatur opsi allow_versions untuk TRUE di file konfigurasi kontainer.

  2. 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
    
  3. 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
    
  4. 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.

  5. 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
    
  6. 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.

  7. 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.

  8. 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>
    

Versioning with python-swiftclient

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"
    
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.