Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ocpp: async RemoteStartTransaction by StatusNotification #15872

Merged
merged 13 commits into from
Sep 5, 2024

Conversation

premultiply
Copy link
Member

@premultiply premultiply commented Sep 2, 2024

Fixes #15857
Fixes #15552 (comment)

@premultiply premultiply added enhancement New feature or request devices Specific device support labels Sep 2, 2024
@premultiply premultiply marked this pull request as ready for review September 2, 2024 22:51
@premultiply
Copy link
Member Author

@andig Bitte mal nochmal kritisch auf Locking etc. schauen.

Funktioniert zumindest im lokalen Test damit nun wie erwartet - und schnell.

charger/ocpp/connector.go Outdated Show resolved Hide resolved
charger/ocpp/connector.go Outdated Show resolved Hide resolved
charger/ocpp/connector_core.go Outdated Show resolved Hide resolved
charger/ocpp/connector_core.go Outdated Show resolved Hide resolved
premultiply and others added 3 commits September 4, 2024 21:41
charger/ocpp.go Outdated Show resolved Hide resolved
charger/ocpp/connector.go Outdated Show resolved Hide resolved
charger/ocpp/connector.go Outdated Show resolved Hide resolved
charger/ocpp.go Outdated Show resolved Hide resolved
Copy link
Member

@andig andig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hab ich ganz bewusst so umgebaut.

Sollten wir trotzdem ändern. Es ist schlechte Kapselung, in eine Komponente rein zu greifen um Daten wieder an die gleiche Komponente zu übergeben. Das ist Spaghetticode ;)

charger/ocpp.go Outdated Show resolved Hide resolved
charger/ocpp.go Outdated Show resolved Hide resolved
@andig
Copy link
Member

andig commented Sep 5, 2024

Wäre klasse das eine defer noch zu entsorgen falls möglich.

@premultiply
Copy link
Member Author

Wird gebraucht um erst die Bestätigung der StatusNotification zu senden und dann erst RemoteStartTransaction auszuführen.
Andernfalls währe das verschachtelt und synchron und mit Deadlock-Risiko.

@andig
Copy link
Member

andig commented Sep 5, 2024

Verstehe ich nicht ;) Gehts oder gehts nicht? Wir sollten nicht raten... Ein CP muss immer asynchron arbeiten können. Ich sehe kein Deadlockrisiko ausser in der Library.

@premultiply premultiply merged commit 901e487 into master Sep 5, 2024
6 checks passed
@premultiply premultiply deleted the fix/ocpp-async-remotestart branch September 5, 2024 18:17
@premultiply
Copy link
Member Author

Muss ist so ein unpassendes Wort bei OCPP wie wir gelernt haben. ;)
Also Risikominimierung und definitiv übersichtlichere Logs.

@andig
Copy link
Member

andig commented Sep 5, 2024

Der Grund, dass das Log hier unübersichtlich ist liegt einfach daran, dass die Funktion auf den Roundtrip wartet. Die Lösung wäre nur das Start zu schicken und nicht auf die Antwort zu warten. Dass ist eh sinnlos da außer Logging nichts damit passiert, insbesondere ja auch kein Retry.

Was mir noch auffällt: falls das scheitert gibt es beim Enable() keinen erneuten Versuch eine Transaktion zu starten. Das ist hier also einmal oder nicht.

@andig
Copy link
Member

andig commented Sep 7, 2024

Noch eine Anmerkung zum defer: das defer passiert nach Funktions-Body, aber vor Return. Mit anderen Worten: auch mit defer ändert sich gar nichts daran, dass die innere Nachricht vollständig abgearbeitet wird bevor die äußere abgeschlossen wird. Es wäre super, hier auf konkrete Ergebnisse aufzusetzen statt auf Mutmaßungen.

@andig andig mentioned this pull request Sep 7, 2024
@premultiply
Copy link
Member Author

premultiply commented Sep 7, 2024

Ich kann mich nur daran halten was ich im Log sehe.
Da funktioniert es nur mit defer wie erwartet.

@premultiply
Copy link
Member Author

Wenn das nicht reicht müsste man irgendwie völlig asynchron starten.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
devices Specific device support enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

OCPP: Move transaction logic to StatusNotification callback OCPP EN+ AC7000-AE-45 unstable
2 participants