Project

General

Profile

Actions

Support Request #13344

closed

Stop ADTF Session in case of wrong Stream Type

Added by hidden about 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 #1

Updated by hidden about 3 years ago

  • Status changed from New to In Progress
  • Topic set to ADTF::FilterSDK
Actions #2

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)

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

Actions #3

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

Actions #4

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

Actions #5

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.

Actions #7

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

Actions #8

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
Actions #9

Updated by hidden over 2 years ago

  • Status changed from To Be Closed to Closed
Actions

Also available in: Atom PDF