Page: Item processing
2019-11-21 11:11
Each item (such as Contract or parts of Parcel) will processing on the node by ItemProcessor.
Lifecycle
Lifecycle of the item processor is:
- download
- check
- resync subitems (optinal)
- polling
- send consensus
- remove
Download
First of all item should be downloaded from other node or get from param of a constructor.
Check
Then item will be checked. Immediately after download if ItemProcessor#isCheckingForce
is true
or after ItemProcessor#forceChecking(boolean)
call. Will call Approvable#check()
or Approvable#paymentCheck(Set)
if item is payment (Approvable#shouldBeU()
).
Then subitems will be checked: Approvable#getReferencedItems()
will checked if exists in the ledger;
Approvable#getRevokingItems()
will checked if exists in the ledger and its
own Approvable#getReferencedItems()
will recursively checked and will get ItemState#LOCKED
;
Approvable#getNewItems()
will checked if errors exists (after Approvable#check()
-
it recursively call check()
for new items) and recursively checked for own references, revokes and new items,
if all is ok - item will get ItemState#LOCKED_FOR_CREATION
state.
Resync subitems (optinal)
While checking, after item itself checking but before subitems checking ItemProcessor#isNeedToResync(boolean)
calling. If return value is true item processor will go to resync subitems. Resync calls to nodes
about states of subitems and update consensus states. After resync back to check subitems.
Polling
After checking item processor run polling. It set ItemState#PENDING_POSITIVE
or ItemState#PENDING_NEGATIVE
state for processing item, send state to the network via ItemProcessor#broadcastMyState()
and run polling.
While polling item processing wait for votes from other nodes and collect it
using ItemProcessor#vote(NodeInfo, ItemState)
. When consensus is got item processor save item
to the ledger with consensus state via ItemProcessor#approveAndCommit()
if consensus is positive or
via ItemProcessor#rollbackChanges(ItemState)
if consensus is negative.
Send consensus
Then item processor looking for nodes that not answered with for polling and send them new consensus until they will have answered.
Remove
And finally, if node got answers from all other nodes - item processor removing via ItemProcessor#removeSelf()
Look at ItemProcessor#processingState
to know what happend with processing at calling time.