From e7054df79b4139fdfd0cc6aa0620fbfa1a10a6b0 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Tue, 11 Aug 2020 15:42:15 -0500 Subject: [PATCH] feat: add BulkWriter (#323) New BulkWriter leveraging [`BatchWriteRequest`](https://github.com/googleapis/googleapis/blob/393d03088e368d79c8f4cd5e3610c7df0bb118bf/google/firestore/v1/firestore.proto#L866-L881) which allows for fine grain batch processing of documents. Where as existing `WriteBatch` is an atomic write (all succeed or all fail). BulkWriter has been implemented to follow the 500/50/5 rule from [Firestore Best Practices: Ramping up traffic](https://firebase.google.com/docs/firestore/best-practices#ramping_up_traffic). If your application is already managing compliance with the 500/50/5 rule, you can configure the `BulkWriter` by using the `Firestore#bulkWriter(com.google.cloud.firestore.BulkWriterOptions)` method. --- .../clirr-ignored-differences.xml | 38 + .../cloud/firestore/BatchWriteResult.java | 55 ++ .../cloud/firestore/BulkCommitBatch.java | 63 ++ .../google/cloud/firestore/BulkWriter.java | 719 +++++++++++++++++ .../cloud/firestore/BulkWriterOptions.java | 43 + .../com/google/cloud/firestore/Firestore.java | 6 + .../google/cloud/firestore/FirestoreImpl.java | 12 + .../google/cloud/firestore/RateLimiter.java | 4 +- .../google/cloud/firestore/Transaction.java | 4 + .../google/cloud/firestore/UpdateBuilder.java | 246 +++++- .../google/cloud/firestore/WriteBatch.java | 4 + .../google/cloud/firestore/WriteResult.java | 2 +- .../cloud/firestore/spi/v1/FirestoreRpc.java | 4 + .../firestore/spi/v1/GrpcFirestoreRpc.java | 7 + .../cloud/firestore/BulkWriterTest.java | 758 ++++++++++++++++++ .../cloud/firestore/LocalFirestoreHelper.java | 158 +++- .../cloud/firestore/TransactionTest.java | 48 +- .../cloud/firestore/WriteBatchTest.java | 45 +- .../cloud/firestore/it/ITSystemTest.java | 108 +++ pom.xml | 7 + 20 files changed, 2254 insertions(+), 77 deletions(-) create mode 100644 google-cloud-firestore/src/main/java/com/google/cloud/firestore/BatchWriteResult.java create mode 100644 google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkCommitBatch.java create mode 100644 google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkWriter.java create mode 100644 google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkWriterOptions.java create mode 100644 google-cloud-firestore/src/test/java/com/google/cloud/firestore/BulkWriterTest.java diff --git a/google-cloud-firestore/clirr-ignored-differences.xml b/google-cloud-firestore/clirr-ignored-differences.xml index 565a807b6..d3fc69ba9 100644 --- a/google-cloud-firestore/clirr-ignored-differences.xml +++ b/google-cloud-firestore/clirr-ignored-differences.xml @@ -161,6 +161,44 @@ com.google.cloud.firestore.Query collectionGroup(java.lang.String) com.google.cloud.firestore.CollectionGroup + + + + 7012 + com/google/cloud/firestore/Firestore + com.google.cloud.firestore.BulkWriter bulkWriter(*) + + + 7006 + com/google/cloud/firestore/UpdateBuilder + com.google.cloud.firestore.UpdateBuilder create(*) + java.lang.Object + + + 7006 + com/google/cloud/firestore/UpdateBuilder + com.google.cloud.firestore.UpdateBuilder delete(*) + java.lang.Object + + + 7006 + com/google/cloud/firestore/UpdateBuilder + com.google.cloud.firestore.UpdateBuilder set(*) + java.lang.Object + + + 7006 + com/google/cloud/firestore/UpdateBuilder + com.google.cloud.firestore.UpdateBuilder update(*) + java.lang.Object + + + 7012 + com/google/cloud/firestore/spi/v1/FirestoreRpc + com.google.api.gax.rpc.UnaryCallable batchWriteCallable() + + + + com.google.api + api-common + 1.10.0 + + com.google.cloud google-cloud-shared-dependencies