Logic for sending memory block info messages¶
new connection:
- If new connection is pointing “up”, add all memory blocks to connection’s global transfer list.
New memory block by app function call (not trough new received memory block info):
- Add memory block to global transfer list of all connections pointing upwards.
Memory block info received from connection pointing downwards.
- Create memory block if we do not have one. Resize if needed.
- Set up transfer buffer (for send or receive) if we do not have one.
- Store memory block id into transfer buffer
- Add memory block to global transfer list of all connections pointing upwards.
- Add memory block to connection’s downwards transfer list.
Memory block info received from connection pointing upwards. * Memory block should exist. If not ignore the info message. * Set up transfer buffer (for send or receive) if we do not have one. * Store memory block id into transfer buffer
Maintaining transfer list:
- global list for sending memory block info upwards: a connection has current memory block pointer (con->sinfo.current_mblk), chain of all memory blocks (mblk->link.next) is used to move to next item in list.
Special transfer list for cloud specific account data memory blocks:
- current_cloud_mblk, works much the same as current_mblk, but downwards and only for specific memory blocks.
- connections downwards transfer list is kept trough transfer buffers, so two heads (separate ones for source and target buffers). Heads are con->sbuf.mbinfo_down and con->tbuf.mbinfo_down . links are sbuf->clink.next and tbuf->clink.next.
Clarifications
- “connection points upwards flag IOC_CONNECT_UP means that node behind the connection is higher in IO network hierarchy than this one.
- “memory block flag IOC_MBLK_UP means that data in this memory block flows up in IO network hierarchy.
200218, updated 23.5.2020/pekka