代码之家  ›  专栏  ›  技术社区  ›  E.S.

为netconf编辑配置请求创建原子进程

  •  0
  • E.S.  · 技术社区  · 4 年前

    我正在创建一个自定义系统,当用户提交netconf时 edit-config ,它将在我的系统中启动一组操作,这些操作将原子性地更改我们系统的配置,然后向用户提交成功或失败的通知。

    将其视为一个大型SQL事务,最终要么提交,要么回滚。

    那么,步骤

    1. 用户提交 编辑配置
    2. 系统接受配置并执行此配置
    3. 如果配置成功,则通过竖起大拇指的方式发送响应(不确定正式的方式)
    4. 如果配置失败,则通过拇指向下响应发送(我必须确保配置在内部回滚)
    5. 所有这些都是原子性的。因此,如果用户连续提交两个配置,它们就不会相互冲突。

    我们实现这一目标的工作思路(可能不是最好的)是通过接受 编辑配置 然后,在sysrepo中,我们将使用成功或失败标志编辑leaf的部分内容,它们将在与初始更改相同的会话中发生。我们希望这将使一切保持原子性;通过在会话之外进行编辑,多个配置更改可能会相互冲突。

    我们不确定是使用纯netconf还是直接利用sysrepo。我们注意到了所有这些 plugins/bindings made for sysrepo 并认为这些可以直接用于与我们的数据存储进行通信。

    但也就是说,我们的工作理念很可能不是最佳实践方法。实现这一目标的最佳方式是什么?

    我们的系统是:

    我们的杨档案是

    module rxmbn {
      namespace "urn:com:zug:rxmbn";
      prefix rxmbn;
    
      container rxmbn-config {
        config true;
        leaf raw {
          type string;
        }
        leaf raw_hashCode {
          type int32;
        }
        leaf odl_last_processed_hashCode {
          type int32;
        }
        leaf processed {
          type boolean;
          default "false";
        }
      }
    }
    
    

    目前,我们可以:

    • 对netopeer服务器执行编辑配置
    • 我们可以在sysrepo数据存储中看到新的配置寄存器
    • 我们可以通过sysrepo的API捕获sysrepo注册数据的时刻

    但我们遇到了问题

    • 在更新会话期间原子性地编辑数据存储(由于锁定,这是正常的。事实上,如果在更新会话中无法编辑,那很好,也没有必要。主要目标是下一个项目符号)
    • 对新的编辑配置做出原子性反应,并对最终用户做出响应

    我们对netconf和yang都有点陌生,所以我相信有一些方法可以利用 notification api或 event 无论是通过netopeer会话还是sysrepo,我们都还不够了解。

    如果有任何示例或实现建议来为此创建原子事务,那将非常有用。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Community PPrice    3 年前

    我对sysrepo一无所知,所以这是从NETCONF的角度来看的。

    NETCONF以请求-响应的方式在单个会话中连续地处理请求,这意味着你在单个NETCONF会话中所做的一切都应该是“原子性的”-无论你做什么,你都不能发送两个请求,并以相反的顺序或并行的方式应用它们。行为良好的客户端在发送新请求之前也会等待服务器的每个响应,特别是如果所有更新都必须按特定的顺序成功执行。该协议也没有定义取消已发送到服务器的请求的方法。

    如果需要防止其他会话在另一个会话执行多编辑配置时修改数据存储,可以使用 <lock> <unlock> NETCONF操作锁定整个数据存储。还有 RFC5717 以及部分锁定,它只锁定数据存储的特定分支。

    使用通知报告成功 <edit-config> 这将是非常不寻常的——就是这样 <rpc-reply> <rpc-error> 是否在同一时段内。您将使用通知通知其他会话正在发生的事情。事实上,有标准 base notifications 用于配置更改。

    我建议阅读全文 RFC6241 在继续之前。您应该了解候选数据存储、确认提交等。

        2
  •  1
  •   Bhuvan    2 年前

    您正在开发哪个组件?Netconf客户端/管理器还是Netconf服务器?

    一般来说,Netconf服务器应该以原子方式实现单个Netconf RPC操作。

    当Netconf客户端希望以原子方式执行一组操作时,它应该遵循RFC 6241中Apendix E.1中解释的过程。

    推荐文章