CPVM 1.2 Setup

   Устарело почти полностью

Пример запуска одного рантайма с включенным AppServer:

java \
-ea \
-jar runtime.jar \
-n $NODEID \
-h localhost \
-p 40124 \
--tag "test-node" \
--log FILE \
--cbtype KV \
--kv-address "localhost:10000" \
--luapath ./lua-libs \
--appserver "localhost:5678" \
--enable-test-user "true" \

Аргументы: "nodeid" (-n) - должен быть уникальным в пределах всего кластера. Без уникальности ноды с таким же id могут выйти из строя. "tag" - если задан, будет отображаться в логах для сообщений из основного event-loop ноды, в противном случае будет отображатся nodeId. "log" * FILE - вывод файл с автоматической ротацией (старые логи будут сжиматься в gz и ложится в logs/) * CONSOLE - вывод в консоль * CONSOLE_AND_FILE - все вместе "kv-address" - адреса KV-сервисов (CB, RuntimeStorage, Logs) "luapath" - если нужно подуснуть какие-то кастомные lua-библиотеки "appserver" - запуск AppServer на указанном адресе * "enable-test-user" - все AppServer-запросы без кук воспринимаются как запросы тестового пользователя "$TEST_USER"

Вывод после старта:

Спойлер (кликните для показа/скрытия){: class="spoiler_links" title="Click this ..." }

    2017-08-29 07-58-29 [test-node]: CPVM 1.1.619 (82a273670fe87e105600269e7c3b70b144dbcb12) debug mode
    2017-08-29 07-58-29 [test-node]: ID = 161815
    2017-08-29 07-58-29 [test-node]: aeron: try launch embedded driver
    2017-08-29 07-58-29 [test-node]: aeron: active driver detected
    2017-08-29 07-58-29 [test-node]: aeron: IPC listen -> 105660
    2017-08-29 07-58-29 [test-node]: aeron: UDP listen -> 127.0.0.1:40124 / 105660
    2017-08-29 07-58-29 [test-node]: aeron: IPC listen -> 105670
    2017-08-29 07-58-29 [test-node]: aeron: UDP listen -> 127.0.0.1:40134 / 12
    2017-08-29 07-58-29 [test-node]: HTTP server started at http://127.0.0.1:5678/
    2017-08-29 07-58-29 [test-node]: HTTP routes:
        GET    /account/me/
        GET    /account/{otherUserId}
        POST   /auth/login
        POST   /auth/logout
        POST   /auth/signup
        GET    /cb/fragments
        POST   /cb/fragments/{frId}
        GET    /cb/fragments/{frId}/bytecode
        POST   /cb/fragments/{frId}/bytecode
        GET    /cb/fragments/{frId}/meta
        POST   /cb/fragments/{frId}/meta
        GET    /cb/fragments/{frId}/source
        POST   /cb/fragments/{frId}/source
        GET    /cb/users/{otherUserId}/fragments
        POST   /managment/setupTopology
        POST   /managment/terminate
        POST   /vm/start
        POST   /vm/stop
        GET    /vm/transactions/
        GET    /vm/transactions/{trId}/lpf/byFragment/{frId}
        GET    /vm/transactions/{trId}/statistics
        GET    /vm/transactions/{trId}/status
        GET    /vm/version
    2017-08-29 07-58-29 [test-node]: using KV codebase
    2017-08-29 07-58-29 [test-node]: optimal parallelism: 8
    2017-08-29 07-58-29 [test-node]: new remote interface: ru.acapella.runtime.api.internal.BaseNodeApi
    2017-08-29 07-58-29 [test-node]: new remote interface: ru.acapella.runtime.HeartbeatAPI
    2017-08-29 07-58-29 [test-node]: new remote interface: ru.acapella.runtime.api.internal.FragmentRunAPI
    2017-08-29 07-58-29 [test-node]: new remote interface: ru.acapella.runtime.FailoverApi
    2017-08-29 07-58-29 [test-node]: ready
    2017-08-29 07-58-29 [test-node]: aeron: try connect: ipc(75536)

Вывод HTTP server started at http://127.0.0.1:5678/ значит AppServer готов к работе.

  1. Если Runtime поднимается для теста можно использовать параметр --enable-test-user, который позволяет обращается ко всему API без авторизации.
  2. Иначе необходимо зарегистрировать пользвателя:
    curl -H "Content-Type: application/json" -d '{"username":"PainInTheAss","password":"33fnDF9unfwEFz1Fdsf87","email":"killthemall@gmail.com","firstName":"Max","lastName":"Payne"}' -X POST http://localhost:5678/auth/signup 
  1. Авторизация. В хедер Authorization ложим пароль в base64.
    curl -d "username=PainInTheAss" --header "Authorization: MzNmbkRGRjl1bmZ3RUZ6MUZkc2Y4Nw==" -X POST "http://localhost:5678/auth/login"

    {"token":"7b03fedaa44f4a5688f49edd7d285033"}
  1. Соединяем ноды с адресами "host:40124", "host:40125", "host:40126":
    curl -H "Content-Type: application/json" -d '[["host:40124", "host:40125"], ["host:40124", "host:40126"], ["host:40125", "host:40126"]]' -X POST http://localhost:5678/managment/setupTopology

В логах должно отобразится:

    2017-08-29 08-39-07 [node1]: connected to node2
    2017-08-29 08-39-07 [node1]: connected to node3

    2017-08-29 08-39-07 [node2]: connected to node1
    2017-08-29 08-39-08 [node2]: connected to node3

    2017-08-29 08-39-07 [node3]: connected to node1
    2017-08-29 08-39-08 [node3]: connected to node2
  1. Запуск простого фрагмента через cli-launcher.

TODO описание машины и фрагмента

Сначала запустим mult_root.lua с параметром 50 в "транзакционном" режиме, без параллельности, что соответсвует пресету "transactional":

    /usr/bin/python3.6 main.py --address localhost:5678 --fname mult_root --preset transactional
    Using 'transactional' preset
    Uploading 'mult_2_py'
    Uploading 'mult_2'
    Uploading 'mult_1_py'
    Uploading 'mult_root_py'
    Uploading 'mult_1'
    Uploading 'mult_root'
    Start fragment: mult_root
    Transaction started: 84ef24ca75849e6
    Transaction completed

    Execution time:
        Without overheads (worker):  43 ms
        Total (worker):              0:01:03.252343
        Total (node):                0:01:03.252890
    Transaction timestamps: 
        Start:          13:15:28.563000 [2017-08-30]
        End:            13:16:31.816000 [2017-08-30]
    Counters: 
        Total conflicts:   0
        Total restarts:    0
        Async calls:       0
        Sync calls:        71
        TVM reads:         690902
        TVM writes:        14703
    TVM traffic: 
        TVM bytes read:    1.01 MB
        TVM bytes write:   76.54 KB

Включим параллельность изменив пресет на "acapella":

    /usr/bin/python3.6 main.py --address localhost:5678 --fname mult_root --preset acapella
    Using 'acapella' preset
    Uploading 'mult_2_py'
    Uploading 'mult_2'
    Uploading 'mult_1_py'
    Uploading 'mult_root_py'
    Uploading 'mult_1'
    Uploading 'mult_root'
    Start fragment: mult_root
    Transaction started: 33f965fc70634260
    Transaction completed

    Execution time:
        Without overheads (worker):  57 ms
        Total (worker):              59 ms
        Total (node):                0:00:35.805273
    Transaction timestamps: 
        Start:          13:17:20.565000 [2017-08-30]
        End:            13:17:56.371000 [2017-08-30]
    Counters: 
        Total conflicts:   0
        Total restarts:    0
        Async calls:       71
        Sync calls:        0
        TVM reads:         690902
        TVM writes:        14703
    TVM traffic: 
        TVM bytes read:    1.02 MB
        TVM bytes write:   76.71 KB

