Срок действия объектов Swift с jclouds

Я пытаюсь установить срок действия объекта во время загрузки PUT моих объектов в мое кольцо Swift с помощью jclouds, чтобы объекты были удалены из Swift в назначенную дату/время.

Я могу сделать это вручную с помощью cURL и поместить объект в Swift с датой истечения срока действия. При этом используются заголовки X-Delete-At или X-Delete-After. См. документацию по openstack 1 и документы openstack 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, похоже, что это не имеет никакого эффекта. Я вообще не вижу заголовка X-Delete-At в захвате пакета Wireshark.

Любая помощь приветствуется. Спасибо!


person canderso    schedule 10.12.2013    source источник


Ответы (1)


jclouds в настоящее время не поддерживает это, но я предложил коммит, который сопоставляет BlobBuilder.expires с X-Delete-At:

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

Можете ли вы протестировать его и открыть задачу JIRA здесь:

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

Спасибо!

person Andrew Gaul    schedule 10.12.2013