firebase / firebase/firebase-admin-java

ServerValues.resolveDeferredValue has incorrect cast

Abierto
#962 1 comentario 0 reacciones 0 asignados Ver en GitHub
api: database
Lenguaje dominante
Java
Estrellas
620
Forks
305
Merge medio
3 h 23 min
PR fusionados (30 d)
1

Descripción

* Operating System version: Gentoo Linux
* Firebase SDK version: 9.3.0
* Library version: 9.3.0 (but the bug goes back to at least 8.1.0)
* Firebase Product: RTDB

As [ServerValue.increment](firebase-admin-java#961) is still not supported by this SDK 4 years after its introduction, I tried implementing it manually. This triggers a `ClassCastException` inside the SDK due to a bad assumption that the value of the `.sv` key is always a `String`.

#### Steps to reproduce:

1. Create the data structure for ServerValue.increment as described in documentation (such as the REST documentation):
```
{
".sv": {
"increment": delta
}
}
```

2. Call `setValue` using this data structure.

#### Relevant Code:
```
var node = databaseNode();
node.setValue(Map.of(".sv", Map.of("increment", delta)), callback);
```

#### Error:

```
2024-06-21T19:58:12,008Z [firebase-database-worker] ERROR c.g.firebase.database.core.RunLoop - Uncaught exception in Firebase Database runloop (9.3.0). Please report to firebase-database-client@google.com
java.lang.ClassCastException: class java.util.HashMap cannot be cast to class java.lang.String (java.util.HashMap and java.lang.String are in module java.base of loader 'bootstrap')
at com.google.firebase.database.core.ServerValues.resolveDeferredValue(ServerValues.java:44)
at com.google.firebase.database.core.ServerValues.resolveDeferredValueSnapshot(ServerValues.java:80)
at com.google.firebase.database.core.Repo.setValue(Repo.java:376)
at com.google.firebase.database.DatabaseReference$1.run(DatabaseReference.java:305)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
```

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza en ServerValues.resolveDeferredValue en ServerValues.java:44 y sigue sus llamadores a través de ServerValues.resolveDeferredValueSnapshot y Repo.setValue. Reproduce el fallo mediante DatabaseReference.setValue usando el valor de incremento .sv con forma de mapa documentado. Se considera completado cuando esta entrada ya no falla con la ClassCastException indicada y el comportamiento se ha comprobado siguiendo los pasos de reproducción del issue.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
firebase, java
Área
databases
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.