Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

InMemorySessionService.appendEvent recreates a deleted session

Offen Anfängerfreundlich
#1,697 2 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@hirematha arbeitet bereits daran.

Seit 26.10.2026.

  • #1698 von @DisturbedCrow — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
84/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
java
Bereich
backend, database

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

needs review

🔴 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:

  1. Create an InMemorySessionService and a session.
  2. Delete the session.
  3. Call appendEvent with the retained Session object.
  4. 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 main at 84bae34a9ae4c133c7e6294faff5cb50f64a3474
  • 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

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus google/adk-java

Alle Issues in google/adk-java

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.