Общее время исполнения падает:

    Total (node):                0:01:02.690510
    Total (node):                0:00:35.805273
  1. Масштабирование

Запускаем mult_root.lua с параметром 30 на кластере с одной нодой node2 (одна машина, 4 ядра (8 HT)):

    /usr/bin/python3.6 main.py --address localhost:5678 --fname mult_root --preset acapella
    Using 'acapella' preset
    Uploading 'mult_2_py'
    Uploading 'mult_2'
    Uploading 'mult_1_py'
    Uploading 'mult_root_py'
    Uploading 'mult_1'
    Uploading 'mult_root'
    Start fragment: mult_root
    Transaction started: 23a1c3cd264343e7
    Transaction completed

    Execution time:
        Without overheads (worker):  12 ms
        Total (worker):              16 ms
        Total (node):                0:00:08.753459
    Transaction timestamps: 
        Start:          10:46:11.108000 [2017-08-31]
        End:            10:46:19.021000 [2017-08-31]
    Counters: 
        Total conflicts:   0
        Total restarts:    0
        Async calls:       47
        Sync calls:        0
        TVM reads:         470113
        TVM writes:        94695
    TVM traffic: 
        TVM bytes read:    549.97 KB
        TVM bytes write:   20.86 KB

Запустим еще одну ноду node1 на второй машине, c аналогичной конфгурацией, 4 ядра (8 HT)). Соединим их:

    2017-08-31 10-48-32 [node2]: connected to node1 udp(192.168.1.19:40123 [105659]) (131081)

    2017-08-31 10-48-32 [node1]: connected to node2 udp(192.168.1.20:40124 [105660]) (131082)

Запустим тест еще раз:

    /usr/bin/python3.6 main.py --address localhost:5678 --fname mult_root --preset acapella
    Using 'acapella' preset
    Uploading 'mult_2_py'
    Uploading 'mult_2'
    Uploading 'mult_1_py'
    Uploading 'mult_root_py'
    Uploading 'mult_1'
    Uploading 'mult_root'
    Start fragment: mult_root
    Transaction started: 23a1c3cd264343e7
    Transaction completed

    Execution time:
        Without overheads (worker):  11 ms
        Total (worker):              19 ms
        Total (node):                0:00:05.223781
    Transaction timestamps: 
        Start:          10-49-05.570000 [2017-08-31]
        End:            10-49-10.798000 [2017-08-31]
    Counters: 
        Total conflicts:   0
        Total restarts:    0
        Async calls:       47
        Sync calls:        0
        TVM reads:         470113
        TVM writes:        94695
    TVM traffic: 
        TVM bytes read:    543.65 KB
        TVM bytes write:   19.99 KB

Общее время исполнения падает:

    Total (node):                0:00:08.753459
    Total (node):                0:00:05.223781

В логах обоих узлов можно наблюдать распределение задач:

