-
Type: Bug
-
Resolution: Cannot Reproduce
-
Priority: Major - P3
-
None
-
Affects Version/s: 4.0.5
-
Component/s: Reactive Streams, Scala
-
None
-
Environment:windows 7, 10, 2012
jdk 11
atlas 4.2.8
scala 2.13.1
"org.mongodb.scala" %% "mongo-scala-driver" % "4.0.5"
-
(copied to CRM)
We activated client side field encryption following the relevant guides.
private val client = { val jKmsProviders = kmsProviders.map { case (k, v) => (k, v.asJava) }.asJava val autoEncryptionSettings = AutoEncryptionSettings .builder() .keyVaultNamespace("encryption.__keyvault") .kmsProviders(jKmsProviders) .build() MongoClient( MongoClientSettings .builder() .applyConnectionString(new ConnectionString(mongoConfig.connectionString)) .autoEncryptionSettings(autoEncryptionSettings) .codecRegistry(MongoClient.DEFAULT_CODEC_REGISTRY) .uuidRepresentation(UuidRepresentation.JAVA_LEGACY) .build() ) }
We use the AutoEncryptionSettings to get transparent En-/Decrypt for one of our fields.
This works fine.
Unfortunately this stops all our watches from being triggered on any change.
It doesn't matter if the watched colletion uses encrypted fields or not.
override def watch(callback: (A, Action) => Unit): Unit = coll .watch() .subscribe((csd: ChangeStreamDocument[DTO]) => { val (c, op) = (csd.getFullDocument, csd.getOperationType) logger.debug("Found {} with {}", ct, c) fromDto(c) match { case Right(a) => op match { case OperationType.INSERT => callback(a, Action.Insert) case OperationType.UPDATE | OperationType.REPLACE => callback(a, Action.Update) case OperationType.DELETE => callback(a, Action.Delete) case _ => logger.warn("Operation on {} of type {} not supported", ct, op) } case Left(t) => logger.warn("Could not transform {} with {} (reason: {})", ct, c, t) } })
If we remove the AutoEncryptionSettings from our connection all watches work again.