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.
Updated by hidden about 3 years ago
- Status changed from New to In Progress
- Topic set to ADTF::FilterSDK
Updated by hidden about 3 years ago
- Status changed from In Progress to Customer Feedback Required
- Product Issue Numbers set to https://www.cip.audi.de/jira/browse/ACORE-9702
Hallo Claudia,
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.
Bis dahin musst du dich noch gedulden, ich würde hier noch keinen unnötigen Workaround skizzieren und auf die Bordmittel warten.
Oder bist du aktuell darauf angewiesen ?
@Martin: Ergänzungen ?
Updated by hidden about 3 years ago
Hi zusammen,
der Workaround ist sehr einfach, deshalb schildere ich ihn trotzdem, auch wenn Flo mit allem genau richtig liegt:
Claudia, nimm einfach vorrübergehend zusätzlich die adtf::base::handle_error(...) methode (https://support.digitalwerk.net/adtf/v3/adtf_html/error__handling__intf_8h.html#af3c0810219cf0eb6e29b3a811882b756) im Fall, dass du Stoppen möchtest und gib als Default Action "Stop" an.
Grüße,
Martin
Updated by hidden about 3 years ago
Hallo zusammen,
ich hatte mir schon gedacht, dass ich die Session nicht stoppen kann, weil die AcceptType Methode anders gedacht ist.
In meinem Fall weiß ich jedoch, dass über den Pin nur ein ganz bestimmter StreamType kommen darf (weil die Konfig so abgestimmt ist). Wenn dieser nicht kommt gehen wir von einer fehlerhaften Konfiguration aus.
Mein Kunde wünscht sich daher ein Stoppen der Session bzw. wir wollen dem User ermöglichen, via Filter-Property, einzustellen, welche Reaktion er sich wünscht.
Ich werde mit dem Kunden absprechen, ob wir noch auf die Version 3.12 warten können/wollen.
Viele Grüße
Claudia
Updated by hidden about 3 years ago
Hi Claudia,
Ich werde mit dem Kunden absprechen, ob wir noch auf die Version 3.12 warten können/wollen.
Das wäre der präferierte Weg, weil dann kümmert sich ADTF global darum, egal um welche Komponente dass es geht.
Wenn die Lösung schon jetzt sein muss, dann kannst du das temporär wie von Martin in #13344#note-3 beschrieben selber machen (Property und Option oder feste Reaktion, wie du willst).
Mit wäre nur wichtig, dass die Funktionalität dann umgestellt wird, sobald das Feature in ADTF verfügbar ist.
Updated by hidden about 3 years ago
Hallo Florian,
wir haben beschlossen auf ADTF 3.12 zu warten. Ich würde sagen, ihr könnt das Ticket derweil schließen. Falls ich später mit der Umsetzung Probleme haben sollte, kann ich ja ein neues Ticket erstellen.
Viele Grüße
Claudia
Updated by hidden about 3 years ago
- Project changed from 11 to Public Support
- Subject changed from ADTF Session bei falschem Stream Type stoppen to Stop ADTF Session in case of wrong Stream Type
- Description updated (diff)
- Status changed from Customer Feedback Required to To Be Closed
- Private changed from Yes to No
- Resolution set to Workaround Available
- Support Level changed from 2nd Level to 3rd Level