Спойлер (кликните для показа/скрытия){: class="spoiler_links" title="Click this ..." }

    2017-08-31 10-49-05 [node2]: existing fragment version: 111669149696
    2017-08-31 10-49-05 [node2]: uploading fragment: mult_2_py(27)
    2017-08-31 10-49-05 [node2]: uploading fragment finished: mult_2_py(27)
    2017-08-31 10-49-05 [node2]: try upload fragment: mult_2
    2017-08-31 10-49-05 [node2]: existing fragment version: 111669149696
    2017-08-31 10-49-05 [node2]: uploading fragment: mult_2(27)
    2017-08-31 10-49-05 [node2]: uploading fragment finished: mult_2(27)
    2017-08-31 10-49-05 [node2]: try upload fragment: mult_1_py
    2017-08-31 10-49-05 [node2]: existing fragment version: 111669149696
    2017-08-31 10-49-05 [node2]: uploading fragment: mult_1_py(27)
    2017-08-31 10-49-05 [node2]: uploading fragment finished: mult_1_py(27)
    2017-08-31 10-49-05 [node2]: try upload fragment: mult_root_py
    2017-08-31 10-49-05 [node2]: existing fragment version: 111669149696
    2017-08-31 10-49-05 [node2]: uploading fragment: mult_root_py(27)
    2017-08-31 10-49-05 [node2]: uploading fragment finished: mult_root_py(27)
    2017-08-31 10-49-05 [node2]: try upload fragment: mult_1
    2017-08-31 10-49-05 [node2]: existing fragment version: 111669149696
    2017-08-31 10-49-05 [node2]: uploading fragment: mult_1(27)
    2017-08-31 10-49-05 [node2]: uploading fragment finished: mult_1(27)
    2017-08-31 10-49-05 [node2]: try upload fragment: mult_root
    2017-08-31 10-49-05 [node2]: existing fragment version: 111669149696
    2017-08-31 10-49-05 [node2]: uploading fragment: mult_root(27)
    2017-08-31 10-49-05 [node2]: uploading fragment finished: mult_root(27)
    2017-08-31 10-49-05 [node2]: try upload fragment: fr0
    2017-08-31 10-49-05 [node2]: existing fragment version: 38654705664
    2017-08-31 10-49-05 [node2]: uploading fragment: fr0(10)
    2017-08-31 10-49-05 [node2]: uploading fragment finished: fr0(10)
    2017-08-31 10-49-05 [node2]: RRF: {mult_root(HEAD), 516d7d23f078447f-0.0}
    2017-08-31 10-49-05 [node2]: request prototype mult_root(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-05 [node2]: transaction status updated: 516d7d23f078447f -> running
    2017-08-31 10-49-05 [node2]: request fragment 'mult_root(27)' from CodeBase
    2017-08-31 10-49-05 [node2]: prototype cached: mult_root(27)
    2017-08-31 10-49-05 [node2]: start fragment: {mult_root(27), 516d7d23f078447f-0.0}
    2017-08-31 10-49-05 [worker4294967297]: start new thread: Thread[ForkJoinPool-1-worker-25,5,main]
    2017-08-31 10-49-05 [worker4294967297]: compile fragment: mult_root(27)
    2017-08-31 10-49-05 [worker4294967297]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-05 [worker4294967298]: start new thread: Thread[ForkJoinPool-1-worker-18,5,main]
    2017-08-31 10-49-06 [node2]: RRFFF: {mult_root -> mult_1(HEAD), 516d7d23f078447f-0.4.0}
    2017-08-31 10-49-06 [node2]: request prototype mult_1(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-06 [node2]: request fragment 'mult_1(27)' from CodeBase
    2017-08-31 10-49-06 [node2]: prototype cached: mult_1(27)
    2017-08-31 10-49-06 [node2]: start fragment: {mult_root -> mult_1(27), 516d7d23f078447f-0.4.0}
    2017-08-31 10-49-06 [worker4294967297]: compile fragment: mult_1(27)
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.139.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.140.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.141.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.142.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.143.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.144.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.145.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.146.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.147.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.148.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.149.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.150.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.151.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.152.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.153.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.154.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.155.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.156.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.157.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.158.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.159.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.160.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.161.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.162.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.163.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.164.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.165.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.166.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.167.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.168.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.169.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.170.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.171.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.172.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.173.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.174.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.175.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.176.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.177.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.178.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.179.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.180.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.181.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.182.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.183.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.184.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.185.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.186.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.187.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: RRFFF: {mult_1 -> mult_2(HEAD), 516d7d23f078447f-0.4.255x19.188.0}
    2017-08-31 10-49-07 [node2]: request prototype mult_2(HEAD). transaction: 516d7d23f078447f
    2017-08-31 10-49-07 [node2]: new shared stream: [transactions, 516d7d23f078447f, logs, log]
    2017-08-31 10-49-07 [node2]: register: SharedStream(transactions/516d7d23f078447f/logs/log)
    2017-08-31 10-49-07 [node2]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node2]: prototype cached: mult_2(27)
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.139.0}
    2017-08-31 10-49-07 [worker4294967298]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [worker4294967298]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.153.0}
    2017-08-31 10-49-07 [worker4294967299]: start new thread: Thread[ForkJoinPool-1-worker-11,5,main]
    2017-08-31 10-49-07 [worker4294967299]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.154.0}
    2017-08-31 10-49-07 [worker4294967300]: start new thread: Thread[ForkJoinPool-1-worker-4,5,main]
    2017-08-31 10-49-07 [worker4294967300]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.155.0}
    2017-08-31 10-49-07 [worker4294967301]: start new thread: Thread[ForkJoinPool-1-worker-29,5,main]
    2017-08-31 10-49-07 [worker4294967301]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.156.0}
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.157.0}
    2017-08-31 10-49-07 [worker4294967302]: start new thread: Thread[ForkJoinPool-1-worker-22,5,main]
    2017-08-31 10-49-07 [worker4294967304]: start new thread: Thread[ForkJoinPool-1-worker-8,5,main]
    2017-08-31 10-49-07 [worker4294967302]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967304]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.158.0}
    2017-08-31 10-49-07 [worker4294967303]: start new thread: Thread[ForkJoinPool-1-worker-15,5,main]
    2017-08-31 10-49-07 [worker4294967303]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967305]: start new thread: Thread[ForkJoinPool-1-worker-1,5,main]
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.159.0}
    2017-08-31 10-49-07 [worker4294967305]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.160.0}
    2017-08-31 10-49-07 [worker4294967306]: start new thread: Thread[ForkJoinPool-1-worker-26,5,main]
    2017-08-31 10-49-07 [worker4294967306]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.161.0}
    2017-08-31 10-49-07 [worker4294967307]: start new thread: Thread[ForkJoinPool-1-worker-19,5,main]
    2017-08-31 10-49-07 [worker4294967307]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.162.0}
    2017-08-31 10-49-07 [worker4294967308]: start new thread: Thread[ForkJoinPool-1-worker-12,5,main]
    2017-08-31 10-49-07 [worker4294967308]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.163.0}
    2017-08-31 10-49-07 [worker4294967309]: start new thread: Thread[ForkJoinPool-1-worker-5,5,main]
    2017-08-31 10-49-07 [worker4294967309]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.164.0}
    2017-08-31 10-49-07 [worker4294967310]: start new thread: Thread[ForkJoinPool-1-worker-30,5,main]
    2017-08-31 10-49-07 [worker4294967310]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.165.0}
    2017-08-31 10-49-07 [worker4294967311]: start new thread: Thread[ForkJoinPool-1-worker-23,5,main]
    2017-08-31 10-49-07 [worker4294967311]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.166.0}
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.167.0}
    2017-08-31 10-49-07 [worker4294967312]: start new thread: Thread[ForkJoinPool-1-worker-16,5,main]
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.168.0}
    2017-08-31 10-49-07 [worker4294967313]: start new thread: Thread[ForkJoinPool-1-worker-9,5,main]
    2017-08-31 10-49-07 [worker4294967312]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967315]: start new thread: Thread[ForkJoinPool-1-worker-27,5,main]
    2017-08-31 10-49-07 [worker4294967314]: start new thread: Thread[ForkJoinPool-1-worker-2,5,main]
    2017-08-31 10-49-07 [worker4294967315]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.169.0}
    2017-08-31 10-49-07 [worker4294967314]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.170.0}
    2017-08-31 10-49-07 [worker4294967313]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967316]: start new thread: Thread[ForkJoinPool-1-worker-20,5,main]
    2017-08-31 10-49-07 [worker4294967316]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967317]: start new thread: Thread[ForkJoinPool-1-worker-13,5,main]
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.140.0}
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.171.0}
    2017-08-31 10-49-07 [worker4294967318]: start new thread: Thread[ForkJoinPool-1-worker-6,5,main]
    2017-08-31 10-49-07 [worker4294967318]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.172.0}
    2017-08-31 10-49-07 [worker4294967319]: start new thread: Thread[ForkJoinPool-1-worker-31,5,main]
    2017-08-31 10-49-07 [worker4294967317]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967319]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967320]: start new thread: Thread[ForkJoinPool-1-worker-24,5,main]
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.173.0}
    2017-08-31 10-49-07 [worker4294967320]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.174.0}
    2017-08-31 10-49-07 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.175.0}
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.176.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.177.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.178.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.141.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.179.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.180.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.181.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.182.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.183.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.184.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.185.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.186.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.187.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.142.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.188.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.143.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.144.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.145.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.146.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.147.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.148.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.149.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.150.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.151.0} to 131081
    2017-08-31 10-49-07 [node2]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.152.0} to 131081
    2017-08-31 10-49-07 [node2]: SharedStream(transactions/516d7d23f078447f/logs/log): sync 23 bytes
    2017-08-31 10-49-07 [node2]: reserveArea(tryReuse = null). Batch -> 10
    2017-08-31 10-49-07 [node2]: SharedStream(transactions/516d7d23f078447f/logs/log): reserved -> 0..10
    2017-08-31 10-49-07 [node2]: SharedStream(transactions/516d7d23f078447f/logs/log): (0..10) is expired
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.157.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.166.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.162.0}
    2017-08-31 10-49-09 [node2]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.152.0}
    2017-08-31 10-49-09 [node2]: request cycle: mult_2(27)[516d7d23f078447f-0.4.255x19.152.0]
    2017-08-31 10-49-09 [node2]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.152.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.161.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.171.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.167.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.173.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.154.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.159.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.153.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.158.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.160.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.169.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.165.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.140.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.168.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.139.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.163.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.155.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.164.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.172.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.156.0}
    2017-08-31 10-49-09 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.170.0}
    2017-08-31 10-49-10 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.175.0}
    2017-08-31 10-49-10 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.174.0}
    2017-08-31 10-49-10 [node2]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.152.0}
    2017-08-31 10-49-10 [node2]: job completed: {mult_root -> mult_1(27), 516d7d23f078447f-0.4.0}
    2017-08-31 10-49-10 [node2]: job completed: {mult_root(27), 516d7d23f078447f-0.0}
    2017-08-31 10-49-10 [node2]: tr executed: {mult_root(27), 516d7d23f078447f-0.0} FragmentRunResult{status=OK, errorString='null', conflicts=null}
    2017-08-31 10-49-10 [node2]: SharedStream(transactions/516d7d23f078447f/logs/log): request termination
    2017-08-31 10-49-10 [node2]: SharedStream(users/transactions/516d7d23f078447f/logs/registry/exclusiveLogs): request termination
    2017-08-31 10-49-10 [node2]: SharedStream(users/transactions/516d7d23f078447f/logs/registry/exclusiveLogs): terminated
    2017-08-31 10-49-10 [node2]: SharedStream(transactions/516d7d23f078447f/logs/log): terminated
    2017-08-31 10-49-10 [node2]: transaction status updated: 516d7d23f078447f -> finished

