1

オブジェクトが割り当てられた日時に 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ヘッダーがまったく表示されません。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

jclouds は現在これをサポートしていませんが、BlobBuilder.expires を X-Delete-At にマップするコミットを提案しました。

https://github.com/jclouds/jclouds/pull/227

それをテストして、ここで JIRA の問題を開くことができますか:

https://issues.apache.org/jira/browse/JCLOUDS

ありがとう!

于 2013-12-10T06:29:27.913 に答える