Транзакция Hyperledger стала неудачной, если отправить транзакцию в цикле for - PullRequest
0 голосов
/ 07 ноября 2018

Я успешно развернул сетевой файл (.bna). Затем я запустил REST API с помощью команды composer-rest-server. Я отправляю одну транзакцию, используя мое приложение Laravel. Когда я пытаюсь использовать цикл for для отправки нескольких транзакций, через некоторое время я получаю сообщение об ошибке MVCC_READ_CONFLICT. Я уменьшаю время ожидания моей сети. Но ошибка продолжается. Пожалуйста, ответьте всем, если у вас есть идеи по этому вопросу.

Ткань vertion: 1.1.0 Композитор: .19.16 Узел: 8.12 ОС: Ubuntu 16.04

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

уменьшите задержку создания блока, чтобы блоки создавались чаще и, таким образом, одноранговые узлы обновлялись быстрее, например, max_message_count = 1. Но это может привести к некоторому снижению производительности

0 голосов
/ 07 ноября 2018

Ну, MVCC_READ_CONFLICT означает, что вы выполняете параллельное изменение для некоторого ключа в двух разных транзакциях, следовательно, после того, как транзакция упорядочена в блок, любая транзакция попадает в первый зафиксированный, а вторая или последующая транзакция, которая работает с тем же ключом, помечена как недопустимая MVCC_READ_CONFLICT.

Чтобы лучше понять причину этого статуса, вероятно, стоит отметить поток транзакций в фабрике:

  1. Клиент отправляет предложение о транзакции для одобрения, отправляя его одобряющим партнерам
  2. Подтверждающие одноранговые узлы выполняют моделирование цепного кода, где результаты выполнения записываются в набор для чтения-записи
  3. Клиент собирает согласования и составляет транзакцию, отправляя ее на заказ
  4. Служба заказа объединяет транзакции в блок, используя общий порядок транзакций
  5. Блок распределен между пирами
  6. Пир проводит проверку для подтверждения соответствия политике одобрения для каждой транзакции
  7. После этого существует многозначное управление параллелизмом (MVCC), которое проверяет наличие одновременных изменений, фактически проверяет версию ключей RWSet и, если обнаруженная одновременная модификация tx признана недействительной со статусом MVCC_READ_CONFLICT

Более подробную информацию вы можете найти в документации " Поток транзакций ".

...