Обозначения:

  • start fragment: ... - локальный запуск исполнения фрагмента
  • RRF: ... - Request Run Fragment - кто-то запросил исполнение фрагмента
  • RRFFF: ... - Request Run Fragment From Fragment - запуск подфрагмента
  • mult_1 -> mult_2(27) - идентификатор запуска фрагмента mult_2 версии 27 из mult_1
  • mult_2(HEAD) - последняя версия фрагмента mult_2
  • 516d7d23f078447f-0.4.255x19.186.0 - глобальный идентификатор запуска фрагмента. Первая часть "516d7d23f078447f" - transaction ID, вторая часть "0.4.255x19.186.0" - DAM в сокращенной форме ("255x19" означает повторение 255 19 раз подряд)

За счет того, что запускаемые задачи довольно тяжелые, нагрузка распределилась почти поровну:

Спойлер (кликните для показа/скрытия){: class="spoiler_links" title="Click this ..." }

    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.176.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.176.0}
    2017-08-31 10-49-07 [worker4294967297]: start new thread: Thread[ForkJoinPool-1-worker-25,5,main]
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.177.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [worker4294967297]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.177.0}
    2017-08-31 10-49-07 [worker4294967298]: start new thread: Thread[ForkJoinPool-1-worker-18,5,main]
    2017-08-31 10-49-07 [worker4294967298]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.178.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.178.0}
    2017-08-31 10-49-07 [worker4294967299]: start new thread: Thread[ForkJoinPool-1-worker-11,5,main]
    2017-08-31 10-49-07 [worker4294967299]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.141.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.141.0}
    2017-08-31 10-49-07 [worker4294967300]: start new thread: Thread[ForkJoinPool-1-worker-4,5,main]
    2017-08-31 10-49-07 [worker4294967300]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.179.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.179.0}
    2017-08-31 10-49-07 [worker4294967301]: start new thread: Thread[ForkJoinPool-1-worker-29,5,main]
    2017-08-31 10-49-07 [worker4294967301]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.180.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.180.0}
    2017-08-31 10-49-07 [worker4294967302]: start new thread: Thread[ForkJoinPool-1-worker-22,5,main]
    2017-08-31 10-49-07 [worker4294967302]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.181.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.181.0}
    2017-08-31 10-49-07 [worker4294967303]: start new thread: Thread[ForkJoinPool-1-worker-15,5,main]
    2017-08-31 10-49-07 [worker4294967303]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.182.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.182.0}
    2017-08-31 10-49-07 [worker4294967304]: start new thread: Thread[ForkJoinPool-1-worker-8,5,main]
    2017-08-31 10-49-07 [worker4294967304]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.183.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.183.0}
    2017-08-31 10-49-07 [worker4294967305]: start new thread: Thread[ForkJoinPool-1-worker-1,5,main]
    2017-08-31 10-49-07 [worker4294967305]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.184.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.184.0}
    2017-08-31 10-49-07 [worker4294967306]: start new thread: Thread[ForkJoinPool-1-worker-26,5,main]
    2017-08-31 10-49-07 [worker4294967306]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.185.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.185.0}
    2017-08-31 10-49-07 [worker4294967307]: start new thread: Thread[ForkJoinPool-1-worker-19,5,main]
    2017-08-31 10-49-07 [worker4294967307]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.186.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.186.0}
    2017-08-31 10-49-07 [worker4294967308]: start new thread: Thread[ForkJoinPool-1-worker-12,5,main]
    2017-08-31 10-49-07 [worker4294967308]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.187.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.187.0}
    2017-08-31 10-49-07 [worker4294967309]: start new thread: Thread[ForkJoinPool-1-worker-5,5,main]
    2017-08-31 10-49-07 [worker4294967309]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.142.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.142.0}
    2017-08-31 10-49-07 [worker4294967310]: start new thread: Thread[ForkJoinPool-1-worker-30,5,main]
    2017-08-31 10-49-07 [worker4294967310]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.188.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.188.0}
    2017-08-31 10-49-07 [worker4294967311]: start new thread: Thread[ForkJoinPool-1-worker-23,5,main]
    2017-08-31 10-49-07 [worker4294967311]: compile fragment: mult_2(27)
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.143.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.143.0}
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.144.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.144.0}
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.145.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.145.0}
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.146.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.146.0}
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.147.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.147.0}
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.148.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.148.0}
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.149.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.149.0}
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.150.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.150.0}
    2017-08-31 10-49-07 [worker4294967313]: start new thread: Thread[ForkJoinPool-1-worker-9,5,main]
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.151.0}
    2017-08-31 10-49-07 [node1]: request fragment 'mult_2(27)' from CodeBase
    2017-08-31 10-49-07 [node1]: start fragment: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.151.0}
    2017-08-31 10-49-07 [node1]: RRF: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.152.0}
    2017-08-31 10-49-07 [worker4294967305]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node1]: no suitable nodes for: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.152.0}
    2017-08-31 10-49-07 [worker4294967312]: start new thread: Thread[ForkJoinPool-1-worker-16,5,main]
    2017-08-31 10-49-07 [worker4294967314]: start new thread: Thread[ForkJoinPool-1-worker-2,5,main]
    2017-08-31 10-49-07 [worker4294967313]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967312]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967302]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967309]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967301]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967304]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967303]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967298]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967315]: start new thread: Thread[ForkJoinPool-1-worker-27,5,main]
    2017-08-31 10-49-07 [worker4294967300]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967311]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967314]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967316]: start new thread: Thread[ForkJoinPool-1-worker-20,5,main]
    2017-08-31 10-49-07 [worker4294967299]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967310]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967297]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967306]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967308]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967307]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967318]: start new thread: Thread[ForkJoinPool-1-worker-13,5,main]
    2017-08-31 10-49-07 [worker4294967317]: start new thread: Thread[ForkJoinPool-1-worker-6,5,main]
    2017-08-31 10-49-07 [worker4294967315]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967319]: start new thread: Thread[ForkJoinPool-1-worker-31,5,main]
    2017-08-31 10-49-07 [worker4294967318]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967319]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967316]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [worker4294967317]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-07 [node1]: prototype cached: mult_2(27)
    2017-08-31 10-49-07 [worker4294967320]: start new thread: Thread[ForkJoinPool-1-worker-24,5,main]
    2017-08-31 10-49-07 [worker4294967320]: new TVM client: 127.0.0.1:6379
    2017-08-31 10-49-09 [node1]: RRF {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.152.0} to 131082 (rebalance)
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.186.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.177.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.180.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.151.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.147.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.176.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.182.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.184.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.146.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.178.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.181.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.150.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.183.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.187.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.148.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.142.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.185.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.188.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.143.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.144.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.141.0}
    2017-08-31 10-49-09 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.179.0}
    2017-08-31 10-49-10 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.149.0}
    2017-08-31 10-49-10 [node1]: job completed: {mult_1 -> mult_2(27), 516d7d23f078447f-0.4.255x19.145.0}
  1. Failover.

