2013-06-18 4 views
0

Моя команда настраивает сервер Eucalyptus w/Walrus, который мы хотим использовать для запуска тестов на нашем C# -кодексе, который использует материал AWS от Amazon. Он почти настроен, и теперь мы получаем код, указывающий на Eucalyptus, но мы сталкиваемся с некоторыми трудностями.Вызов PutBucket на имя ведра, которое еще не существует, вызывает исключение

Мы начали с вызова PutBucket, чтобы создать ведро, которое мы будем использовать. Ведро раньше не существовало, поэтому проблем не должно быть. Тем не менее, мы получаем исключение с нулевой ссылкой со следующим стеклом:

at System.Xml.XmlReader.CalcBufferSize(Stream input) 
at System.Xml.XmlTextReaderImpl.InitStreamInput(Uri baseUri, String baseUriStr, Stream stream, Byte[] bytes, Int32 byteCount, Encoding encoding) 
at System.Xml.XmlTextReaderImpl..ctor(String url, Stream input, XmlNameTable nt) 
at System.Xml.XmlTextReader..ctor(Stream input) 
at Amazon.S3.AmazonS3Client.transform(String responseBody, String actionName, Type t) 
at Amazon.S3.AmazonS3Client.processRequestResponse[T](HttpWebResponse httpResponse, S3Request request, Type t, T& response, Exception& cause) 
at Amazon.S3.AmazonS3Client.handleHttpResponse[T](S3Request userRequest, HttpWebRequest request, HttpWebResponse httpResponse, Int32 retries, Int64 lengthOfRequest, T& response, Exception& cause, HttpStatusCode& statusCode) 
at Amazon.S3.AmazonS3Client.getResponseCallback[T](IAsyncResult result) 
at Amazon.S3.AmazonS3Client.endOperation[T](IAsyncResult result) 
at Amazon.S3.AmazonS3Client.EndPutBucket(IAsyncResult asyncResult) 
at Amazon.S3.AmazonS3Client.PutBucket(PutBucketRequest request) 
[at application library] 

Теперь вот где это странно. Когда мы проверили сервер, ведро было успешно создано! Сервер обработал запрос правильно и сделал ведро, которое мы хотели. Ответ возвращается неверно, но запрос обработан правильно. И до сих пор проблема возникает только при вызове PutBucket, потому что когда мы удаляем ведро, он успешно удаляется с сервера и никаких исключений не возникает.

До сих пор мы не понимаем, что происходит. Мы подозреваем, что есть проблема с концом Walrus. Возможно, AWS ожидает одно, а Моррус делает другое. Возможно, мы не настроили Эвкалипт и/или Морж правильно. Мы совсем не уверены.

Вот почему я размещаю вопрос здесь. Мне было любопытно, есть ли у кого-либо опыт с этим раньше, или, может быть, может дать некоторое представление. Что может заставить сервер правильно обработать запрос, но отправить обратно неверный ответ? Почему Eucalyptus сделает ведро, но AWS считает, что операция не удалась?

ответ

1

Возможно, проблема в том, что ответ на ведро Walter PUT включает тело, которое больше не включено в ответы S3 (это было так, но было удалено).

Таким образом, операция преуспевает на морже, но клиент не выполняет правильную реакцию ответа. Это часто зависит от конкретных клиентов, поскольку некоторые из них более строгие, чем другие (некоторые, например, даже не попытаются проанализировать тело ответа, если оно не ожидается для конкретного кода ответа, такого как HTTP 200 OK).

Я бы рекомендовал посмотреть, что посылается/принимается по проводам. Wireshark/tcpdump должен показать полный ответ, исходящий от Моржа. Вероятно, существует различие XML, которого достаточно, что клиент терпит неудачу. Мы в Eucalyptus работаем над устранением этих проблем по мере их возникновения, но поскольку S3 API (REST в частности) изменяется без предупреждения или с ошибкой версии, иногда ситуация меняется и SDK обновляется, прежде чем мы сможем внести изменения в Walrus.

Не стесняйтесь спрашивать о engage.eucalyptus.com помощи или поймать нас на IRC на Freenode в #eucalyptus или # эвкалипт-разви