2016-10-14 2 views
0

При использовании следующей команды, мы получаем обратно ответ с 145MB JSon полезной нагрузкой:Softlayer API вызов (для VirtualGuests) возвращает огромный дублированный ответ

curl -uuser:api-key https://api.softlayer.com/rest/v3/SoftLayer_Account/VirtualGuests?objectMask=powerState%3BoperatingSystem.passwords%3Bdatacenter%3BbillingItem%3BblockDevices.diskImage%3BtagReferences 
% Total % Received % Xferd Average Speed Time Time Time Current 
          Dload Upload Total Spent Left Speed 
12 145M 12 18.0M 0 0 321k 0 0:07:44 0:00:57 0:06:47 401k 

Глядя на наших бревнах пары недель назад, то же самое звонок дал нам ответ примерно ~ 300 КБ. Поэтому мы считаем, что это недавняя ошибка в реализации API Softlayer.


Глядя на ответ json, происходит огромное количество повторений. Детали каждой виртуальной машины повторяются 394 раза.


Мы экспериментировали с различными вызовами API, и определили обходной путь: использовать tagReferences.tag.name вместо tagReferences:

curl -uuser:api-key https://api.softlayer.com/rest/v3/SoftLayer_Account/VirtualGuests?objectMask=powerState%3BoperatingSystem.passwords%3Bdatacenter%3BbillingItem%3BblockDevices.diskImage%3BtagReferences.tag.name 
% Total % Received % Xferd Average Speed Time Time Time Current 
          Dload Upload Total Spent Left Speed 
100 277k 100 277k 0 0 77421 0 0:00:03 0:00:03 --:--:-- 77426 

Мы поражаем эту проблему в Apache Brooklyn, используя jclouds (см Brooklyn issue и обходной путь добавлен в jclouds в https://github.com/jclouds/jclouds/pull/1020). Те, кто использует существующие выпуски jclouds GA, по-прежнему будут затронуты этим.

Может ли SoftLayer подтвердить, является ли это ошибкой на их стороне, если и когда она будет исправлена, и есть ли лучшее обходное решение?

ответ

0

Это не ошибка, потому что вы используете objectMask для получения дополнительных данных. В этом случае tagReferences отображает «Реляционная информация объекта». Вот почему детали VM повторяются более одного раза. Тем не менее вы можете управлять этой информацией так же, как и во втором запросе: tagReferences.tag.name. Кроме того, можно получить больше, чем один атрибут объекта или вложенные атрибуты, такие в этой маске, например:

objectMask = маска [tagReferences [идентификатор, tagTypeId, клиент [address1, город]]]

В качестве примечания, если вы уверены, что данные повторяются и не связаны с данными реляционных атрибутов, я бы предложил отправить билет на поддержку SoftLayer.

+0

Я подал заявку на поддержку Softlayer в первую очередь - они сказали: «Что касается ваших вопросов API, вы должны направить их на следующую ссылку, поскольку они смогут лучше помочь вам в этом случае». –

+0

Повторение каждой VM 394 раз кажется очень чрезмерным и неожиданным - я не думаю, что это просто связано с данными реляционных атрибутов. Пару недель назад мы получали ~ 300 КБ; теперь мы получаем 154 МБ в ответе (без значительного разного количества виртуальных машин). Поэтому я снова подниму его поддержкой Softlayer. –

Смежные вопросы