Запустим 3 узла: node1/node2/node3 (node id: 131081, 131082, 13103), на каждом включим AppServer. Оптравим запрос на старт длинной транзакции на node2. При включенном параметре запуска failover на всех нодах с AppServer можно будет увидеть следующее:

    2017-08-30 11-30-48 [node1]: failover initialized: failover(8954e80fab9e4be1, n=3){131081, {131083, 131082}}

    2017-08-30 11-30-48 [node2]: failover initialized: failover(8954e80fab9e4be1, n=3){131082, {131081, 131083}}

    2017-08-30 11-30-48 [node3]: failover initialized: failover(8954e80fab9e4be1, n=3){131083, {131081, 131082}}

После убийства node2, ноды иницируют перевыборы и выйгрывает node1, которая перезапускает транзакцию:

    2017-08-30 11-30-50 [node1]: entry node131082 is dead. Start election: failover(8954e80fab9e4be1, n=2){131081, {131083, 131082}}
    2017-08-30 11-30-50 [node1]: election succeed. Restart transaction
    2017-08-30 11-30-50 [node1]: restart transaction: 8954e80fab9e4be1

    2017-08-30 11-30-50 [node3]: entry node131082 is dead. Start election: failover(8954e80fab9e4be1, n=2){131083, {131081, 131082}}
    2017-08-30 11-30-50 [node3]: election failed.