2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2024-12-25 12:41:45 +00:00
1 use fifo pipe to enhance getadapter
chenglch edited this page 2016-01-21 22:27:56 -05:00

1. Overview

This is a doc describing what need to do to enhance the getadapter.

Currently, getadapter includes getadapter and findadapter command. findadapter is a command only used in genesis. getadapter fork process to handle the client request, we can call it client process. When the genesis is running , CN node will send the nics information wighin the 'findadapter' request. For the findadapter request, xcatd will also fork plugin process for every node, then update the nics files for every node.The client process is running in a loop to scan these files which is updated by the findadapter command every 60 seconds.

This model is heavy and configurenics feature suppose the nics information is in the nics table.

2. Database impact

2.1 Add taskstate table

A new table called taskstate which contains the following columns should be added to record the request state:

taskstate Table column

node: primary key
command:  command request is running on the node, currently only `getadapter` is supported
state: request state of the command for the node. `getadapter` only use 'waiting' state to support callback request.
pid: the `immediatech` process id of the request.  `immediatech` is forked by xcatd listerner and it is also the parent process of the plugin process.
reserve: a column which can be used to lock the request for a node in the future,  not used by `getadapter` now
disable: xcat table always has this column

2.2 Add nicsadapter column in nics table

nicsadapter : save multiple nics infomation like mac, pci slot, nicname, linkstate etc information in this column.

Format Example:

enp12s0f1!pci=/pci0000:00/0000:00:01.0/0000:0c:00.1 mac=34:40:b5:be:6a:84  linkstate=DOWN,enp0s29u1u1u5!pci=/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.5/2-1.1.5:1.0 mac=36:40:b5:bf:44:33 linkstate=UP

3. Command request impact

3.1 Add action description in command xml

Add <action>update</action> in request xml when the getadapter request is from genesis. If no action description or the description is <action>inspect</action>, this request will be looked as a new request (not callback)

3.2 Add route_request hook in xcatd

When the callback request arrived, there is no need to fork plugin processes for every node. This hook will route the request information to fork a plugin process for a new request , or send the request information which contains the nics information to the right process waiting for a callback reqeust.

3.3 Command option

getadapter <noderange> [-f]
no option: If no adapter information for the node, inspect it.
-f : Already has information for the node, maybe nics hardware is updated, inspect it again

3.4 Delete findadapter command.

As getadapter already has request state, there is no need to add findadapter any more.

3.5 Command output

Example: ( just example , in the real genesis environment, no virtual bridge or virtual ethernet )

Node c910f05c01bc02:[0]->br-eno1!mac=34:40:b5:be:6a:80|pci=/virtual|linkstate=UP Node c910f05c01bc02:[1]->br-enp12s0f1!mac=34:40:b5:be:6a:84|pci=/virtual|linkstate=DOWN Node c910f05c01bc02:[2]->eno1!mac=34:40:b5:be:6a:80|pci=/pci0000:00/0000:00:01.0/0000:0c:00.0|candidatename=eno1/enp12s0f0/enx3440b5be6a80|vendor=Emulex Corporation|model=OneConnect 10Gb NIC (be3)|linkstate=UP

Node c910f05c01bc03:[0]->br-eno1!mac=34:40:b5:be:6a:80|pci=/virtual|linkstate=UP Node c910f05c01bc03:[1]->br-enp12s0f1!mac=34:40:b5:be:6a:84|pci=/virtual|linkstate=DOWN

4. Add fifo pipe to send/recv the message

(1) The pipe file is located at the directory of GET_ADPATER_DIR => /var/run/getadapter.

(2) The pipe file name is the 'immediatech' process id.

(3) When the nodes are deploying and booting genesis, fifo pipe is created and wait for the nics information, if all of the information is retrieved, return success. If waiting time is more than ALARM_TIMEOUT => 1800(30 minutes), alarm signal handler is used to terminate the getadapter process.