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