La maggior parte delle API middleware restituisce un oggetto SdvResult. In caso di esito positivo, questo oggetto
contiene l'oggetto risultato previsto. In caso di errore, questo oggetto contiene un oggetto
SdvStatus, che indica un comportamento imprevisto o una condizione di errore, spesso
identificata da un codice di errore, ad esempio Internal, Unavailable o DataLoss.
Questa pagina ti aiuta a risolvere i problemi relativi a questi codici di errore.
Risolvere i problemi relativi a errori di registrazione e creazione
Gli errori di registrazione e creazione si verificano in genere quando tenti di creare o registrare un servizio non valido.
Impossibile creare il secondo servizio
Errore:
Internal errore.
Causa:
Stai tentando di registrare due volte la stessa istanza del bundle di servizi (nome e ID istanza).
Correzione:
Non tentare di registrare due volte la stessa istanza del pacchetto di servizi (nome e ID istanza).
Impossibile eliminare il pacchetto di servizi duplicato
Errore:
Status(-3, EX_ILLEGAL_ARGUMENT)
Causa:
Stai tentando di eliminare un pacchetto di servizi duplicato che non esiste.
Correzione:
Non tentare di eliminare un pacchetto di servizi duplicato che non esiste.
Impossibile recuperare un'istanza publisher per l'invio di messaggi
Errore:
Chiamata a take_publisher() restituisce none.
Causa:
Hai chiamato take_publisher() due volte per la stessa variante dalla stessa istanza del bundle di servizi.
Correzione:
Non chiamare take_publisher() due volte per la stessa variante della stessa istanza del pacchetto di servizi.
Impossibile creare un abbonato, un osservatore, una cronologia o un InstantReader
Errore:
Unavailable errore.
Causa:
Hai tentato di creare un Subscriber, Observer, History o InstantReader
per un editore inesistente o cancellato.
Correzione:
Verifica che l'editore esista o sia registrato prima di provare a creare un
Subscriber, Observer, History o InstantReader per l'editore.
Impossibile creare il client RPC
Errore:
Unavailable errore
Causa:
Hai tentato di creare un client RPC per un nome di unità server che non esiste o non è registrato.
Correzione:
Verifica che il server esista e sia registrato prima di creare il client RPC.
Risolvere gli errori di comunicazione
Gli errori di comunicazione possono verificarsi dopo l'esecuzione di un servizio e l'inizio della comunicazione con altri servizi.
Risolvere i problemi di annullamento della registrazione del publisher
Possono verificarsi errori quando un editore annulla la registrazione mentre i suoi lettori sono ancora attivi.
read_next_messages() del sottoscrittore restituisce elenchi vuoti
Errore:
read_next_messages() ha esito positivo, ma restituisce elenchi vuoti.
Causa:
L'editore viene annullato mentre i suoi lettori sono attivi.
Correzione:
Utilizza un abbonato o una cronologia con uno stream di disponibilità. Se l'ultimo messaggio dello stream di disponibilità non è disponibile, l'editore viene annullato e non ci sono nuovi messaggi.
Observer's next() returns internal error
Errore:
next() restituisce l'errore Internal.
Causa:
L'editore viene annullato mentre i suoi lettori sono attivi.
Correzione:
Utilizza un abbonato o una cronologia con uno stream di disponibilità. Se l'ultimo messaggio dello stream di disponibilità non è disponibile, l'editore non è più presente e non ci sono nuovi messaggi.
read_from_history() di History non restituisce nuovi messaggi
Errore:
read_from_history() non restituisce nuovi messaggi, ma solo quelli più vecchi.
Causa:
L'editore viene annullato mentre i suoi lettori sono attivi.
Correzione:
Utilizza un abbonato o una cronologia con uno stream di disponibilità. Se l'ultimo messaggio dello stream di disponibilità non è disponibile, l'editore non è più presente e non ci sono nuovi messaggi.
InstantReader read_latest_message() restituisce un errore interno
Errore:
read_latest_message() restituisce l'errore Internal.
Causa:
L'editore viene annullato mentre i suoi lettori sono attivi.
Correzione:
Utilizza un abbonato o una cronologia con uno stream di disponibilità. Se l'ultimo messaggio dello stream di disponibilità non è disponibile, l'editore non è più presente e non ci sono nuovi messaggi.
Risolvere i problemi relativi a una coda dei messaggi vuota
Si possono verificare errori durante il tentativo di lettura da una coda di messaggi vuota.
read_next_messages() del sottoscrittore restituisce un elenco vuoto
Errore:
read_next_messages() restituisce correttamente un elenco vuoto.
Causa:
L'editore è attivo, ma non ha inviato messaggi.
Correzione:
Utilizza un abbonato o una cronologia con uno stream di disponibilità. Se l'ultimo messaggio dello stream di disponibilità è disponibile, il publisher è attivo e non ci sono nuovi messaggi.
Observer's next() returns internal error
Errore:
next() restituisce l'errore Internal.
Causa:
L'editore è attivo, ma non ha inviato messaggi.
Correzione:
Utilizza un abbonato o una cronologia con uno stream di disponibilità. Se l'ultimo messaggio dello stream di disponibilità è disponibile, il publisher è attivo e non ci sono nuovi messaggi.
read_from_history() di History non restituisce nuovi messaggi
Errore:
read_from_history() restituisce correttamente un elenco vuoto.
Causa:
L'editore è attivo, ma non ha inviato messaggi.
Correzione:
Utilizza un abbonato o una cronologia con uno stream di disponibilità. Se l'ultimo messaggio dello stream di disponibilità è disponibile, il publisher è attivo e non ci sono nuovi messaggi.
InstantReader read_latest_message() restituisce un errore interno
Errore:
read_latest_message() restituisce l'errore Internal.
Causa:
L'editore è attivo, ma non ha inviato messaggi.
Correzione:
Utilizza un abbonato o una cronologia con uno stream di disponibilità. Se l'ultimo messaggio dello stream di disponibilità è disponibile, il publisher è attivo e non ci sono nuovi messaggi.
Risolvere i problemi relativi al buffer overflow o alla perdita di dati
Gli errori possono verificarsi quando l'editore invia messaggi a una velocità superiore a quella con cui un lettore può consumarli.
La prima lettura di un abbonato dopo un overflow restituisce l'errore DataLoss
Errore:
read_next_message() restituisce l'errore DataLoss.
Causa:
L'editore invia messaggi a una velocità superiore a quella con cui un lettore può consumarli.
Correzione:
Il primo next() di Observer dopo un overflow restituisce l'errore DataLoss
Errore:
next() restituisce l'errore DataLoss.
Causa:
L'editore invia messaggi a una velocità superiore a quella con cui un lettore può consumarli.
Correzione:le potenziali correzioni sono:
L'editore pubblica a una velocità inferiore. Ad esempio, potresti avere una variabile con il timestamp dell'ultimo messaggio. Se l'ora corrente è inferiore all'ultima ora di pubblicazione più un delta, non pubblichi il messaggio. Utilizzando questo meccanismo, viene pubblicato al massimo un messaggio per delta.
Il consumer utilizza un oggetto
InstantReadanziché un osservatore. Un oggettoInstantReadnon restituisce errori di overflow e restituisce sempre l'ultimo messaggio. Se l'ultimo messaggio è l'unico che ti interessa, puoi utilizzare un oggettoInstantReadanziché un osservatore.Il consumatore implementa il campionamento. Se la tua soluzione ha un publisher (P1) che pubblica messaggi più velocemente di quanto l'osservatore (O1) possa leggerli, puoi creare un nuovo publisher (P2) e un nuovo osservatore (O2) per adattarsi alla differenza di velocità di pubblicazione e lettura.
Ad esempio, supponiamo che P1 pubblichi un messaggio ogni 10 ms, ma O1 possa leggere solo un messaggio ogni 100 ms ed elimini i nove messaggi rimanenti. Per risolvere la discrepanza, crea una soluzione che segua questi passaggi:
- P1 pubblica messaggi su O2.
- O2 legge un messaggio e ne elimina nove.
- O2 invia il messaggio letto a P2.
- P2 invia a O1 il messaggio letto.
- O1 legge un messaggio ogni 10 secondi.
Il seguente codice di esempio mostra come implementare questo scenario di campionamento:
int discarded_message = 10; while (true) { message m = O2.read_message(); if discarded_message == 10 { discarded_message = 0; P2.publish(m); } else { discarded_message ++; } }
Le letture della cronologia sono incomplete
Errore:
Il messaggio viene perso prima della copia della cronologia. Nessuna notifica di errore diretta alla lettura.
Causa:
L'editore invia messaggi a una velocità superiore a quella con cui un lettore può consumarli.
Correzione:
InstantReader legge solo l'ultimo messaggio
Errore:
Il messaggio viene perso prima della copia della cronologia. Nessuna notifica di errore diretta alla lettura.
Causa:
L'editore invia messaggi a una velocità superiore a quella con cui un lettore può consumarli.
Correzione:
N/D
Il client RPC chiama un metodo e il metodo non è disponibile
Errore:
La chiamata al metodo non riesce e viene generato l'errore Unavailable.
Causa:
SDV non conosce il nome del server e restituisce Unavailable. Questo errore viene
restituito dal middleware se Service Discovery non restituisce un nome server valido.
Correzione:
Avvia un bundle di servizi che definisce un server per l'interfaccia specificata che il
client vuole utilizzare.
L'implementazione lato server restituisce l'errore SdvStatus
Errore:
L'implementazione lato server restituisce un SdvResult contenente un errore SdvStatus, ad esempio SdvStatusCode::NotFound. L'errore viene propagato al
client chiamante.
Causa:
SDV e il sistema di comunicazione tra client e server funzionano come previsto, ma il client ha effettuato una richiesta che attiva un errore nel server.
Correzione:
Invia una richiesta valida con il client o correggi il server in modo che risponda correttamente a queste richieste.