InMemorySessionService.appendEvent recreates a deleted session
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 84/100
Rechercherichtung
Beginne bei InMemorySessionService.appendEvent und untersuche das Nachschlagen und Einfügen in der Sitzungszuordnung, die im Issue gezeigt werden. Lies den gezielten Testfall InMemorySessionServiceTest und vergleiche das im Bericht erwähnte Verhalten des Python ADK. Das Ziel ist erreicht, wenn das Anhängen mit einer nach dem Löschen beibehaltenen Referenz SessionNotFoundException auslöst und getSession weiterhin null zurückgibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
🔴 Required Information
Describe the Bug:
InMemorySessionService.appendEvent can bring a deleted session back. If code keeps a reference to a Session, deletes it through the service, and then appends an event using the old reference, appendEvent inserts that session into the internal map again.
Steps to Reproduce:
- Create an
InMemorySessionServiceand a session. - Delete the session.
- Call
appendEventwith the retainedSessionobject. - Fetch the deleted session again.
Expected Behavior:
The append should fail because the session no longer exists, and the session should remain deleted. SessionNotFoundException seems like the natural error here.
Observed Behavior:
The append succeeds, and getSession returns the previously deleted session again.
appendEvent currently ends with:
sessions
.computeIfAbsent(appName, unused -> new ConcurrentHashMap<>())
.computeIfAbsent(userId, unused -> new ConcurrentHashMap<>())
.put(sessionId, session);
so all three missing levels are recreated.
Environment Details:
- ADK Library Version: current
mainat84bae34a9ae4c133c7e6294faff5cb50f64a3474 - OS: Ubuntu 24.04
- Java Version: OpenJDK 21.0.12.1
Model Information:
- Which model is being used: N/A
🟡 Optional Information
Regression:
Unknown.
Logs:
I added the focused test below and ran:
./mvnw -pl core -Dtest=InMemorySessionServiceTest#appendEvent_afterDelete_doesNotRecreateSession test
It fails with:
expected com.google.adk.sessions.SessionNotFoundException to be thrown, but nothing was thrown
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
Screenshots / Video:
N/A
Additional Context:
The Python ADK InMemorySessionService.append_event checks that the session ID is present and raises SessionNotFoundError before applying the event. Matching that behavior would also prevent a stale session reference from undoing a successful deletion.
Minimal Reproduction Code:
@Test
public void appendEvent_afterDelete_doesNotRecreateSession() {
InMemorySessionService sessionService = new InMemorySessionService();
Session session = sessionService.createSession("app", "user").blockingGet();
sessionService.deleteSession("app", "user", session.id()).blockingAwait();
assertThrows(
SessionNotFoundException.class,
() -> sessionService.appendEvent(session, Event.builder().build()).blockingGet());
assertThat(
sessionService.getSession("app", "user", session.id(), Optional.empty()).blockingGet())
.isNull();
}
How often has this issue occurred?:
- Always (100%)
- Vorherrschende Sprache
- Java
- Sterne
- 1.8k
- Forks
- 440
- Ø Merge
- 3 T. 16 Std.
- Gemergte PRs (30 T.)
- 92
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus google/adk-java
-
Runner drops callbackContextData written in onUserMessageCallback when it resumes an invocationEvtl. vergeben @hirematha hat das vor 3 Tagen übernommen. Offenneeds review
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
google/adk-java#1695 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
AgentExecutor ignores the A2A contextId when creating a session, so multi-turn conversations start over every turnEvtl. vergeben @hirematha hat das vor 1 Tag übernommen. Offenneeds review
google/adk-java#1718 · 2 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
McpToolset hangs silently for ~5 minutes per retry (3 retries) when stdio command is an npm shim ("npx") on WindowsEvtl. vergeben @hemasekhar-p hat das vor 7 Tagen übernommen. Offenneeds review
google/adk-java#1686 · 4 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
runLive passes partial events to appendEvent and never aggregates text chunks, unlike ADK PythonEvtl. vergeben @hemasekhar-p hat das vor 17 Tagen übernommen. Offenneeds review
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
google/adk-java#1648 · 3 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
FirestoreSessionService compares event timestamps as text, reordering or skipping same-second eventsEvtl. vergeben @hemasekhar-p hat das vor 17 Tagen übernommen. Offenneeds review
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 50/100
google/adk-java#1646 · 3 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in google/adk-java
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
oracle/graalvm-reachability-metadata#11472 ·
Maintainer antworten meist innerhalb von 1 Tag
-
status: waiting-for-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
spring-projects/spring-ai#7269 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 89/100
objectionary/hone-maven-plugin#1353 ·
Maintainer antworten meist innerhalb von 9 Tagen
-
ClassNotFoundException: io.netty.channel.kqueue.KQueueEventLoop stack trace printed during native build on main (Netty 4.2 removed the class)Evtl. vergeben @gastaldi hat das heute übernommen. Offenarea/netty kind/bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
quarkusio/quarkus#57939 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
conductor-oss/conductor#1777 ·
Maintainer antworten meist innerhalb von 4 Tagen