Тайм-ауты интерфейса bitcoind JSON-RPC при модульных тестах

Я запускаю модульные тесты против биткойнов, которые выполняют запросы JSON-RPC с высокой скоростью. Случайные сбои — это проблема. Например, если у вас есть что-то подобное в журналах printconsole:

ThreadRPCServer method=gettransaction
ThreadRPCServer method=gettransaction
ThreadRPCServer method=gettransaction
ThreadRPCServer method=gettransaction
....
ThreadRPCServer method=gettransaction
ThreadRPCServer method=gettransaction
sending: inv (37 bytes)
ThreadRPCServer method=gettransaction
ThreadRPCServer method=listtransactions
sending: inv (37 bytes)

Вы начинаете получать:

synced with network?".format(name)) from e
cryptoassets.core.backend.bitcoind.BitcoindJSONError: Got timeout when doing bitcoin RPC call listtransactions. 

Я пробовал как повторно использовать HTTP-соединение, так и не использовать повторно HTTP-соединение с различными результатами.

Есть ли какие-нибудь простые способы сделать bitcoindинтерфейс RPC более стабильным (увеличение количества потоков, параллелизма и т. д.)?

Я использую следующую реализацию Python JSON-RPC:

https://github.com/jgarzik/python-bitcoinrpc/blob/master/bitcoinrpc/authproxy.py

ОБНОВЛЕНИЕ: похоже, проблемный вызов может быть listtransactions. При одновременном вызове из командной строки curlтакже нет ответа:

[~]% curl --user foo:bar --data-binary '{"id":"t0", "method": "listtransactions", "params": ["cryptoassets"] }' http://127.0.0.1:8332/ |python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:--100    70    0     0  100    70      0     58  
rpcthreads=64кажется, решает проблему, но не объясняет, что происходит.

Ответы (1)

Я использовал BitcoinLib для выполнения 15 000 последовательных listtransactionsвызовов, и результат был таким:

0 timeouts
Fastest response: 0.1133479 sec
Slowest response: 0.6475277 sec

bitcoindбыл запущен с параметрами по умолчанию и получал блоки во время теста.

введите описание изображения здесь

Большое спасибо! Я буду продолжать копать, что заставляет биткойн идти наперекосяк. Я попытаюсь сделать bash-скрипт, чтобы повторить проблему. Может быть, это шаблон сделанных звонков.
@MikkoOhtamaa вот суть вышеупомянутого теста: gist.github.com/GeorgeKimionis/7532fe23a5ad74c9c628
@MikkoOhtamaa ты когда-нибудь это понимал?
Да. Перестал использовать Биткойн семь лет назад. Я предлагаю вам изучить некоторые современные блокчейны.