Support Request #13344
closedStop ADTF Session in case of wrong Stream Type
Description
Supportanfrage
ich habe in der Filter-Methode AcceptType(ISampleReader* pReader, const iobject_ptr<const IStreamType>& pType)
eine Überprüfung des Input-Typs implementiert. Dies funktioniert auch soweit, dass bei Nicht-Akzeptanz keine Daten an den Reader weitergeleitet werden. Auf der Console lasse ich mir zusätzlich einen Warnhinweis ausgeben.
Nun möchte ich diesen Warnhinweis umwandeln in ein Stoppen der ADTF Session. An anderen Stellen im Code klappt dies mittels RETURN_ERROR_DESC(ERR_INVALID_TYPE, "Fehlerbeschreibung");
In der AcceptType Methode geht dies jedoch nicht. Auch THROW_ERROR_DESC(ERR_INVALID_TYPE, "Fehlerbeschreibung");
hat keinen Effekt.
Wie kann ich aus jener Methode heraus die Session beenden?
Lösung
ich habe in der Filter-Methode AcceptType(ISampleReader* pReader, const iobject_ptr<const IStreamType>& pType) eine Überprüfung des Input-Typs implementiert. Dies funktioniert auch soweit, dass bei Nicht-Akzeptanz keine Daten an den Reader weitergeleitet werden.
Genau das ist der Use Case und die einzige Entscheidungsgewalt, die vom Filter bzw. dessen AcceptType Funktion ausgehen darf, nämlich dass der Reader den ungültigen Stream Type ignoriert und wartet bis ein passender kommt (kann sich ja theoretisch in ADTF 3 ändern)
Das ist wie gesagt nicht der Scope eines Filters, stell dir vor es gibt Use Cases wo andere Systeme weiterlaufen sollen oder auch sich Begebenheiten (Stream Type) ändern.Nun möchte ich diesen Warnhinweis umwandeln in ein Stoppen der ADTF Session. An anderen Stellen im Code klappt dies mittels RETURN_ERROR_DESC(ERR_INVALID_TYPE, "Fehlerbeschreibung");
In der AcceptType Methode geht dies jedoch nicht. Auch THROW_ERROR_DESC(ERR_INVALID_TYPE, "Fehlerbeschreibung"); hat keinen Effekt.
Wie kann ich aus jener Methode heraus die Session beenden?
Der Filter sollte aber entsprechenden Fehlerfall (Stream Error) setzen können, was mit deinen Vorgehen der Fall ist und seit ADTF 3.4.0 möglich ist:
- [ACORE-9243] - Global Error Handling
- [ACORE-9702] - Create configurable Error Handling Service
Das muss aber wie gesagt noch umgesetzt werden, ich denke das bekommen wir im ersten Quartal ggf. schon in ADTF 3.12 hin.
Als Workaround kannst du vorrübergehend die adtf::base::handle_error(...) methode im Fall nehmen, dass du Stoppen möchtest und gib als Default Action "Stop" an.