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

[cloud_firestore] Snapshot lost all attributes data after offline updates #3528

Closed
lukber opened this issue Mar 14, 2022 · 5 comments · Fixed by #3537
Closed

[cloud_firestore] Snapshot lost all attributes data after offline updates #3528

lukber opened this issue Mar 14, 2022 · 5 comments · Fixed by #3537
Assignees
Labels
api: firestore type: bug Something isn't working

Comments

@lukber
Copy link

lukber commented Mar 14, 2022

  • Android Studio version: 2020.3.1. Patch 3
  • Firebase Component: Firestore
  • Component version: firebase-bom:29.2.0

Describe the problem

When is Android client offline and I add a new document to firestore and then I call update data on this document then snapshot contain only updated attribute.

Steps to reproduce:

  1. My phone is in flight mode
  2. I register the snapshots listener
  3. I create new movie document. DocumentSnapshot.getData() contain all document data (Snapshot: {name=Star wars (episode 1), likes=0}, ID: X07AxnfSg6bU2lAx5MAP)
  4. I update movie document. DocumentSnapshot.getData() contain only likes value (Snapshot: {likes=1}, ID: 07AxnfSg6bU2lAx5MAP). I would expect it to contain the entire document therefore Snapshot: {name=Star wars (episode 1), likes=1}, ID: 07AxnfSg6bU2lAx5MAP

Create new document

Map<String, Object> user = new HashMap<>();
user.put("name", "Star wars (episode " + (episode++) + ")");
user.put("likes", 0);

// Add a new document with a generated ID

db.collection("movies")
	.add(user)
	.addOnSuccessListener(documentReference -> Log.d(TAG, "Movie added with ID: " + documentReference.getId()))
	.addOnFailureListener(e -> Log.w(TAG, "Error adding movie", e));

Snapshot listener

db.collection("movies")
.addSnapshotListener((snapshots, e) -> {
	if (e != null) {
		Log.w(TAG, "listen:error", e);
		return;
	}

	for (DocumentSnapshot dc : snapshots.getDocuments()) {
		Log.d(TAG, "Snapshot: " + dc.getData() + ", ID: " + dc.getId());
	}
});

Update document

db.collection("movies")
	.document(documentId)
	.update("likes", lastLikes++);

Log

Create new document
2022-03-14 10:27:46.712 24467-24467/cz.datasys.firebaseissue D/Firebase: Snapshot: {name=Star wars (episode 1), likes=0}, ID: X07AxnfSg6bU2lAx5MAP

After update
2022-03-14 10:28:11.426 24467-24467/cz.datasys.firebaseissue D/Firebase: Snapshot: {likes=1}, ID: X07AxnfSg6bU2lAx5MAP
@dconeybe
Copy link
Contributor

@lukber I'll take a look into this.

@dconeybe
Copy link
Contributor

@lukber I'm not able to reproduce this issue. Could you enable debug logging by calling FirebaseFirestore.setLoggingEnabled(true) and provide the full logcat output? If possible, are you able to write a standalone Android app to reproduce the issue? If so, could you post it to a GitHub repository so I can reproduce for myself?

@lukber
Copy link
Author

lukber commented Mar 15, 2022

@dconeybe I create logcat output with debug logging. Snapshot data has APP_LOG tag.
logcat_output.txt

@lukber
Copy link
Author

lukber commented Mar 15, 2022

Here is a test application. You must put google-services.json yourself.

  1. Start app with no internet connection
  2. Click to ADD NEW MOVIE button. It is important to try this on document witch isn't synchronized with server.
  3. Click to movie list item to update likes. First update is OK. Second update is fail (movie name = null).

@dconeybe
Copy link
Contributor

dconeybe commented Mar 15, 2022

Thank you for the reproduction app. I've been able to reproduce and there is indeed a bug in Firestore. I still have to investigate further, but for now a workaround would be to downgrade com.google.firebase:firebase-bom to 29.0.3 or lower. This bug appears to have been introduced in BoM 29.0.4.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
api: firestore type: bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants