HP-Cloud Storage: невозможно загрузить большой двоичный объект с полезной нагрузкой

Вот пример моего кода:

    Properties props = new Properties();
    props.setProperty(KeystoneProperties.CREDENTIAL_TYPE, CredentialTypes.API_ACCESS_KEY_CREDENTIALS);
    context = ContextBuilder.newBuilder("hpcloud-objectstorage")
        .overrides(props)
        .credentials(api_key, api_secret)
        .buildView(BlobStoreContext.class);
    store = context.getBlobStore();

    // this works
    Blob blob1 = store.blobBuilder("file1")
        .payload("")
        .build();

    String blobName1 = store.putBlob(remoteFolderName, blob1);

    // this crashes with the message, you can see below
    Blob blob2 = store.blobBuilder("file2")
        .payload("a")
        .build();

    String blobName1 = store.putBlob(remoteFolderName, blob2);

сообщение об исключении, которое я получаю после выполнения этого кода, выглядит следующим образом:

    Nov 07, 2012 7:08:44 PM org.jclouds.logging.jdk.JDKLogger logError
    Schwerwiegend: Cannot retry after server error, command has exceeded retry limit 5: [method=HPCloudObjectStorageAsyncApi.putObject, request=PUT https://region-a.geo-1.objects.hpcloudsvc.com/v1/82797321453196/cloudstoretest/file2 HTTP/1.1]

вот трассировка стека:

    org.jclouds.http.HttpResponseException: Unexpected end of file from server connecting to PUT https://region-a.geo-1.objects.hpcloudsvc.com/v1/82797321453196/cloudstoretest/tada%21 HTTP/1.1
    at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:179)
    at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:135)
    ...

Я понятия не имею, в чем может быть проблема. Ищу 2 дня возможные решения, но безрезультатно. Буду очень рад, если кто-то подскажет, что я делаю не так...


person BloodyD    schedule 07.11.2012    source источник


Ответы (1)


похоже, что имя вашего блоба буквально "тада!" на основе URL-адреса, закодированного как "tada%21"

вполне возможно, что реализация openstack swift не поддерживает большие двоичные объекты с именами, включающими завершающий «!». Можете ли вы попробовать другие соглашения об именах и посмотреть, есть ли у вас такая же ошибка?

person Adrian Cole    schedule 17.11.2012
comment
Сорри, «тада!» — это моя ошибка при попытке отредактировать код для этого поста. Я пробовал этот код с разными именами, и он не работал. - person BloodyD; 19.11.2012
comment
Настоящая проблема заключается в том, что вы передаете .payload() строку. Я решил эту проблему, передав FileInputStream (файла, который я хочу загрузить) в полезную нагрузку. Теперь это работает. Я думаю, что если вы передадите строку, она будет обработана как путь к файлу. - person BloodyD; 19.11.2012