Требуется ли откат транзакций хранилища данных при сохранении или удалении?

В примере для dataset.runInTransaction ( ссылка), есть явная обработка ошибок, которая происходит на transaction.get(key,callback),

Но на других операциях, таких как transaction.save(entity) или же transaction.delete(key)нет никаких обратных вызовов, поэтому на самом деле нет способа обрабатывать ошибки. Например:

dataset.runInTransaction(function(transaction, done) {
  transaction.save({
      key: dataset.key(['Company', 123]),
      data: {}
  });
  transaction.delete(dataset.key(['Company', 456]));
  done();
}, function(err, apiResponse) {});

Означает ли это, что нет необходимости явно откатывать транзакцию?

2 ответа

Я также пытался найти ту же проблему, но нашел следующий вопрос полезным.

Пожалуйста, посмотрите здесь

Я провел много взад-вперед с gcloud-node Участники трекера:

  1. https://github.com/GoogleCloudPlatform/gcloud-node/issues/1120
  2. https://github.com/GoogleCloudPlatform/gcloud-node/issues/633

в основном все изменения выполняются одновременно (один раз done() называется), поэтому, если произойдет сбой, вся транзакция будет прервана в это время.

что сбивало с толку то, что некоторые операции, такие как transaction.get() есть обратные вызовы. В основном версия объекта, возвращаемая transaction.get() должен соответствовать версии до .save() или же .delete() происходит (что опять же происходит, когда done() вызывается) если версия не совпадает, транзакция автоматически прерывается.

с помощью transaction.rollback() все еще полезно, если что-то в вашем .get() вызов не соответствует тому, что ожидает ваш код.

Другие вопросы по тегам