Project

General

Profile

Actions

Support Request #13344

closed

Stop ADTF Session in case of wrong Stream Type

Added by hidden over 3 years ago. Updated over 2 years ago.

Status:
Closed
Priority:
Normal
Customer:
AUDI
Department:
EF
Requester's Priority:
Normal
Support Level:
3rd Level
Resolution:
Workaround Available
Affected Products:
Platform:
Topic:
ADTF::FilterSDK
FAQ Links:

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)

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?

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.
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
Was aktuell noch fehlt und im Frühjahr entsteht ist ein Service der es erlaubt, daraus Folgeaktionen abzuleiten, zb Warn, ignore oder wie in deinen Fall Stop:
  • [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.

Actions

Also available in: Atom PDF