您的位置:首页 > 其它

6.8.3 qmgr_job_entry_select函数:选择QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体

2016-04-07 15:29 489 查看
/qmgr_job.c/qmgr_job_entry_select函数用来选择QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体。

当QMGR_TRANSPORT->slot_cost大于等于2时,使用preemptive message scheduling策略选择QMGR_JOB结构体:

if (transport->slot_cost >= 2)
job = qmgr_job_preempt(job);

否则QMGR_JOB结构体来自QMGR_TRANSPORT->job_current字段。

使用qmgr_peer_select函数选择QMGR_PEER结构体。该函数使用和qmgr_transport_select类似的方法进行选择。选择QMGR_PEER其实相当于选择QMGR_QUEUE,只不过这里的QMGR_PEER是根据QMGR_JOB来组织QMGR_QUEUE。

至此已经选定了QMGR_TRANSPORT和QMGR_QUEUE结构体。

接下来选择QMGR_ENTRY结构体:

entry =peer->entry_list.next

QMGR_ENTRY结构体按顺序选择即可,也就是当根据策略选择了smtp MDA和abc.com域后,zhangsan@abc.com和lisi@abc.com先发送哪个并不重要(虽然收件人地址可能会被qmgr_message_sort_compare函数排序)。

这里总结一下结构体的选择过程:

1 使用round borin策略选择QMGR_TRANSPORT结构体。

2 选择QMGR_JOB结构体,该结构体可能采用抢占式算法选定。

3 以QMGR_JOB结构体为核心,围绕着它选择QMGR_QUEUE结构体和QMGR_ENTRY结构体。QMGR_PEER结构体的选择也采用roundborin策略。

至此成功的完成了从QMGR_TRANSPORT结构体到QMGR_ENTRY结构体的选择,可以使用QMGR_ENTRY结构体中指向MDA的VSTREAM流与MDA通信了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: