jbossorg / feedsaggregator

Powerful and modular Java RSS/ATOM feeds aggregator and indexer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Make MongoWriter more reliable on exception

lkrzyzanek opened this issue · comments

Mongo may throws exception.
Let's introduce retry mechanism on exception.

Example what happened (because of concurrency, although it should not happen).
https://github.com/jbossorg/feedsaggregator/runs/1291990194?check_suite_focus=true#step:4:2869

com.mongodb.MongoCommandException: Command failed with error 11000 (DuplicateKey): 'E11000 duplicate key error collection: test-db.test-collection index: _url_ dup key: { : "http://feedproxy.google.com/~r/ApacheCamel/~3/h848WA5Hr98/camel-in-action-apache-camel-is-not-for.html" }' on server localhost:27018. The full response is {"ok": 0.0, "errmsg": "E11000 duplicate key error collection: test-db.test-collection index: _url_ dup key: { : \"http://feedproxy.google.com/~r/ApacheCamel/~3/h848WA5Hr98/camel-in-action-apache-camel-is-not-for.html\" }", "code": 11000, "codeName": "DuplicateKey"}
	at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175)
	at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:303)
	at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:259)
	at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:99)
	at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:450)
	at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:72)
	at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:226)
	at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:269)
	at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:131)
	at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:123)
	at com.mongodb.operation.CommandOperationHelper$13.call(CommandOperationHelper.java:710)
	at com.mongodb.operation.OperationHelper.withReleasableConnection(OperationHelper.java:501)
	at com.mongodb.operation.CommandOperationHelper.executeRetryableCommand(CommandOperationHelper.java:703)
	at com.mongodb.operation.CommandOperationHelper.executeRetryableCommand(CommandOperationHelper.java:695)
	at com.mongodb.operation.BaseFindAndModifyOperation.execute(BaseFindAndModifyOperation.java:70)
	at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:211)
	at com.mongodb.client.internal.MongoCollectionImpl.executeFindOneAndReplace(MongoCollectionImpl.java:765)
	at com.mongodb.client.internal.MongoCollectionImpl.findOneAndReplace(MongoCollectionImpl.java:745)
	at org.jboss.feedsagg.backend.mongo.FeedPostMongoWriter.writeItems(FeedPostMongoWriter.java:80)
	at org.jberet.runtime.runner.ChunkRunner.doCheckpoint(ChunkRunner.java:564)
	at org.jberet.runtime.runner.ChunkRunner.readProcessWriteItems(ChunkRunner.java:349)
	at org.jberet.runtime.runner.ChunkRunner.run(ChunkRunner.java:206)
	at org.jberet.runtime.runner.StepExecutionRunner.runBatchletOrChunk(StepExecutionRunner.java:223)
	at org.jberet.runtime.runner.StepExecutionRunner.run(StepExecutionRunner.java:142)
	at org.jberet.runtime.runner.CompositeExecutionRunner.runStep(CompositeExecutionRunner.java:170)
	at org.jberet.runtime.runner.CompositeExecutionRunner.runFromHeadOrRestartPoint(CompositeExecutionRunner.java:94)
	at org.jberet.runtime.runner.JobExecutionRunner.run(JobExecutionRunner.java:58)
	at org.jberet.spi.JobExecutor$1.run(JobExecutor.java:100)
	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:834)