API REST NetWorker: Le richieste HTTP GET sono in timeout intermittente

Summary: L'API (Application Program Interface) REST (Representational State Transfer) di NetWorker viene utilizzata per richiedere informazioni (HTTP GET) da un server NetWorker nell'ambiente. Si verifica il timeout intermittente delle query dell'API REST e il restapi.log mostra un messaggio di errore del server interno a causa di un timeout del 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) REST (Representational State Transfer) di NetWorker viene utilizzata per richiedere informazioni (HTTP GET) da un server NetWorker nell'ambiente. Si verifica il timeout intermittente delle query dell'API REST e il restapi.log mostra un messaggio di errore del server interno a causa di un timeout del 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]

Un comando curl per l'API REST del server NetWorker mostra:  

[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

Le chiamate API REST "v3/global/backups", "v3/global/jobs", oppure "v3/global/volumes" da solo sono query a uso intensivo di risorse e possono causare il timeout della richiesta in ambienti più grandi.  

NOTA: Questo problema non è limitato agli endpoint API REST elencati. Può verificarsi su qualsiasi endpoint globale di grandi dimensioni e le osservazioni possono variare in base al server.

I servizi API REST di NetWorker sono in hosting su un container servlet Java Apache Tomcat eseguito su una JVM (Java Virtual Machine). L'API REST utilizza la memoria JVM per elaborare ogni richiesta ed è stato dimostrato che non tutta la memoria viene rilasciata dopo una query a uso intensivo di risorse. L'aumento dell'utilizzo della memoria JVM può infine causare il timeout di altre richieste API REST meno dispendiose in termini di risorse.  

Resolution

Evitare di utilizzare le richieste a uso intensivo di risorse per recuperare informazioni dal server NetWorker. Ad esempio, il "v3/global/backups" oppure "v3/global/clients/CLIENT_NUMBER/backups" con un intervallo di tempo definito può essere utilizzato al posto del "v3/global/backups" per recuperare tutti i backup.

Ad esempio, limitare i risultati per saveTime in un intervallo di tempo specificato. Esempio di query per i processi completati nelle ultime 24 ore:
 

../global/backups Esempio:

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"]
NOTA: Modificare di conseguenza YYYY-MM-DDTHH:mm:SS nelle ore START e END. Questi esempi sono forniti solo a scopo dimostrativo. Per restituire i dati desiderati, potrebbero essere necessarie specifiche di query dell'API REST o funzioni di filtro aggiuntive. Ulteriori informazioni ed esempi sono disponibili nella documentazione dell'API REST: https://developer.dell.com/apis/2378/versions/v3/docs/GettingStarted.md

../global/volumes Esempio:

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

Consultare la Guida per gli sviluppatori di API REST sulle chiamate API NetWorker, "query list filter" (q) e "filtro elenco campi" (fl) impostazioni.
Il debug API REST è definito in: NetWorker: Come abilitare il

debug API RESTIn alternativa, è possibile utilizzare i seguenti test:

Utilizzare le seguenti opzioni nel comando API REST:
 

Opzione Scopo
--max-time 3600 Imposta un limite rigido di 3.600 secondi (1 ora) per l'intero trasferimento (DNS, connessione, TLS, corpo della richiesta e della risposta). Se l'intera operazione non viene completata entro 1 ora, curl si interrompe con un errore di timeout.
--connect-timeout 60 Limita a 60 secondi il tempo consentito per stabilire la connessione TCP/TLS. Se curl non riesce a connettersi entro 60 secondi, il tentativo non riesce. Con l'opzione --retry abilitata, è possibile riprovare (in base alle regole seguenti). Questo valore può essere modificato a discrezione dell'utente. 
--retry 3 Indica a curl di riprovare fino a tre volte in caso di errori temporanei. Questo valore può essere modificato a discrezione dell'utente. 
Trigger tipici di tentativi:
  • Problemi a livello di rete (ad esempio: Timeout di connessione, problemi DNS, errori di handshake TLS).
  • HTTP 5xx Errori del server (ad esempio: 500, 502, 503, 504).
--retry-delay 5 Imposta un'attesa fissa di 5 secondi tra i tentativi. Dopo un errore temporaneo, curl attende 5 secondi prima del tentativo successivo. Questo valore può essere modificato a discrezione dell'utente. 
-H "X-NW-AUTHC-BASE-URL:REMOTE_AUTHC_SERVER_ADDRESS:9090" (Facoltativo). Questa operazione è necessaria solo se l'host NetWorker utilizzato per elaborare le richieste di accesso è separato dal server NetWorker nell'endpoint API REST. Vedere:
API REST NetWorker: Come utilizzare un server AUTHC remoto durante l'elaborazione delle richieste 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
NOTA: -Depth 20 è un parametro per PowerShell ConvertTo-Json . Controlla il numero di livelli di oggetti e matrici nidificati inclusi quando PowerShell serializza i dati in JSON. Il numero di object nidificati (se presenti) può variare a seconda dell'endpoint API REST utilizzato e di qualsiasi potenziale "filtro elenco query" (q) o "filtro elenco campi" (fl) parametri utilizzati. 20 dovrebbe essere più che sufficiente per le chiamate API REST di NetWorker.
Esempio:
Esempio di comando curl
L'esempio precedente ha creato il volumes.json file nella directory da cui curl.exe è stato eseguito. Il contenuto del file include il payload dell'API REST:
Output dell'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

Esempio (senza -v per brevità):

[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

In questo esempio, il file "volumes.json" è stato creato nella stessa directory da cui è stato eseguito il comando.
È possibile utilizzare diversi strumenti per analizzare correttamente la formattazione json; gli strumenti utilizzati possono variare a seconda del sistema operativo e del software installato.

[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.