一种事件通知方法、监听器的处理方法及装置的制造方法
【技术领域】
[0001]本申请涉及计算机技术领域,尤其涉及一种事件通知方法、监听器的处理方法及
目.0
【背景技术】
[0002]通知(Notify)是一种文件系统的变化通知机制。通过该机制,如文件增加、删除等事件可以立刻让用户态得知。服务器信息块协议版本2 (英文:Server Message BlockProtocol Vers1n 2,简称:SMB2.0)中定义了客户端(英文:Client Agent,简称:CA)和文件服务器之间监听请求和响应消息。CA发送监听消息去修改目录/文件的监听类型,同时可以设置多个监听掩码。当文件服务器中被监控的目录/文件有修改操作的时候,并且和监听掩码匹配,服务器会把操作事件通过监听响应消息发送给CA。
[0003]现有技术提供的创建监听器的流程请参考图1a所示。该创建流程包括:用户通过协议发送增加监听器(watch)的消息给CA,该消息中携带监听的目录/文件。CA获取监听的目录/文件的标识(id)。CA向元数据服务器(英文:Metadata Service,简称:MDS)发送增加监听器的消息,该消息中除了携带监听的目录/文件的标识之外,还携带CA的标识以及监听掩码(mask)。其中,监听掩码表示监听的事件类型,例如删除事件、创建事件的。MDS在该监听的目录/文件的节点(Inode)信息中创建监听器。然后MDS向CA返回创建成功的消息。CA再回调协议接口向用户返回创建成功的消息。其中,在图1a中,CA(1,2,3)表示多个CA的处理流程相同。
[0004]接下来请参考图1b所示,为现有技术中监听事件通知的流程示意图。具体来说,当采用如图1a所示的方法在MDS注册了监听器之后,MDS对监听的目录/文件进行监听。当监听的目录/文件发生了监听掩码所代表的事件变化时,MDS就遍历该目录/文件的节点信息中的所有CA的监听器,假设该所有的CA为CA2,那么然后向CA2发送事件变化通知。CA2回调协议接口把事件变化通知发送给用户。
[0005]然而,上述方法在设置有目录树的情况下,因为需要监控指定目录下的所有文件和递归目录下的所有文件,所以会存在这样的问题:当目录树中的某个目录/文件有变化时,就要回溯各级父目录,经多次路由才能回溯到注册了监听器的父目录。举例来说,请参考图2所示,假设根目录(Dirl)的节点(Inodel)信息中,CA注册了一个监听器。当文件6有操作变化时,就需要通知在文件6的父目录中注册了监听器的CA,所以就需要回溯文件6的各级父目录中看哪级被注册了监听器。然而,有时候每一级目录的Inode不在同一个MDS上,所以就要发送消息给其他MDS进行查询。由此可见,现有技术中的方法存在需要多次路由才能回溯到注册了监听器的父目录的问题。
【发明内容】
[0006]本申请实施例提供一种事件通知方法、监听器的处理方法及装置,用于解决现有技术中的在事件通知时需要多次路由才能回溯到注册了监听器的父目录的技术问题。
[0007]本申请第一方面提供了一种事件通知方法,包括:
[0008]当客户端CA进行使得目录/文件发生变化的操作时,确定所述目录/文件的全路径上的各级目录的节点信息vnode是有效的;
[0009]所述CA完成所述操作后,确定所述各级目录的vnode中监听器计数不为零的vnode所对应的第一目录;
[0010]所述CA根据所述第一目录的标识在多个通知服务器NS中确定出所述第一目录的监听器所注册的NS ;其中,所述多个NS的数量与所有CA的数量相同;所述所注册的NS上保存有所述第一目录的监听器的属性信息,所述属性信息包括所述第一目录的标识、监听掩码与注册所述监听器的CA的标识;所述监听掩码用于表示监听的事件类型;
[0011]所述CA向所述所注册的NS发送事件通知,所述事件通知包括所述第一目录的标识、监听掩码以及与所述操作对应的事件内容;以使所述所注册的NS能够在所述事件通知中的监听掩码和所述属性信息中的监听掩码匹配时,向所述注册所述监听器的CA发送事件通知。
[0012]结合第一方面,在第一方面的第一种可能的实现方式中,确定所述目录/文件的全路径上的各级目录的节点信息vnode是有效的,包括:
[0013]当所述各级目录中的目录存在vnode时,查看所述vnode的标记信息;
[0014]当所述标记信息表示所述vnode有效时,确定所述vnode是有效的;
[0015]当所述标记信息表示所述vnode无效时,所述CA向元数据服务器MDS获取所述无效的vnode所对应的目录的监听器信息,并根据所述监听器信息更新所述无效的vnode信息为有效的vnode ;
[0016]当所述各级目录中的目录不存在vnode时,所述CA向元数据服务器MDS获取所述不存在vnode的目录的监听器信息,并根据所述监听器信息创建所述目录的vnode并设置为有效的vnode。
[0017]结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,当所述标记信息表示所述vnode无效时,在查看所述vnode的标记信息之前,所述方法还包括:
[0018]所述CA接收锁服务器发送的广播消息,所述广播消息用于通知所述CA所述无效的vnode所对应的目录的元数据将要发生变化;
[0019]所述CA将所述目录的vnode的标记信息设置为表示所述目录的vnode无效的信息。
[0020]本申请第二方面提供一种事件通知方法,包括:
[0021]通知服务器NS接收发送事件变化的CA发送的第一事件通知;所述第一事件通知包括第一目录的标识、监听掩码以及事件内容;所述监听掩码用于表示监听的事件类型;
[0022]所述NS根据所述第一目录的标识获得注册的用于监听所述第一目录的监听器;所述监听器的属性信息包括所述第一目录的标识、监听掩码以及注册所述监听器的CA的标识;
[0023]所述NS确定所述第一事件通知中的监听掩码和所述监听器的属性信息中的监听掩码匹配;
[0024]所述NS向注册所述监听器的CA发送第二事件通知;所述第二事件通知包括所述第一目录的标识、所述监听掩码以及所述事件内容。
[0025]本申请第三方面提供一种监听器的处理方法,包括:
[0026]客户端CA接收用于处理监听器的第一消息,所述第一消息中携带监听的目录/文件以及监听掩码;其中,所述监听掩码用于表示监听的事件类型;
[0027]所述CA获取所述监听的目录/文件的标识;
[0028]所述CA根据所述监听的目录/文件的标识在多个通知服务器NS中确定出本次处理的NS ;其中,所述多个NS的数量与所述CA的数量相同;
[0029]所述CA向确定出的所述本次处理的NS发送用于处理监听器的第二消息,所述第二消息中携带所述CA的标识、所述监听的目录/文件的标识以及所述监听掩码。
[0030]结合第三方面,在第三方面的第一种可能的实现方式中,在所述CA向确定出的所述本次处理的NS发送用于处理监听器的第二消息之后,所述方法还包括:
[0031 ] 所述CA向锁服务器发送获取所述监听的目录/文件的元数据的锁的请求;以使所述锁服务器根据所述请求通知其它CA所述元数据将要发生变化,所述其它CA中所述监听的目录/文件的节点信息vnode无效;
[0032]所述CA接收所述锁服务器返回的拿锁成功的消息。
[0033]结合第三方面或第三方面的第一种可能的实现方式中,在第三方面的第二种可能的实现方式中,所述方法还包括:
[0034]所述CA向元数据服务器MDS发送所述监听的目录/文件的标识和所述监听掩码。
[0035]本申请第四方面提供一种事件通知装置,包括:
[0036]处理单元,用于当客户端CA进行使得目录/文件发生变化的操作时,确定所述目录/文件的全路径上的各级目录的节点信息vnode是有效的;当所述CA完成所述操作后,确定所述各级目录的vnode中监听器计数不为零的vnode所对应的第一目录;根据所述第一目录的标识在多个通知服务器NS中确定出所述第一目录的监听器所注册的NS ;其中,所述多个NS的数量与所有CA的数量相同;所述所注册的NS上保存有所述第一目录的监听器的属性信息,所述属性信息包括所述第一目录的标识、监听掩码与注册所述监听器的CA的标识;所述监听掩码用于表示监听的事件类型;
[0037]发送单元,用于向所述所注册的NS发送事件通知,所述事件通知包括所述第一目录的标识、监听掩码以及与所述操作对应的事件内容;以使所述所注册的NS能够在所述事件通知中的监听掩码和所述属性信息中的监听掩码匹配时,向所述注册所述监听器的CA发送事件通知。
[0038]结合第四方面,在第四方面的第一种可能的实现方式中,所述处理单元具体用于:当所述各级目录中的目录存在vnode时,查看所述vnode的标记信息;
[0039]当所述标记信息表示所述vnode有效时,确定所述vnode是有效的;
[0040]所述发送单元还用于:当所述标记信息表示所述vnode无效时,向元数据服务器MDS获取所述无效的vnode所对应的目录的监听器信息,所述处理单元还用于根据所述监听器信息更新所述无效的vnode信息为有效的vnode ;
[0041]所述发送单元还用于当所述各级目录中的目录不存在vnode时,向元数据服务器MDS获取所述不存在vnode的目录的监听器信息,所述处理单元还用于根据所述监听器信息创建所述目录的vnode并设置为有效的vnode。
[0042]结合第四方面的第一种可能的实现方式中,在第四方面的第二种可能的实现方式中,所述装置还包括接收单元,用于当所述标记信息表示所述vnode无效时,在所述处理单元查看所述vnode的标记信息之前,接收锁服务器发送的广播消息,所述广播消息用于通知所述装置所述无效的vnode所对应的目录的元数据将要发生变化;
[0043]所述处理单元还用于:将所述目录的vnode的标记信息设置为表示所述目录的vnode无效的信息。
[0044]本申请第五方面提供一种事件通知装置,包括:
[0045]接收单元,用于接收发送事件变化的CA发送的第一事件通知;所述第一事件通知包括第一目录的标识、监听掩码以及事件内容;所述监听掩码用于表示监听的事件类型;
[0046]处理单元,用于根据所述第一目录的标识获得注册的用于监听所述第一目录的监听器;所述监听器的属性信息包括所述第一目录的标识、监听掩码以及注册所述监听器的CA的