API REST NetWorker : Les demandes HTTP GET expirent par intermittence

Summary: L’API (Application Program Interface) de NetWorker Representational State Transfer (REST) est utilisée pour demander des informations (HTTP GET) à un NetWorker Server dans l’environnement. Les requêtes de l’API REST expirent par intermittence et le restapi.log affiche un message d’erreur interne du serveur en raison d’un délai d’expiration du socket. ...

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

L’API (Application Program Interface) de NetWorker Representational State Transfer (REST) est utilisée pour demander des informations (HTTP GET) à un NetWorker Server dans l’environnement. Les requêtes de l’API REST expirent par intermittence et le restapi.log affiche un message d’erreur interne du serveur en raison d’un délai d’expiration du socket.  

YYYY-MM-DD HH:MM:SS INFO [https-jsse-nio-9090-exec-26] c.e.n.w.WebApiResponse - Response status Method: 'GET', URI:'v3/global/backups', Status '200'
YYYY-MM-DD HH:MM:SS INFO [https-jsse-nio-9090-exec-26] c.e.n.w.WebApiResponse - Response status Method: 'GET', URI:'v3/global/backups', Status '500'
...
YYYY-MM-DD HH:MM:SS ERROR [https-jsse-nio-9090-exec-11] c.e.n.w.WebApiExceptionMapper - Status 'Internal Server Error', msg: java.io.IOException: Broken pipe
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:333) ~[catalina.jar:9.0.10]

Une commande curl envoyée à l’API REST du NetWorker Server affiche les éléments suivants :  

[root@NetworkerServer]# curl -X GET -H "Content-Type: application/json" "https://mynsr.mydomain.com:9090/nwrestapi/v3/global/backups" -u "administrator" -k -1
Enter host password for user 'administrator':
curl: (28) Operation timed out after 300406 milliseconds with 0 out of 0 bytes received

Cause

L’API REST appelle «v3/global/backups", "v3/global/jobs« ou »v3/global/volumes" sont des requêtes gourmandes en ressources et peuvent entraîner l’expiration de la demande dans des environnements de plus grande taille.  

Remarque : Ce problème n’est pas limité aux points de terminaison d’API REST répertoriés. Elle peut se produire sur n’importe quel grand point de terminaison global et les observations peuvent varier selon les serveurs.

Les services d’API REST NetWorker sont hébergés sur un conteneur de servlet Java Apache Tomcat exécuté sur une machine virtuelle Java (JVM). L’API REST utilise la mémoire JVM pour traiter chaque demande, et il a été démontré que toute la mémoire n’est pas libérée après une requête gourmande en ressources. L’augmentation de l’utilisation de la mémoire JVM peut éventuellement entraîner l’expiration d’autres demandes d’expiration de l’API REST moins gourmandes en ressources.  

Resolution

Évitez d’utiliser des requêtes gourmandes en ressources pour récupérer des informations à partir du NetWorker Server. Par exemple, l’option «v3/global/backups« ou »v3/global/clients/CLIENT_NUMBER/backups« avec une plage de temps définie peut être utilisée à la place de la variable globale »v3/global/backups» pour récupérer toutes les sauvegardes.

Par exemple, limitez les résultats de saveTime entre n’importe quelle plage horaire spécifiée. Exemple de requête pour les tâches qui se sont terminées au cours des dernières 24 heures :
 

../global/backups exemple :

https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/backups?q=saveTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/backups?q=saveTime:["2024-07-24T00:00:01" TO "2024-07-24T23:59:59"]


../global/clients/client_resourceId_number/backups

https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/clients/client_resourceID_number/backups?q=saveTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/clients/87.0.90.20.0.0.0.0.196.80.99.102.192.168.9.150/backups?q=saveTime:["2024-07-24T00:00:01" TO "2024-07-24T23:59:59"]


../global/jobs:

https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/jobs?q=endTime:["START" TO "END"]
https://nsr.amer.lan:9090/nwrestapi/v3/global/jobs?q=endTime:["2024-07-29T00:00:01" TO "2024-07-29T23:59:59"]
Remarque : Modifiez les heures AAAA-MM-JJHH :mm :SS dans les heures de DÉBUT et de FIN en conséquence. Ces exemples sont fournis à des fins de démonstration uniquement. Des spécifications de requête d’API REST supplémentaires ou des fonctions de filtrage peuvent être requises pour renvoyer les données souhaitées. Pour plus d’informations et d’exemples, reportez-vous à la documentation de l’API REST : https://developer.dell.com/apis/2378/versions/v3/docs/GettingStarted.md

../global/volumes exemple :

https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes?q=type:"MEDIA_TYPE"&fl=location,name,mode,pool,written
https://nsr.amer.lan:9090/nwrestapi/v3/global/volumes?q=type:"Data Domain"&fl=location,name,mode,pool,written

 

Additional Information

Reportez-vous au Guide du développeur de l’API REST concernant les appels d’API NetWorker, « Query list filter » (q) et « filtre de liste de champs » (fl) paramètres.
Le débogage de l’API REST est défini dans : NetWorker : Activation du débogage de l’API

RESTVous pouvez également utiliser les tests suivants :

Utilisez les options suivantes dans la commande de l’API REST :
 

