У меня следующий код
public void updateComics(ReceiverRecord<String, UpdateTask> record) {
UpdateTask task = record.value();
List<PageMD> pageList = task.getPages().stream().map(PageMD::new).collect(Collectors.toList());
Comics comic = task.getComics();
PageMD lastPage = Iterables.getLast(pageList);
comic.setLastUpdate(LocalDateTime.now());
comic.setPageCount(lastPage.getNumber());
transactionalOperator.execute(status -> pageRepos.saveAll(pageList)
.doOnNext(page -> logger.info("page save = {} ", page))
.doOnError(err -> logger.error("Error saving page ", err))
.then(comicsRepos.save(new ComicsMD(comic)))
.doOnNext(com -> logger.info("comic save = {}", com))
.doOnError(com -> {
logger.error("error saving comic ", com);
status.setRollbackOnly();
}))
.doOnError(error -> logger.error("An error happen while execute transaction = ", error))
.subscribe();
}
И у меня ошибка при сохранении данных (страниц) в mongodb
com.mongodb.MongoException: org.springframework.data.mongodb.MongoTransactionException:
Command failed with error 251 (NoSuchTransaction): 'Given transactionnumber 1 does not match any in-progress transactions. The active transaction number is -1' on server mongo:27017.
The full response is {"errorLabels": ["TransientTransactionError"], "operationTime": {"$timestamp": {"t": 1587986663, "i": 1}}, "ok": 0.0, "errmsg": "Given transaction number 1 does not match any in-progress transactions.
The active transaction number is -1", "code": 251, "codeName": "NoSuchTransaction", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1587986663, "i": 1}}, "signature": {"hash": {"$binary": "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", "$type": "00"}, "keyId": {"$numberLong": "0"}}}}; nested exception is com.mongodb.MongoCommandException: Command failed with error 251 (NoSuchTransaction): 'Given transaction number 1 does not match any in-progress transactions. The active transaction number is -1' on server mongo:27017. The full response is {"errorLabels": ["TransientTransactionError"], "operationTime": {"$timestamp": {"t": 1587986663, "i": 1}}, "ok": 0.0, "errmsg": "Given transaction number 1 does not match any in-progress transactions. The active transaction number is -1", "code": 251, "codeName": "NoSuchTransaction", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1587986663, "i": 1}}, "signature": {"hash": {"$binary": "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", "$type": "00"}, "keyId": {"$numberLong": "0"}}}}
parsers-manager |
at com.mongodb.MongoException.fromThrowableNonNull(MongoException.java:79) ~[mongodb-driver-core-3.11.2.jar!/:na]
Без реактивной транзакции это работа. Как я могу это исправить?