2016-10-14 4 views
0

Lorsque vous utilisez la commande ci-dessous, nous obtenons une réponse en retour avec une charge utile 145MB JSON:Softlayer appel API (à VirtualGuests) retourne énorme réponse dupliquée

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 

En regardant nos journaux il y a de quelques semaines, le même appel nous a donné une réponse d'environ ~ 300KB. Nous pensons donc qu'il s'agit d'un bogue récent dans l'implémentation de l'API Softlayer. En regardant la réponse json, il y a énormément de répétitions. Les détails de chaque machine virtuelle sont répétés 394 fois.


Nous avons expérimenté différents appels d'API, et avons identifié une solution de contournement: utiliser tagReferences.tag.name au lieu de 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 

Nous avons frappé ce problème dans Apache Brooklyn, en utilisant jclouds (voir le Brooklyn issue, et la solution de contournement ajoutée à jclouds dans https://github.com/jclouds/jclouds/pull/1020). Ceux qui utilisent les versions de jclouds GA existantes continueront à être affectés par cela. Est-ce que SoftLayer peut confirmer si c'est un bug de leur côté, si et quand il sera corrigé, et s'il y a une meilleure solution de contournement?

Répondre

0

Ce n'est pas un bogue, car vous utilisez un objectMask pour récupérer des données supplémentaires. Dans ce cas, tagReferences affiche "Object relation information". C'est pourquoi les détails de la machine virtuelle sont répétés plus d'une fois. Néanmoins, vous pouvez contrôler ces informations comme vous l'avez fait dans votre deuxième requête: tagReferences.tag.name. En outre, il est possible d'obtenir plus d'un seul attribut d'objet ou attributs imbriqués, comme dans cet exemple de masque:

objectMask = masque [tagReferences [id, tagTypeId, client [address1, ville]]]

En note, si vous êtes sûr que les données sont répétées et que cela n'a rien à voir avec les données d'attributs relationnels, je vous suggère de soumettre un ticket au support SoftLayer.

+0

J'ai d'abord soumis un ticket au support de Softlayer - ils m'ont dit "En ce qui concerne vos questions de l'API, vous devriez le diriger vers le lien suivant car ils pourraient mieux vous aider dans ce cas." –

+0

Répéter chaque VM 394 fois semble très excessif et surprenant - je ne pense pas que ce soit juste avec des données d'attributs relationnels. Il y a quelques semaines, nous obtenions ~ 300KB; maintenant nous obtenons 154 Mo dans la réponse (sans un nombre significativement différent de machines virtuelles). Je vais donc le soulever à nouveau avec le support de Softlayer. –