オブジェクトが割り当てられた日時に Swift から削除されるように、jclouds を使用してオブジェクトを Swift リングに PUT アップロードする際にオブジェクトの有効期限を設定しようとしています。
cURL を使用してこれを手動で行い、オブジェクトを Swift に有効期限付きで PUT することができます。これは、X-Delete-AtまたはX-Delete-Afterヘッダーを利用します。これらのヘッダーの詳細については、openstack docs 1 および openstack docs 2 を参照してください。
ただし、jclouds を使用して同じことを行うことはできませんでした。jclouds をすばやく検索しても X-Delete- ヘッダーのいずれも見つかりませんでした。そのため、メッセージ ペイロードでこれらのヘッダーを手動で設定しない限り、これは直接サポートされていないと思います。
明確化のポイント: これらのヘッダーは、オブジェクト ユーザー メタデータとして設定できません。たとえば、オブジェクトにX-Delete-Atのユーザー メタデータ キーを設定すると、 X-Object-Meta-x-delete-atという形式のヘッダーが生成されますが、swift はオブジェクトの有効期限として認識しません。
これを行うためにカスタム ヘッダーを HTTP PUT 操作 (ユーザー メタデータではない) に追加する方法があるかどうかを調べようとしています。cURL を使用すると、次のように簡単に追加できます。
-H "X-Delete-After:60"
to the cURL command for the PUT operation (i.e., expire the object in 60 seconds). I assume the same can be done with jclouds. This is what I have so far:
public String writeToStore(String name, InputStream payload) {
BlobStore bs = prepareContext().
getBlobStore();
Blob b = bs.
blobBuilder(name).
// userMetadata(mymeta).
payload(payload).
contentType("image/jpeg").
build();
// Get current headers
Multimap<String,String> headers = b.getAllHeaders();
// Add new header & set expire date to 1 year in the future (seconds since epoch)
headers.put("X-Delete-At", "1418148027");
// Set headers including new header just added
b.setAllHeaders(headers);
return bs.putBlob(containerName, b);
}
ここにX-Delete-Atヘッダーを追加したにもかかわらず、効果がないようです。パケットの Wireshark キャプチャにX-Delete-Atヘッダーがまったく表示されません。
どんな助けでも大歓迎です。ありがとう!