Option Objectif
--max-time 3600 Définit une limite stricte de 3 600 secondes (1 heure) pour l’ensemble du transfert (DNS, connexion, TLS, demande et corps de réponse). Si l’opération entière n’est pas terminée dans un délai de 1 heure, curl s’arrête avec une erreur de délai d’expiration.
--connect-timeout 60 Limite le temps autorisé pour établir la connexion TCP/TLS à 60 secondes. Si curl ne parvient pas à se connecter dans les 60 secondes, cette tentative échoue. Si l’option --retry est activée, il peut réessayer (sous réserve des règles de nouvelle tentative ci-dessous). Cette valeur peut être modifiée à votre discrétion. 
--retry 3 Demande à curl de réessayer jusqu’à trois fois en cas de défaillance transitoire. Cette valeur peut être modifiée à votre discrétion. 
Déclencheurs de nouvelle tentative classiques :
  • Problèmes au niveau du réseau (exemple : Délais d’expiration de la connexion, problèmes DNS, échec de l’établissement d’une liaison TLS).
  • HTTP 5xx Erreurs de serveur (exemple : 500, 502, 503, 504).
--retry-delay 5 Définit une attente fixe de 5 secondes entre les nouvelles tentatives. Après une défaillance transitoire, curl attend 5 secondes avant la prochaine tentative. Cette valeur peut être modifiée à votre discrétion. 
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" (Facultatif.) Cela n’est nécessaire que si l’hôte NetWorker utilisé pour traiter les demandes de connexion est distinct du NetWorker Server dans le point de terminaison de l’API REST. Voir :
API REST NetWorker : Comment utiliser un serveur AUTHC distant lors du traitement des demandes RESTAPI

Windows PowerShell :

curl.exe -k -v --compressed `
  --max-time 3600 `
  --connect-timeout 60 `
  --retry 3 `
  --retry-delay 5 `
  -u NETWORKER_USERNAME:'PASSWORD' `
  -H "Accept: application/json" `
  "https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes/ENDPOINT" `
| ConvertFrom-Json `
| ConvertTo-Json -Depth 20 `
| Out-File -Encoding UTF8 OUTPUT_FILE_NAME
Remarque : -Depth 20 est un paramètre pour l’attribut ConvertTo-Json . Il contrôle le nombre de niveaux d’objets imbriqués et de tableaux inclus lorsque PowerShell sérialise vos données au format JSON. Le nombre d’objets imbriqués (le cas échéant) peut varier en fonction du point de terminaison de l’API REST utilisé et des éventuels « filtres de liste de requêtes » (q) ou « filtre de liste de champs » (fl) utilisés. Une valeur de 20 devrait être plus que suffisante pour les appels de l’API REST NetWorker.
Exemple :
Exemple de commande curl
L’exemple ci-dessus a créé le fichier volumes.json fichier dans le répertoire à partir duquel curl.exe a été exécutée. Le contenu du fichier inclut la charge utile de l’API REST :
Résultat de l’API REST

Linux :

curl -k -v --compressed \
  --max-time 3600 \
  --connect-timeout 60 \
  --retry 3 \
  --retry-all-errors \
  --retry-delay 5 \
  -u NETWORKER_USERNAME:'PASSWORD' \
  -H "Accept: application/json" \
  "https://NETWORKER_SERVER_ADDRESS:9090/nwrestapi/v3/global/volumes/ENDPOINT" \
  -o volumes.json

Exemple (sans -v par souci de concision) :

[root@nsr ~]# curl -k --compressed \
  --max-time 3600 \
  --connect-timeout 60 \
  --retry 3 \
  --retry-all-errors \
  --retry-delay 5 \
  -u Administrator:'!Password1' \
  -H "Accept: application/json" \
  "https://nsr.amer.lan:9090/nwrestapi/v3/global/volumes?q=type%3A%22Data%20Domain%22&fl=location,name,mode,pool,written" \
  -o volumes.json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   908    0   908    0     0  22700      0 --:--:-- --:--:-- --:--:-- 22146

Dans cet exemple, le fichier «volumes.json" a été créé dans le même répertoire que celui à partir duquel la commande a été exécutée.
Différents outils peuvent être utilisés pour analyser correctement le formatage json, les outils utilisés peuvent varier en fonction du système d’exploitation et des logiciels installés.

[root@nsr ~]# cat volumes.json | python -m json.tool
{
    "count": 6,
    "volumes": [
        {
            "location": "ddve01.amer.lan",
            "mode": "Appendable",
            "name": "nsr.amer.lan.dddefault.001",
            "pool": "Data Domain Default",
            "written": {
                "unit": "KB",
                "value": 429
            }
        },
        {
            "location": "ddve01.amer.lan",
            "mode": "Appendable",
            "name": "nsr.amer.lan.dddefault.002",
            "pool": "Data Domain Default",
            "written": {
                "unit": "KB",
                "value": 25917027
            }
        },
        {
            "location": "ddve01.amer.lan",
            "mode": "Appendable",
            "name": "VMBackupPool.001",
            "pool": "VMBackupPool",
            "written": {
                "unit": "KB",
                "value": 209818962
            }
        },
        {
            "location": "ddve01.amer.lan",
            "mode": "Appendable",
            "name": "VMBackupPool.002",
            "pool": "VMBackupPool",
            "written": {
                "unit": "KB",
                "value": 2308309500
            }
        },
        {
            "location": "ddve02.amer.lan",
            "mode": "Appendable",
            "name": "nsr.amer.lan_c.dddefault.001",
            "pool": "Data Domain Default Clone",
            "written": {
                "unit": "KB",
                "value": 36752
            }
        },
        {
            "location": "ddve02.amer.lan",
            "mode": "Appendable",
            "name": "VMClonePool.001",
            "pool": "VMClonePool",
            "written": {
                "unit": "KB",
                "value": 0
            }
        }
    ]
}

Products

NetWorker
Article Properties
Article Number: 000172472
Article Type: Solution
Last Modified: 01 Jan 2026
Version:  10
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.