轻量级目录访问协议(ldap)冲突检测机制和方法

文档序号:6478844阅读:294来源:国知局
专利名称:轻量级目录访问协议(ldap)冲突检测机制和方法
技术领域
本发明涉及LDAP冲突检测机制和方法,用于允许LDAP客户端检测和避免LDAP目 录内的条目上的更新操作冲突。
背景技术
由此定义了以下缩写,这些缩写中的至少一些在现有技术和本发明的以下描述中 提及。AAA认证、授权和计费CAS客户管理系统⑶C冲突检测计数器CS 电路交换DIT 目录信息树DN 区别名FE 前端EMA Ericsson 多次激活GSM全球移动通信系统HLR归属位置寄存器HSS归属订户服务器IT 信息技术LDAP轻量级目录访问协议MAP移动应用部分NDC要检测的冲突的数目PS分组交换在通信领域中,目前的订户数据库架构正面临着主流IT技术的即将出现的架构 的挑战,在该即将出现的架构中,将订户数据保存在与提供特定服务的节点分离的一个或 多个数据库中。该方式称作多层架构,图1示出了示意图,该示意图以图解方式示出了在无 线电信通信领域中使用的这种类型的架构。参照图1,示出了通信网络100,通信网络100具有包括HSS FE102和置备FE 104 在内的IMS网络101以及包括HLR/AuC FE 108和AAA FE 110在内的CS/PS核心网106。 HSS FE 102、置备FE 104,HLR/AuC FE 108和AAA FE 110都与集中式数据库112进行接口 连接,集中式数据库112可以耦合至EMA 114(例如订户置备设备),EMA 114进而耦合至传 统CAS 116。IMS网络101和CS/PS核心网106等等包括比这里示出的组件更多的组件,然而为了清楚起见,这里仅描述了与本讨论相关的组件。该多层架构提供了若干优点,当传统移动通信网络相比时,这些优势中最小的并 不是在服务逻辑层中有价格更低廉的可缩放性,或者合并订户数据以使得订户管理更容易 且更便宜的能力。在该多层架构中,传统的整体节点(同时包括数据和处理逻辑)(例如 HSS、HLR 禾口 AAA)已演进为处理前端(FE)(例如 HSS FE 102、置备 FE 104、HLR/AuC FE 108 和AAA FE 110),而数据现在驻留于集中式数据库112中或驻留于上述前端102、104、108和 110可访问的分布式数据库中。在该多层架构中,HLR/AuC FE 108 (例如)在从CS/PS核心网106接收到某外部 事件(即MAP消息)之后,必须从集中式数据库112读取订户相关数据,根据从CS/PS核心 网106接收到的数据来处理该所读取的数据,并且根据该内部处理的结果,HLR/AuC FE 108 可能想要修改当前存储在集中式数据库112内的订户相关数据。以下参照图2(现有技术) 提供了关于该过程的详细解释,在图2中,集中式数据库112是LDAP目录112,HLR/AuC FE 108是LDAP客户端108。参照图2 (现有技术),其中的信号流图示出了传统LDAP客户端108如何从传统 LDAP目录112(或LDAP服务器112)中的条目读取数据202,以及然后如何修改存储在传统 LDAP目录112的条目内的数据202。与客户端108读取然后修改数据相关联的步骤如下 la-lb.出于任何目的,从客户端108感兴趣的LDAP目录112中的条目读取一些数据202。 这需要客户端108就爱你个一个LDAP搜索请求(SearchRequest)操作发送至LDAP目录 112 (步骤la)。然后,LDAP服务器112使用一个或多个LDAP搜索响应(SearchResponse) 应答来发送来自条目的数据202的拷贝。2.客户端108可以使用应用逻辑,出于以下任何目的,处理所读取的数据202: 例如,提取信息、处理与一些其它内部数据相对的所读取的数据、将所读取的数据发送至 另一节点/过程、打印一些结果、估计一些条件……。在这种情况下,客户端108已更新 数据202’。3a-3b.客户端108想要对在LDAP目录112处先前读取的条目中保存的数 据202执行一些更新。这需要客户端108将具有更新后数据202’的一个LDAP修改请求 (ModifyRequest)操作发送至LDAP目录112(步骤3a)(注意被请求更新的每个目录条目 将需要一个LDAP修改请求操作)。LDAP目录112将条目更新为具有数据202’,并在LDAP 修改响应(ModifyResponse)(结果成功)操作中向客户端108发送成功消息(步骤3b)。 单一 LDAP修改操作仅适用于目标条目,但可以包含与在该特定条目中保存的属性类型的 集合上期望的一样多的修改操作(添加/删除/替换)。不幸的是,如果存在多于一个LDAP客户端或同时存在LDAP客户端102和108 (例 如)可与LDAP目录112进行接口连接,则可能出现图3(现有技术)所示的有问题的情形, 其中,LDAP客户端102 (客户端2)超越LDAP客户端108 (客户端1)先前读取了的、但LDAP 客户端108(客户端1)尚未修改的数据202。步骤如下1a.客户端1请求从LDAP目录112 读取一些数据202。该消息可以是读取任何量的数据的请求,并且任何标准LDAP SEARCH可 以适用且用于请求数据202。lb.客户端1从LDAP目录112接收所请求的数据202。这可以通过一个或多个LDAP消息(LDAP搜索结果条目)来完成,该LDAP消息包括指示所有请求的信息已被发送的 消息(LDAP搜索结果完成)。此时,客户端1可以花一些时间,出于以下任何目的,执行任何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的内 容来请求更多的一些数据……。在这种情况下,客户端1已更新数据202’。2a.客户端2请求从LDAP目录112读取一些数据202。该读取消息可以请求与前 述相同的数据、或先前读取的数据的一部分、或LDAP目录112内的任何其它数据。在本示 例中,假定客户端2请求了在步骤Ib读取的相同数据202的至少一部分。2b.客户端2从LDAP目录112接收所请求的数据202。这可以通过一个或多个 LDAP消息(LDAP搜索结果条目)来完成,该LDAP消息包括指示所有请求的信息已被发送的 消息(LDAP搜索结果完成)。然后,客户端2执行任何所需的处理和逻辑,该执行操作使用 或不使用针对这种目的而读取的数据。在这种情况下,客户端2已更新数据202”。3a.客户端2请求对客户端1先前读取的数据202中的一些(至少一个属性)或 全部进行修改。3b.客户端2的修改请求成功。该修改成功执行,这是由于LDAP目录112没有任 何不允许该修改的理由/信息。4a.客户端1请求对先前读取的数据202进行修改。具体地,客户端1请求修改客 户端2在先前步骤3b期间可能已全部或部分超越的先前读取数据202的一个或多个属性。4b.客户端1的修改请求成功,现在,数据202’存储在LDAP目录112中。LDAP目 录112没有任何不允许对数据的该具体修改的原因或信息。然而,可能发生的是,基于步骤 Ib处的数据状态,客户端1所需的一些修改可能不是仍然有效。因此,可能出现一些数据不 一致。在这种特定情况下,可以看出,在客户端1继续更新由客户端1读取的数据之前, 该数据已被客户端2修改。这是不期望的。例如,如果客户端1执行的数据更新依赖于“启 用,,的服务状态,则可能发生的是,客户端2已将该服务状态修改为“禁用”,这意味着客户 端1所作的更新将不一定可能发生。由于错误的数据更新使得这可能以失败结束。因此, 如果LDAP客户端(例如HLR/AuC FE 108)执行LDAP搜索,则处理LDAP响应,然后将修改 (LDAP修改)发送至LDAP目录112。那么,如今完全不能确保一旦接收到LDAP修改,相同 条件仍然有效,这是由于在响应于来自第一 LDAP客户端的请求而应答了 LDAP搜索的时刻 之后,另一 LDAP客户端(例如HSS FFE 102)可能已对LDAP目录112执行一些修改。这种 情形可能导致数据不一致。相应地,一直以来,需要克服该具体缺点以及其它缺点,本发明 克服了这些缺点。

发明内容
在一个方面,本发明提供了一种目录以及一种用于在来自多于一个客户端前端 (HSS-FF、HLR-FF)的更新操作时检测并避免所述目录中的条目上的冲突的方法。所述目录 和方法执行以下步骤(a)在所述目录处,从客户端前端接收读取所述目录中的条目上的 数据的请求;(b)在所述目录处,分配与所述目录中的所述条目上的所述数据的至少一 个 子集相对应的至少一个给定的冲突检测值;(c)向所述客户端前端提交所请求的数据以及 所述至少一个给定的冲突检测值;(d)在所述目录处,从所述客户端前端接收修改所述目 录中的所述条目上的所述数据的所述至少一个子集的请求,其中,该请求包括针对至少一 个给定的冲突检测值中的每一个的至少一个更新后的冲突检测值;(e)在所述目录处,确定所述至少一个更新后的冲突检测值是否与对应的当前冲突检测值一致;(f)如果所述至 少一个更新后的冲突检测值与对应的当前冲突检测值一致,则向所述客户端前端提交对修 改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的接受,否则,向所述 客户端前端提交对该请求的拒绝;以及(g)在发现该请求可接受的情况下,将当前冲突检 测值设置为下一个值。该方案是期望的,这是由于其防止了数据不一致以及因错误的数据 更新而引起的失败。在另一方面,本发明提供了一种客户端前端以及一种用于在来自所述客户端前端 (HSS-FF、HLR-FF)的更新操作时检测并避免目录中的条目上的冲突的方法。所述客户端前 端和方法执行以下步骤(a)从客户端前端提交读取所述目录中的条目上的数据的请求; (b)在所述客户端前端处,从所述目录中的所述条目检索所请求的数据,以及与所述数据的 至少一个子集相对应的至少一个给定的冲突检测值;(c)在所述客户端前端处,处理检索 到的数据;(d)从所述客户端前端发送修改所述目录中的所述条目上的所述数据的所述至 少一个子集的请求,其中,该请求包括针对至少一个给定的冲突检测值中的每一个的至少 一个更新后的冲突检测值;以及(e)如果在所述目录处所述至少一个更新后的冲突检测值 与对应的当前冲突检测值一致,则在所述客户端前端处接收对修改所述目录中的所述条目 上的所述数据的所述至少一个子集的请求的接受,否则,在所述客户端前端处接收对该请 求的拒绝。该方案是期望的,这是由于其防止了数据不一致以及因错误的数据更新而引起 的失败。在另一方面,本发明提供了一种用于通过以下步骤来允许客户端前端检测并避免 目录内的条目上的更新操作冲突的系统和方法(a)向目录发送启动事务的请求;(b)从所 述目录接收包括事务标识符在内的响应;(c)发送读取所述目录中的所述条目中的数据的 请求,其中,该请求还包括所述事务标识符;(d)从所述目录接收包括所读取的数据和所述 事务标识符在内的响应,其中,所述目录阻止所述条目内的数据成为正在进行的事务的一 部分,使得其它客户端不能修改所阻止的数据;(e)处理所读取的数据;(f)发送修改所述 目录中的所述条目中的数据的请求,其中,该请求包括修改的数据和所述事务标识符,并且 由于存在所述事务标识符,因此所述目录执行修改数据的请求;以及(g)向所述目录发送 停止所述事务的请求。该方案是期望的,这是由于其防止了数据不一致以及因错误的数据 更新而引起的失败。本发明的附加方面将部分地在以下具体实施方式
、附图和任何权利要求中阐述, 部分地从具体实施方式
中推导出或者可以通过实施本发明来了解到。应当理解,以上总体 描述和以下具体实施方式
仅是示例性的和解释性的,而不是对所公开的本发明的限制。


参照与附图相结合而作出的以下具体实施方式
,可以获得对本发明的更全面理 解,附图中图1(现有技术)是具有与LDAP数据库进行接口连接的多个LDAP客户端的通信 网络的图,其用于帮助解释本发明解决的冲突问题;图2(现有技术)是一幅信号流图,示出了传统LDAP客户端如何从传统LDAP目录 中的条目读取数据,以及然后如何修改存储在传统LDAP目录内的数据;
图3 (现有技术)是一幅信号流图,示出了当一个LDAP客户端超越另一 LDAP客户端先前读取但尚未修改的数据时如何出现冲突问题;图4是具有与增强型LDAP数据库进行接口连接的多个增强型LDAP客户端的通信 网络的图,其用于帮助解释本发明解决的冲突问题;图5-6是信号序列图,用于帮助解释根据本发明第一实施例的冲突检测机制/方 法如何解决冲突问题;图7是一幅信号序列图,用于帮助解释根据本发明第二实施例的冲突检测机制/ 方法如何解决冲突问题;图8是一幅信号序列图,用于帮助解释根据本发明第三实施例的冲突检测机制/ 方法如何解决冲突问题;图9是一幅信号序列图,用于帮助解释根据本发明第四实施例的冲突检测机制/ 方法如何解决冲突问题。
具体实施例方式参照图4,图4是示出了示例通信网络400的图,用于帮助解释可以根据本发明如 何增强LDAP客户端402、404、408和410以及LDAP订户数据库412,使得增强型LDAP客户 端402、404、408和410中的任一个可以检测增强型LDAP数据库412(LDAP目录412)内的目 录条目上的更新操作冲突。如图所示,通信网络400具有IMS网络401,IMS网络401包括 增强型LDAP客户端402和404,分别表示为增强型HSS FE402和增强型置备FE 404。通信 网络400还具有CS/PS核心网406,CS/PS核心网406包括增强型LDAP客户端408和410, 分别表示为增强型HLR/AuC FE 408和增强型AAA FE 410。增强型HSS FE 402、增强型置 备FE 404、增强型HLR/AuC FE 408和增强型AAA FE 410都与增强型集中式LDAP数据库 412 (或上述前端402、404、408和410可访问的分布式数据库)进行接口连接,增强型集中 式LDAP数据库412耦合至EMA 414 (例如,订户置备设备),EMA 414进而耦合至CAS 416。 IMS网络401和CS/PS核心网406等等包括比这里示出的组件更多的组件,但为了清楚,这 里仅描述了与本讨论相关的组件。如上所示,本发明涉及一种冲突检测机制/方法,允许LDAP客户端404 (例如)检 测由不同的LDAP客户端408(例如)在LDAP目录412内的条目上造成的更新操作冲突。 实际上,这里描述了这种冲突检测机制/方法的四个不同实施例,所有这些实施例都允许 LDAP客户端检测由不同的LDAP客户端在LDAP目录内的条目上造成的更新操作冲突。接下 来,在图5-6所示的两个信号流图的协助下描述冲突检测机制的第一实施例。在第一实施例中,冲突检测机制基于对LDAP目录412的每个条目中的新的多值 INTEGER属性类型(这里称作“collision detection counter (冲突检测计数器)”(CDC)) 进行定义,其中,要检测同时存在的LDAP客户端402、404、408和410之间的冲突。例如,该 新⑶C属性可以定义为(<assigned_0ID>NAME ‘cdc,DESC 'Collision Detection Counter'SYNTAX ‘1. 3. 6. 1. 4. 1. 1466. 115. 121. 1. 27,
X-ORIGIN ‘Mutex-CDC-Mechanism,)对于与可以如何在第一位置定义属性有关的细节,参考标题为“Lightweight Directory Access Protocol (LDAP) directory InformationMode1sH SJii BJ2006 ip 6月的RFC 4512 (其内容以引证的方式并入于此)。该新CDC属性可以在所期望的结构对象类(即,用于目录条目的对象类)中称作 “强制”属性。在这种情况下,每个目录条目将属于一个结构对象类且仅属于一个结构对象 类,并且,当创建了相应的目录条目时,将置备在所选结构对象类中被定义为强制的所有属 性。备选地,可以在新的“辅助”对象类中定义新属性。在这种情况下,一个条目将属于一 个结构对象类且仅属于一个结构对象类,但其可能还属于零个或更多个辅助对象类。可以将⑶C作为循环计数器进行管理,因此可以经由以下数学表达式(‘% ’表示 “取模”运算符)来更新每一个⑶C CDC [n+1] = (CDC[n]+l) % M其中,“Μ”是该计数器可达到的最大数目(因此,⑶C将遵循序列0 — 1 — 2…… —(Μ-2) — (M-I) —0—1……)。在目录条目创建时,不需要对值CDC进行初始化,但在 条目创建时可能需要置备值⑶C。此外,冲突检测机制还基于对指示同时存在的LDAP客户端402、404、408和410的 新参数(这里称作NCD “要检测的冲突的数目”)进行定义,同时存在的LDAP客户端402、 404,408和410是要在修改LDAP目录412中的数据时防止它们自身之间的冲突时所考虑 的。此外,冲突检测机制基于将一些“额外”修改操作(针对⑶C属性值)添加至标准 LDAP修改请求操作。该特定修改的关键方面涉及利用标准LDAP行为,其中,在尝试将值“添 力口”至已存在且具有该相同值的属性的情况下,拒绝LDAP修改消息。以下更详细地讨论这
——占
;^ ο使用这些定义以及修改后的LDAP修改消息,LDAP客户端402、404、408和410将 遵循以下规则1.读取已针对冲突检测而准备的、检索到的数据(被存储在LDAP目录412中的条 目中)中的当前CDC属性值。实际上,可以从LDAP目录412中的相同条目或任何其它条目 读取任何其它数目的CDC属性值。2.当修改已针对冲突检测而准备的、条目中的任何数据时,要考虑以下两件事A. LDAP修改消息可以包括对于以下值、针对⑶C属性的“添加”操作CDC =(所读取的 CDC 值 +1) % MCDC =(所读取的 CDC 值 +2) % M......CDC =(所读取的 CDC 值 +NCD) % M注意在使用循环计数器的情况下,根据CDC属性的类型,可能需要考虑模数Μ。B.在“添加”操作之后,LDAP修改消息包括“替换”操作,如下CDC =所读取的CDC值+1并且以下,有示例帮助更好地解释这些规则的用途假定对于已针对冲突检测而准备的条目,LDAP客户端402(例如)所读取的⑶C值是0,同时,从LDAP目录412读取该数据。此外,假定CDC被实现为循环计数器,M(最大 值)是65536。那么,⑶C属性可以存储值0至65535,如下0- > 1- > 2- >......- > 65534- > 65535- > 0_ > 1此外,假定要检测的冲突的数目被设置为4 (NCD = 4)。这意味着每个LDAP客户端 (例如LDAP客户端402)能够“检测”是1个、2个、3个还是甚至4个其它LDAP客户端(例 如LDAP客户端404、408和410)已在从最初读取⑶C的时刻起的时间内以及在第一 LDAP 客户端(例如LDAP客户端402)决定需要对条目中的数据作出一些更新的时刻更新了“受 保护的”条目。然后,第一 LDAP客户端(例如LDAP客户端402)发送包括以下“添加”操作在内 的LDAP修改消息CDC = 1 CDC = 2CDC = 3CDC = 4另外,在“添加”操作之后,LDAP修改消息具有“替换”操作,如下CDC = 1参照两个示例序列图,详细讨论了 LDAP目录412如何响应于该LDAP修改消息,这 使得能够对同时存在的访问中的冲突进行检测,并且如果存在冲突则避免执行所请求的更 新。为了完整,这两个示例序列图还包括与以下步骤有关的描述=LDAP客户端读取数据、处 理所读取的数据、然后发送修改LDAP目录412内的数据的请求。参照图5,图5是示出了实现冲突检测机制的一个示例的信号序列图,其中,所选 的NCD值等于根据本发明适当检测冲突所需的值。在本示例中,示出了三个同时存在的 LDAP客户端402、404和408(客户端1、2和3),由此,NDC = 3将足以、但更大的NDC(如NDC =4)也将足以在LDAP客户端402、404和408中的任意之间存在冲突的情况下,避免执行 由LDAP客户端402、404和408之一请求的更新。步骤如下1a.客户端1发送针对从LDAP 条目412中的条目读取一些数据502的消息。该消息可能是读取包括CDC在内的任何量的 数据的请求,并且可以使用任何标准LDAP SEARCH来请求数据502和CDC值。lbl.-lb2.客户端IWLDAP目录412接收所请求的数据502和⑶C值。这可以通 过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤lbl)并通 过指示搜索已成功的LDAP搜索结果完成(步骤lb2)来完成。在本示例中,客户端1的、所 读取的数据的本地拷贝具有CDC= (x)0此时,客户端1可以花一些时间,出于以下任何目 的,执行任何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基 于所读取的内容来请求更多的一些数据……。在这种情况下,客户端1已更新数据502’。2a.客户端2发送针对从LDAP目录412中的相同条目读取相同数据的至少一部分 的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准 LDAP SEARCH来请求数据和CDC值。2bl.-2b2.客户端2从LDAP目录412接收所请求的数据502和⑶C值。这可以通 过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤2bl)并通 过指示搜索已成功的LDAP搜索结果完成(步骤2b2)来完成。在本示例中,客户端2的、所读取的数据的本地拷贝具有CDC= (x)0此时,客户端2可以花一些时间,出于以下任何目 的,执行任何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基 于所读取的内容来请求更多的一些数据……。在这种情况下,客户端2已更新数据502”。3a.客户端2请求对至少一部分也由客户端1读取的所读取数据502进行修改。 具体地,客户端2发送包括以下各项在内的LDAP修改请求(1)基本对象DN条目;(2)三 个添加操作添加=CDC = (x)+l ;CDC = (χ)+2 ;CDC = (χ)+3 ; (3)修改后的数据502”;以及 (4)替换操作替换=CDC = (χ)+1。3b.客户端2从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改 已成功执行,这是由于LDAP目录412没有以下⑶C属性该⑶C属性具有三个“添加”操作 中的任一个中的相同值。具体地,在这三个添加操作之前,LDAP目录412的⑶C值为(X), 在这些添加操作中,CDC = (x)+l、CDC = (x)+2、CDC = (x)+3。解除(RECALL)标准 LDAP 行为使得如果尝试将值“添加”至已存在且具有该相同值的属性,则将拒绝LDAP修改消息 (在步骤6a详细讨论)。在这一点上,LDAP目录412已将所读取的条目与数据502”和⑶C =ω+ι相关联。4a.客户端3发送针对从LDAP目录412中的相同条目读取相同数据的至少一部分 的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准 LDAP SEARCH来请求数据和CDC值。4bl. -4b2.客户端3从LDAP目录412接收所请求的数据502”。这可以通过包括 所请求的信息(DN、属性列表、⑶C值)在内的LDAP搜索结果条目(步骤4bl)并通过指示 搜索已成功的LDAP搜索结果完成(步骤4b2)来完成。在本示例中,客户端3的、所读取的 数据的本地拷贝具有CDC= (x)+l。此时,客户端3可以花一些时间,出于以下任何目的,执 行任何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读 取的内容来请求更多的一些数据……。在这种情况下,客户端3已更新数据502’”。5a.客户端3请求对至少一部分也由客户端1和2从相同条目读取的所读取数据 进行修改。具体地,客户端3发送包括以下各项在内的LDAP修改请求(1)基本对象DN条 目;(2)三个添加操作添加=CDC = (x+D+l ;CDC = (x+l)+2 ;CDC = (x+l)+3 ; (3)修改后 的数据502,,,;以及(4)替换操作替换=CDC = (x+l)+l。5b.客户端3从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改 已成功执行,这是由于LDAP目录412没有以下⑶C属性该⑶C属性具有三个“添加”操作 中的相同值。具体地,在这三个添加操作之前,LDAP目录412的CDC值为(χ+l),在这些添 加操作中,CDC= (x+D+UCDC = (x+l)+2、CDC= (x+l)+3。解除(RECALL)标准 LDAP 行 为使得如果尝试将值“添加”至已存在且具有该相同值的属性,则将拒绝LDAP修改消息(在 步骤6a详细讨论)。在这一点上,LDAP目录412已将所读取的条目与数据502’ ”和⑶C = (χ)+2相关联。6a.客户端1请求对在步骤la_lb读取回 来的数据502进行修改。具体地,客户 端1发送包括以下各项在内的LDAP修改请求(1)基本对象DN条目;(2)三个添加操作 添加⑶C = (x)+l ;⑶C = (χ)+2 ;⑶C = (χ)+3 ; (3)修改后的数据502’ ;以及(4)替换操 作替换=CDC= (χ)+1。6b.客户端1从LDAP目录412接收指示修改请求未成功的LDAP修改响应。修改未成功执行,这是由于LDAP目录412具有以下⑶C属性该⑶C属性称为⑶C= (x)+2,其 是第二个“添加”操作中的相同值。解除(RECALL)标准LDAP行为使得如果尝试将值“添 加”至已存在且具有该相同值的属性,则将拒绝LDAP修改消息。这在步骤6a发生,由此,成 功检测到冲突。参照图6,图6是一幅信号序列图,示出了在所选的NCD值低于所需的值从而使得 难以根据本发明来适当地检测所有可能的冲突的情况下可能出现的问题。在本示例中,示 出了三个同时存在的LDAP客户端402、404和408 (客户端1、2和3),但NDC = 1,这可能在 检测LDAP客户端402、404和408之间的冲突时造成问题。步骤如下la.客户端1发送针对从LDAP条目412中的条目读取一些数据502的消息。该消 息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准LDAP SEARCH 来请求数据502和⑶C值。lbl.-lb2.客户端IWLDAP目录412接收所请求的数据502和⑶C值。这可以通 过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤lbl)并通 过指示搜索已成功的LDAP搜索结果完成(步骤lb2)来完成。在本示例中,客户端1的、所 读取的数据的本地拷贝具有CDC= (x)0此时,客户端1可以花一些时间,出于以下任何目 的,执行任何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基 于所读取的内容来请求更多的一些数据……。在这种情况下,客户端1已更新数据502’。2a.客户端2发送针对从LDAP目录412中的相同条目读取相同数据的至少一部分 的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准 LDAP SEARCH来请求数据和CDC值。2bl.-2b2.客户端2从LDAP目录412接收所请求的数据502和⑶C值。这可以通 过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤2bl)并通 过指示搜索已成功的LDAP搜索结果完成(步骤2b2)来完成。在本示例中,客户端2的、所 读取的数据的本地拷贝具有CDC= (x)0此时,客户端2可以花一些时间,出于以下任何目 的,执行任何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基 于所读取的内容来请求更多的一些数据……。在这种情况下,客户端2已更新数据502”。3a.客户端2请求对至少一部分也由客户端1读取的所读取数据502进行修改。 具体地,客户端2发送包括以下各项在内的LDAP修改请求(1)基本对象DN条目;(2) — 个添加操作添加⑶C = (x)+l ; (3)修改后的数据402”;以及(4)替换操作替换⑶C = (χ)+1。3b.客户端2从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改 已成功执行,这是由于LDAP目录412没有以下⑶C属性该⑶C属性具有该一个“添加”操 作中的相同值。具体地,在该添加操作⑶C = (x)+l之前,LDAP目录412的⑶C值为(χ)。 解除(RECALL)标准LDAP行为使得如果尝试将值“添加”至已存在且具有该相同值的属性, 则将拒绝LDAP修改消息。在这一点上,LDAP目录412已将所读取的条目与数据402”和⑶C =ω+ι相关联。4a.客户端3发送针对从LDAP目录412中的相同条目读取相同数据的至少一部分 的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准 LDAP SEARCH来请求数据和CDC值。
4bl. -4b2.客户端3从LDAP目录412接收所请求的数据502”。这可以通过包括 所请求的信息(DN、属性列表、⑶C值)在内的LDAP搜索结果条目(步骤4bl)并通过指示 搜索已成功的LDAP搜索结果完成(步骤4b2)来完成。在本示例中,客户端3的、所读取的 数据的本地拷贝具有CDC= (x)+l。此时,客户端3可以花一些时间,出于以下任何目的,执 行任何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读 取的内容来请求更多的一些数据……。在这种情况下,客户端3已更新数据502’”。5a.客户端3请求对至少一部分也由客户端1和2从相同条目读取的所读取数据 进行修改。具体地,客户端3发送包括以下各项在内的LDAP修改请求(1)基本对象DN条 目;(2) —个添加操作添加CDC= (x+l)+l ;⑶修改后的数据502’”;以及(4)替换操作 替换:CDC = (x+l)+l05b.客户端3从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改 已成功执行,这是由于LDAP目录412没有以下⑶C属性该CDC属性具有该一个“添加” 操作中的相同值。具体地,在该添加操作⑶C = (x+D+l之前,LDAP目录412的⑶C值为 (x+1)。解除(RECALL)标准LDAP行为使得如果尝试将值“添加”至已存在且具有该相同 值的属性,则将拒绝LDAP修改消息。在这一点上,LDAP目录412已将所读取的条目与数据 502,” 和 CDC = (χ)+2 相关联。
6a.客户端1请求对在步骤la-lb读取回来的数据502进行修改。具体地,客户端 1发送包括以下各项在内的LDAP修改请求(1)基本对象DN条目;(2) —个添加操作添 加=CDC = (x)+l ;(3)修改后的数据502,;以及(4)替换操作替换=CDC = (x)+I06b.客户端1从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改 已执行,这是由于LDAP目录412没有以下⑶C属性该⑶C属性具有该一个“添加”操作中 的相同值。具体地,在该添加操作⑶C = (x)+l之前,LDAP目录412的⑶C值为(x)+2。这 是不期望的,这是由于客户端2和3先前都修改了数据,然而,本发明的冲突检测机制没有 检测到这些冲突,这是由于NCD值太低,这意味着在由客户端1、2和3发送的LDAP修改请 求消息中没有足够的添加操作。该特定信号序列图示出了需要选择参数NCD的正确值,使得冲突检测机制可以检 测到所有可能的冲突。在本示例中,NCD已被设置为“1”,因此,可能已检测到不多于两个同 时存在的访问,并且可能没有避免对数据的不期望的修改。因此,为了帮助确保适当地实现 冲突检测机制,应当遵循以下两个推荐⑴“NCD”值应当被选择为大于或等于“同时存在 的客户端”(即,在相同时间间隔访问相同条目的LDAP客户端)的最大数目,该“同时存在 的客户端”可以在LDAP客户端中的任一个检索到数据(利用始终包括CDC属性类型在内的 LDAP搜索操作而检索)之后的时间间隔内以及在特定LDAP客户端发送要执行的更新(利 用LDAP修改操作而请求)的时刻修改该条目;以及(2)选择“M”值其中,“M”应当被选择 为比NCD值大得多。总之,与本发明第一实施例相关联的冲突检测机制部分地依赖于与在前述RFC 4511中描述的LDAP修改操作相关联的标准行为。首先,在标准行为中,必须执行LDAP修 改请求内的整个修改列表,以使这些修改被列出为单一原子操作(见RFC 4511中的4.6节 “修改操作”)。由此,本发明的冲突检测机制具有LDAP修改请求,其中,始终呈现“添加”操 作,使得在“替换”操作之前执行这些“添加”操作(见图5中的步骤3a、5a和6a)。
其次,将所列出的值添加至修改属性的是标准行为,这导致了在必要时创建属性。由此,在冲突检测机制中,当对多值属性执行“添加”时,将新的所请求的 值添加至现有列表。如果该值已存在,则经由标准行为来返回每一个的结果代码 20 ( "AttributeOrValueExists") 0因此,冲突检测机制在建立添加操作时利用标准行为, 使得如果已存在要“添加”的值,则拒绝所请求的修改。仅当某其它客户端已将CDC更新为 新值时,才发生该拒绝(见图5中的步骤6a)。再次,在标准行为中,替换操作将导致利用所列出的新值来替换修改属性的所有 现有值以及在尚未存在该属性的情况下创建该属性。如果存在该属性,则不具有值的替换 将删除整个属性,而如果不存在该属性,则忽略不具有值的替换。在冲突检测机制中,客户 端使用LDAP修改消息中的“替换”操作来将CDC属性更新为下一值。然后,当在假定利用 “添加”操作没有检测到冲突的情况下,想要修改数据下一个客户端有责任将CDC更新为下 一值时,另一客户端可以检测到该修改,作为潜在冲突。可见,由于标准行为对在应用LDAP修改请求中的该修改列表时的原子性的需求, 使得客户端402、404和408可以期望如果接收到的修改响应指示任何类型的差错,则将不 执行LDAP目录412中的DIT的修改,而如果该修改响应指示成功完成修改操作,则所有请 求的操作已执行。在以上示例和解释中,考虑了对于为了检测冲突而准备的每个条目(在LDAP目录 412中),有一个CDC属性。然而,可能发生的是,相同条目可能具有多个CDC属性,以允许 冲突检测机制中有更多粒度,从而可能针对条目内的属性组而检测冲突。这将改进冲突检 测机制,这是由于只要不是访问属于相同组的相同条目内的数据(即,相同CDC),就允许更 有效的同时访问。参照图7,图7是一幅信号序列图,用于帮助解释根据本发明第二实施例的、 可用于检测冲突的另一冲突检测机制。该冲突检测机制利用了 LDAP中的所谓事务性 (transactionality),其中,LDAP事务被理解为与具有一个或多个操作的组相关联,在该操 作组中指定了该操作组的开始和结尾。另外,当将LDAP事务发送至LDAP目录412时,在 LDAP目录412执行在这种事务中包括的所有操作或者不执行任何操作的情况下,存在对原 子性的保证。在这种意义上,从LDAP客户端402、404、408和410的角度可以看出,被包括 进一个LDAP事务中的所有操作好像可以被视为单一操作。本发明的冲突检测机制的第二 实施例利用LDAP事务性来帮助检测和避免冲突。如何完成这一点将在以下步骤中描述la.客户端1通过将启动事务请求(StartTransactionRequest)发送至LDAP目录 412来启动LDAP中的事务。该启动事务请求可以是新的LDAP消息,其可以为空,其功能是 请求LDAP目录412产生事务标识符。lb.客户端1接收对其先前的、针对启动LDAP中的事务的请求的响应(启动事务 响应(StartTransactionResponse))。该响应可以是至少包括事务标识符(TransIdl)在内 的新LDAP消息。该标识符将被包括在LDAP客户端1需要将其作为在本申请中可被视为单 一操作的相同事务的一部分(即,被视为消息组的一部分)进行处理的任何LDAP消息中。2a.客户端1发送从LDAP目录412读取一些数据702的请求(LDAP搜索请求 (LDAPSearchRequest) )0该LDAP SEARCH消息包括刚刚产生的事务标识符,这意味着该消 息应当是事务的一部分(即,消息组的一部分)。该LDAP SEARCH消息可以请求读取任何量的数据702,并且任何标准LDAP SEARCH可以适用。此时,LDAP目录412在以下意义上实现在必要时能够阻止“所读取的”数据(或该 “所读取的”数据的一部分)的内部机制如果以下操作是针对相同事务(即,包括相同事 务IcKTransactionld))的,则将对在该时刻读取的数据执行这些操作。然而,不具有该事 务的(即,不包括相同事务Id的)任何其它消息将不能够访问这个“被阻止的”数据。在 图7中将这个“被阻止的”数据示为由粗体框所包围,该粗体框指示在由客户端1启动的 该特定事务完成之前,不能修改/访问该数据。2b.客户端1从LDAP目录412接收包括所请求的数据702在内的读取响应(LDAP 搜索结果条目/搜索完成(LDAPSearchResultEntry/SearchDone))。此时,客户端1可以花 一些时间,出于以下任何目的,执行任何内部逻辑例如,对所读取的数据执行一些一致性 检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在这种情况下,客 户端1已更新数据702’。3a.客户端发送从LDAP目录412中的相同条目读取相同数据702的至少一部分的 请求(LDAP搜索请求(LDAPSearchRequest))。该读取请求可以是与由客户端1使用的先前 事物不同的事务(未示出这种类型的请求);或者该读取请求可以是与独立的消息(如图 所示),不管使用哪个请求,相同的行为依然适用。3b.客户端2接收包括所请求的数据702在内的读取响应(LDAP搜索结果条目/ 搜索完成(LDAPSearchResultEntry/SearchDone))。这是可能的,这是由于读取请求消息 不是更新消息。在本示例中,假定读取了相同的(或部分)“被阻止的”数据702。此后, 客户端2执行任何所需的处理和逻辑,该执行操作使用或不使用针对这种目的而读取的数 据。在这种情况下,客户端2已更新数据702”。4a.客户端2发送用于请求对被客户端1的事务“阻止”的数据进行修改的更新请 求。LDAP目录412识别出该数据已被“阻止”成为先前事务的一部分,这意味着将不会允许 该特定修改。4b.客户端2接收指示修改请求已被拒绝的差错消息(LDAP修改响应 (LDAPModifyResponse)[不成功])。在本示例中,客户端2的修改请求是利用差错消息而 拒绝的。然而,在不允许修改时的特定行为可以改变,另一种选择可以是对请求进行排队, 直到先前启动的事务结束为止。此外,该方案的主要目的是不允许客户端2超越由客户端 1读取且作为正在进行的事务的一部分的任何数据702。5a.客户端1发送用于请求将数据702修改为正在进行的事务的一部分的更新请 求(LDAP修改请求(LDAP ModifyRequest))。在本示例中,假定客户端1发送将“被阻止 的”数据702的多个属性之一修改为正在进行的事务的一部分的请求,即,用于修改的消息 包括对应的事务IcKTransIdl)和修改后的数据702’。LDAP目录412识别出该请求处于正 在进行的事务内,由此,在先前被“阻止”成为相同事务的一部分的数据702上允许该修改。5b.客户端1从LDA目录412接收修改成功消息(LDA修改响应 (LDAModifyResponse)[结果成功])。由于该修改被视为相同事务的一部分,因此,在步骤 5a成功处理了该修改。6a.客户端1将关闭正在进行的事务的请求发送至LDAP目录412。该请求可以是 包括要关闭的对应LDAP事务的事务Id在内的新LDAP消息。
6b.客户端1接收指示LDAP目录412成功关闭了 LDAP事务的消息(停止事务请 求(StopTransactionRequest) (TransIdl))。该消息可以是确认成功执行关闭事务请求的 新LDAP消息。实际上,该步骤可能是可选的,这是由于在客户端侧可能不需要该确认。可见,在该过程中,实现了冲突检测机制,其防止客户端2超越客户端1不想在该 特定时间修改的一些数据。在该方案中,在步骤la、lb、6a和6b已呈现了新LDAP消息, 也呈现了包括事务Id在内的新控制字段。另外,该冲突检测机制使用具有如以上在步骤 2a和2b讨论的事务Id的新LDAP搜索消息。对于与该特定机制所使用的LDAP事务性 有关的更多细节,参考 K. Zeilenga 的标题为"RFC 4528 =LightweightDirectory Access Protocol(LDAP)Assertion Control”、日期注明为2006年6月的论文(该文献的内容以引 证的方式并入于此)
参照图8,图8是一幅信号序列图,用于帮助解释根据本发明第三实施例的、可用 于检测冲突的另一冲突检测机制。该冲突检测机制利用LDAP事务性和上述CDC参数(在 条目中的每一个中定义),来验证在事务中包括的一个或多个条目的修改,如下Ia和2a.客户端1发送针对从LDAP目录412中的条目1和2读取一些数据802 和804以及CDC信息的两个请求(LDAP搜索请求(LDAPSearchRequests))。这些标准LDAP SEARCH消息中的每一个可以请求从条目1和2读取任何量的数据以及⑶C值。Ib和2b.客户端1从LDAP目录412接收包括条目1和2中的所请求的 数据802和804及其对应CDC值在内的消息(两个LDAP搜索结果条目/搜索完成 (LDAPSearchResultEntry/SearchDone))。此时,客户端1花一些时间,出于以下任何目的, 执行任何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所 读取的内容来请求更多的一些数据……。在这种情况下,客户端1已更新数据802’和804’。3a客户端2发送从LDAP目录412中的条目2读取一些数据804的请求(LDAP搜 索请求)。该请求可以是与由客户端1使用的先前事物不同的事务(未示出这种类型的请 求);或者该请求可以是与独立的消息(如图所示),不管使用哪个请求,相同的行为依然适 用。在本示例中,假定读取相同的(或部分)“被阻止的”数据804。3b.客户端2从LDAP目录412接收包括条目2中的所请求的数据以及对应⑶C值 在内的消息(LDAP搜索结果条目/搜索完成)。然后,客户端2执行任何所需的处理和逻 辑,该执行操作使用或不使用针对这种目的而读取的数据。在这种情况下,客户端2已更新 数据804”。4a.客户端2发送请求对LDAP目录412的条目2中的数据进行修改的消息(LDAP 修改请求)。条目2中的若干属性被请求修改,包括对条目2的CDC值的修改。CDC值修改 是使用以上关于本发明第一实施例而描述的相同过程来完成的。在这种情况下没有开启事 务,这是由于仅一个条目受到影响。4b.客户端2从LDAP目录412接收指示修改请求已被接受的消息(LDAP修改响应 [结果成功])。接受了在步骤4a请求的修改,并且将修改后的数据804”存储在条目2中, 并更新了条目2的⑶C值。5a.客户端1发送用于请求启动与LDAP目录412的事务的消息(启动事务请求)。 该消息还请求LDAP目录412产生事务标识符。5b.响应于启动LDAP目录412中的事务的请求客户端1接收消息(启动事务响应[Transldl])。具体地,LDAP目录412返回事务标识符(TransIdl)。6a.客户端1发送用于请求对LDAP目录412的条目1中的数据进行修改的消息 (LDAP修改请求(Transldl))。条目1中的若干属性被请求修改,包括对条目1的⑶C值的 修改。CDC值修改是使用以上关于本发明第一实施例而描述的相同过程来完成的。6b. LDAP目录412接受客户端1的修改请求,这是由于尚未针对对应条目1而改变 CDC值。但是,该修改操作保持即将在接受了完成事务时执行。7a.客户端1发送用于请求LDAP目录412的条目2中的数据进行修改的消息 (LDAP修改请求(Transldl))。条目2中的若干属性被请求修改,包括对条目2的⑶C值的 修改。CDC值修改是使用以上关于本发明第一实施例而描述的相同过程来完成的。7b.客户端1接收指示条目2的修改请求已被LDAP目录412拒绝的消息(LDAP修 改响应[结果不成功])。LDAP目录412拒绝了该修改,这是由于在本示例中,条目2的CDC 值被由客户端2在步骤4a期间执行的过程所修改。8a.客户端1发送针对由于不能执行正在进行的事务的一部分而“异常中止”正在 进行的事务的消息(停止事务请求[异常中止,Transldl])。该消息可以是包括要关闭的对应事务的事务Id在内的新LDAP消息。8b.客户端1从LDAP目录412接收指示事务已被成功关闭的消息(停止事务响应 [Transldl])。该消息可以是用于确认成功执行关闭事务请求的新LDAP消息。备选地,该 消息可能是可选的消息,这是由于在客户端侧可能不需要确认。参照图9,图9是一幅信号序列图,用于帮助解释根据本发明第四实施例的、可用 于检测冲突的另一冲突检测机制。该冲突检测机制利用了 LDAP断言,该LDAP断言允许客户 端(特别是LDAPv3客户端)指定针对要由LDAP目录412执行的操作必须为真的条件,否 则将整体拒绝所请求的操作。LDAP断言已在上述RFC 4528中定义,并且可以在以下文献中 找到与 LDAPv3 客户端有关的细节K. Zeilenga"RFC4510 =Lightweight Directory Access Protocol (LDAP) =TechnicalSpecification Road Map,,,June 2006 (其内容以引证的方式 并入与此)。具体地,LDAP断言用于检验与执行修改时相同的操作中的条件,并且这导致了操 作原子性,这是由于条件验证和数据修改都是在没有任何其它操作中断的情况下执行的。 为了实现这一点,RFC 4528定义了新的LDAP控制(“断言控制”),并且文献K. ZeilengfRFC 4521 -Considerations for Lightweight Directory Access Protoco1(LDAP) Extensions”June 2006讨论了基于这种控制的机制可以如何扩展至LDAPv3操作(该文献 的内容以引证的方式并入于此)。例如,该控制可以附着至任何LDAPv3更新操作(即,添 力口、删除、修改和修改DN),以支持对目标对象的有条件的添加、删除、修改和重命名。还将所 断言的条件作为所涉及的LDAPv3操作的组成部分进行估计。RFC 4528还指定了 DIT中的 目标条目(即,必须将断言检验应用于的(当接收到时))始终是DIT中的单一条目,其为 LDAP请求中的条目或对象字段(作为一般简化)。冲突检测机制的该具体实施例使用LDAP断言,还针对需要冲突检测的每个条目 定义和添加了新的单值整数属性类型“序列号”。可以将该新的单值整数属性类型“序列号” 作为循环计数器进行管理。该新的单值整数属性还可以被声明为所期望的“结构”对象类 (即,用于目录条目的对象类)中的“强制”属性,或者该新的单值整数属性可以在新的“辅助”对象类中定义。为了实现该冲突检测机制并解决修改问题,每个LDAP客户端402、404 408和410将执行以下步骤1.读取一个或多个条目,包括针对冲突检测而准备的至少一个条目(即,其包括 “序列号(SeqNumber),,属性类型)。2.使用检索到的数据来应用商业逻辑。3.请求在针对冲突检测而定义的每个条目中更新数据。该请求可能包括以下 LDAP修改请求操作3. 1 “断言条件”,检验“序列号”属性类型仍具有在步骤1读取的值。3. 2 “替换”操作,增大以“序列号”属性类型存储的冲突检测值。注意在执行任何所请求的修改(添加/删除/替换)之前检验断言。如果断言 检验失败,则丢弃整个LDAP修改请求操作。图9中的信号流图示出了使用本发明的该具体冲突检测机制的示例情况la.客户端1发送用于请求从一个或多个条目读取数据902的消息(LDAP搜索请 求),该一个或多个条目包括针对冲突检测而准备的至少一个条目1。该消息还具有针对读 取LDAP目录412的至少一个条目1内的“序列号”属性类型的请求。lb.客户端1从LDAP目录412接收所请求的数据902和“序列号”属性的值。这 可以通过包括所请求的信息以及序列号在内的LDAP搜索结果条目并通过指示搜索已成功 的LDAP搜索结果完成消息来完成。此时,客户端1花一些时间,出于以下任何目的,执行任 何内部逻辑例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的 内容来请求更多的一些数据……。在这种情况下,客户端1已更新数据902’。2a.客户端2发送用于请求从一个或多个条目读取数据902的消息(LDAP搜索请 求),该一个或多个条目包括针对冲突检测而准备的至少一个条目1。该消息还具有针对读 取LDAP目录412的至少一个条目1内的“序列号”属性类型的请求。在本示例中,客户端 1和客户端2有兴趣将数据修改为相同条目(其不需要是相同属性,而仅需要是相同条目, 艮口,属性中的任一个针对该特定条目的对象类中的任一个)。2b.客户端2从LDAP目录412 接收所请求的数据902和“序列号”属性的值。这可以通过包括所请求的信息以及序列号在 内的LDAP搜索结果条目消息并通过指示搜索已成功的LDAP搜索结果完成消息来完成。此 时,客户端2花一些时间,出于以下任何目的,执行任何内部逻辑例如,对所读取的数据执 行一些一致性检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在 这种情况下,客户端2已更新数据902”。3a.客户端2将用于请求对冲突检测准备完成条目中的数据进行更新的消息 (LDAP修改请求)发送至LDAP目录412,其中,原始读取的序列号是“η”。具体地,客户端2 读取包括以下各项在内的LDAP修改请求⑴断言操作断言序列号=η,临界性真;(2) 修改后的数据902”;以及(3)替换操作替换序列号η+1 (注意在可以执行步骤2和3之 前,步骤1必须为真)。基本上,客户端2发送包括对序列号属性的更新(以1增大其值) 在内的LDAP修改请求,同时,LDAP修改请求包括用于检验序列号的“断言”,以确保其是刚 刚在步骤2b读取的相同序列号。仅当断言的估计为真时,才执行LDAP修改操作。并且,仅 当任何其它客户端未增大序列号时这才发生,而如果增大了序列号,则将展示出的是,从在 步骤2b读取了该序列号起,另一客户端已修改了数据。
3b.客户端从LDAP目录412接收指示修改请求已成功的LDAP修改响应 。4a.客户端1将用于请求对冲突检测准备完成条目中的数据进行更新的消息 (LDAP修改请求)发送至LDAP目录412,其中,原始读取的序列号是“η”。具体地,客户端1 发送包括以下各项在内的LDAP修改请求(1)断言操作断言序列号=η,临界性真;(2) 修改后的数据902’;以及(3)替换操作替换序列号η+1(注意在可以执行步骤2和3之 前,步骤1必须为真)。在这种情况下,LDAP目录412确定了断言被估计为假,这是由于序 列号属性不具有该客户端在步骤Ib期间原始读取的相同值。这意味着冲突已被避免。4b.客户端1从LDAP目录412接收指示修改请求未成功的LDAP修改响应。因此, 客户端1知道另一客户端在其处理所读取的数据期间修改了数据。从上述应当认识到,已讨论了四种不同的冲突检测机制,允许第一 LDAP客户端执 行LDAP搜索、处理LDAP响应、然后将修改(LDAP修改)发送至LDAP目录412,同时使该第 一 LDAP客户端确信在另一 LDAP客户端先前已对第一 LDAP客户端原始读取的数据执行修 改的情况下,将不会执行所请求的修改。这是期望的,这是由于以这种方式不会造成数据不 一致。本发明具有若干优点,其中的一些列出如下1.对另一客户端对先前读取的一些数据所作的更新的检测避免了造成数据不一 致。即,如果客户端需要一些数据验证以执行更新,如果修改了数据,则这些更新可能在最 终更新该数据的情况下造成问题。换言之,可以使客户端确信依赖于特定值(置于DIT的 任何部分中)的修改被一致地执行(即,没有修改相关数据)。2.可以检测任何数目的同时存在的LDAP客户端。3.在无需具有不期望的“死锁”副作用的任何锁定/解锁机制的情况下,检测(并 避免)冲突。4.基于扩展/定义新LDAP消息的冲突检测机制(如基于断言的冲突检测机制的 情况)在LDAP客户端侧对在系统中使用的最终LDAP目录技术有较高依赖。5.本发明的冲突检测机制还对X. 500目录系统有效,这是由于该冲突检测机制提 供了使得能够与标准LDAP客户端进行通信的LDAP接入网关。7.碰转检测机制不限于在通信领域中使用,而是还可以应用于涉及使用LDAP客 户端和LDAP目录的任何领域内的任何应用。8.⑶C冲突检测机制具有以下优点ο标准LDAP客户端能够检测是否发生冲突(S卩,由该客户端读取的数据可能已被 另一客户端更新)。O本发明的CDC机制部分地依赖于现今被任何商用LDAP服务器实施方式所支持 的标准LDAP。该标准LDAP在LDAP目录或LDAP客户端处不需要任何所扩展的LDAP支持。ο本发明的CDC机制实现了互斥的(mutex)机制,其中,公共资源是数据(要读取 和修改的),临界部分是从数据被LDAP客户端读取的时刻和相同LDAP客户端需要数据修改 起的时间。9. LDAP断言冲突检测机制具有以下优点ο标准LDAP客户端能够检测是否发生冲突(S卩,由该客户端读取的数据可能已被 另一客户端更新)。O本发明的LDAP断言机制部分地依赖于标准LDAP。该标准LDAP在LDAP服务器或LDAP客户端处不需要任何所扩展的LDAP支持。对于与LDAP技术的基础有关的更详细讨论,参考以下文献1. K. Zeilenga "RFC 4510 lightweight Directory Access Protocol(LDAP) Technical Specification Road Map,,,June 2006。2. J. Sermersheim "RFC 4511 Lightweight Directory AccessProtocol (LDAP) The Protocol,,,June 2006。3. K. Zeilenga "RFC 4521 !Considerations for Lightweight DirectoryAccess Protocol (LDAP)Extensions,,,June 2006。4. K. Zeilenga "RFC 4528 lightweight Directory Access Protocol (LDAP) Assertion Control,,,June 2006。5. OpenLDAP Software Mailing List :Message00529 (定义 / 使用“锁定,,属性类 型)(从 http//www. openldap. org/1ists/openldap-software/200301/msg00529. html下 载)。6. K. Zeilenga "LDAP Transactions", November 18, 2007 ( /A http://www. ietf. org/internet-drafts/draft-zeilenga-ldap-txn-11. txt 下载)。这些文献的内容以引证的方式并入于此。总之,用于读取和更新目录中数据的多个客户端402、404、406、408和410可访问 的目录412还被布置为通过实现图5和8-9所示的方案以及使用以下组件(见图4)来检 测和避免所述目录中的条目上的更新操作冲突输入读取装置418,用于从客户端接收读 取所述目录中的条目上的数据的请求;处理装置420,用于分配与所述目录中的所述条目 上的所述数据的至少一个子集相对应的至少一个给定的冲突检测值;输出读取装置422, 用于向所述客户端提交所请求的数据以及所述至少一个给定的冲突检测值;输入更新装置 424,用于从所述客户端接收修改所述目录中的所述条目上的所述数据的所述至少一个子 集的请求,其中,该请求包括针对至少一个给定的冲突检测值中的每一个的至少一个更新 后的冲突检测值;冲突检测器426,用于确定所述至少一个更新后的冲突检测值是否与对 应的当前冲突检测值一致;输出更新装置428,用于在所述至少一个更新后的冲突检测值 与对应的当前冲突检测值一致的情况下,接受和执行修改所述目录中的所述条目上的所述 数据的所述至少一个子集的请求,否则,拒绝或驳回该请求;以及处理装置420,用于在发 现该请求可接受的情况下,将当前冲突检测值设置为下一个值。另外,客户端前端408 (例如)可以访问目录412,以根据图5和8_9所示的方案, 使用以下组件(见图4),读取和更新目录中的数据输出读取装置430,用于提交读取所述 目录中的条目上的数据的请求;输入读取装置432,用于检索所请求的数据,以及与所述目 录中的所述条目上的所述数据的至少一个子集相对应的至少一个给定的冲突检测值;处理 器434,用于处理检索到的数据;输出更新装置436,用于发送修改所述目录中的所述条目 上的所述数据的所述至少一个子集的请求,其中,该请求包括针对至少一个给定的冲突检 测值中的每一个的至少一个更新后的冲突检测值;以及输入更新装置438,用于在在所述 目录处所述至少一个更新后的冲 突检测值与对应的当前冲突检测值一致的情况下,接收对 修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的接受,否则,接收 对该请求的拒绝。
尽管本发明的若干实施例已在附图中示出并在以上具体实施方式
中描述,但应当理解,本发明不限于所公开的实施例,而是在不脱离如权利要求阐述和限定的本发明精神 的情况下还能够进行多种重新布置、修改和替换。
权利要求
一种用于在来自多于一个客户端前端(HSS-FF、HLR-FF)的更新操作时检测并避免目录中的条目上的冲突的方法,所述方法包括以下步骤在所述目录处,从客户端前端接收读取所述目录中的条目上的数据的请求;在所述目录处,分配与所述目录中的所述条目上的所述数据的至少一个子集相对应的至少一个给定的冲突检测值;向所述客户端前端提交所请求的数据以及所述至少一个给定的冲突检测值;在所述目录处,从所述客户端前端接收修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求,其中,针对至少一个给定的冲突检测值中的每一个,所述请求包括至少一个更新后的冲突检测值;在所述目录处,确定所述至少一个更新后的冲突检测值是否与对应的当前冲突检测值一致;如果所述至少一个更新后的冲突检测值与对应的当前冲突检测值一致,则向所述客户端前端提交对修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的接受,否则,向所述客户端前端提交对所述请求的拒绝;以及在发现所述请求可接受的情况下,将当前冲突检测值设置为下一个值。
2.根据权利要求1所述的方法,其中,所述客户端前端在发送修改数据的请求之前,发 起与所述目录的事务。
3.根据权利要求1所述的方法,其中,在所述目录处从所述客户端前端接收到的修改 所述数据的所述至少一个子集的请求包括断言条件,并且,所述目录确保在修改所述目录 中的所述数据之前所述断言条件为真。
4.根据权利要求1所述的方法,其中,所述至少一个给定的冲突检测值是给定的冲突 检测计数器属性CDC,所述CDC具有所述目录中的所述条目上的值(x);并且,具有至少一个 更新后的冲突检测值的请求包括⑴一个或多个添加操作,如下,添加:CDC = (x)+l ;添加:CDC = (x) +2……添加:CDC =(x) +要检测的冲突的数目NCD,其中,NCD的值等于或大于可能从所述目录中的所述条目 读取并修改数据的同时存在的客户端的数目;(ii)修改后的数据;以及(iii)替换操作,如下替换CDC= (x)+l ;以及如果修改数据的请求具有尝试对当前CDC属性进行操作的添加操作,则所述目录拒绝 所述请求,其中,所述当前CDC属性在所述条目内具有与给定CDC属性值(x)不同的值。
5.根据权利要求4所述的方法,其中,CDC属性是所期望的结构对象类或新的辅助对象 类中的强制属性。
6.根据权利要求4所述的方法,其中,CDC属性是循环计数器。
7.根据权利要求1所述的方法,其中,所述至少一个给定的冲突检测值是给定的序列 号属性,所述序列号属性具有所述目录中的所述条目上的值(x);并且,具有至少一个更新 后的冲突检测值的请求包括(i)断言条件;(ii)修改后的数据;以及(iii)替换操作,如下替换序列号=(x)+l;以及所述目录确定所述条目中的当前序列号是否具有与给定序列号的值相同的值,如果具 有,则修改数据并执行 替换操作,如果不具有,则丢弃修改数据的请求。
8.一种目录,能够被多个客户端所访问以读取和更新所述目录中的数据,并被布置为 检测并避免所述目录中的条目上的更新操作冲突,所述目录包括输入读取装置,从客户端接收读取所述目录中的条目上的数据的请求; 处理装置,分配与所述目录中的所述条目上的所述数据的至少一个子集相对应的至少 一个给定的冲突检测值;输出读取装置,向所述客户端提交所请求的数据以及所述至少一个给定的冲突检测值;输入更新装置,从所述客户端接收修改所述目录中的所述条目上的所述数据的所述至 少一个子集的请求,其中,针对至少一个给定的冲突检测值中的每一个,所述请求包括至少 一个更新后的冲突检测值;冲突检测器,确定所述至少一个更新后的冲突检测值是否与对应的当前冲突检测值一致;输出更新装置,在所述至少一个更新后的冲突检测值与对应的当前冲突检测值一致 的情况下,接受和执行修改所述目录中的所述条目上的所述数据的所述至少一个子集的请 求,否则,拒绝或驳回所述请求;以及所述处理装置在发现所述请求可接受的情况下,将当前冲突检测值设置为下一个值。
9.根据权利要求8所述的目录,其中,所述输入读取装置适于从客户端前端接收在发 送修改数据的请求之前启动事务的请求。
10.根据权利要求8所述的目录,其中,用于从所述客户端接收修改所述数据的所述至 少一个子集的请求的输入更新装置适于接收断言条件,并且,所述目录的所述处理装置适 于确保在修改所述条目中的数据之前所述断言条件为真。
11.根据权利要求8所述的目录,其中,所述至少一个给定的冲突检测值是给定的冲突 检测计数器属性CDC,所述CDC具有所述目录中的所述条目上的值(x);并且,具有至少一个 更新后的冲突检测值的请求包括⑴一个或多个添加操作,如下,添加:CDC = (x)+l ;添加:CDC = (x) +2……添加:CDC =(x) +要检测的冲突的数目NCD,其中,NCD的值等于或大于可能从所述目录中的所述条目 读取并修改数据的同时存在的客户端的数目;(ii)修改后的数据;以及(iii)替换操作,如下替换CDC= (x)+l ;以及所述目录的所述输出更新装置适于在修改数据的请求具有尝试对当前CDC属性进行 操作的添加操作的情况下拒绝所述请求,其中,所述当前CDC属性在所述条目内具有与给 定CDC属性值(x)不同的值。
12.根据权利要求11所述的目录,其中,CDC属性是所期望的结构对象类或新的辅助对 象类中的强制属性。
13.根据权利要求11所述的目录,其中,CDC属性是循环计数器。
14.根据权利要求8所述的目录,其中,所述至少一个给定的冲突检测值是给定的序列 号属性,所述序列号属性具有所述目录中的所述条目上的值(x);并且,具有至少一个更新后的冲突检测值的请求包括(i)断言条件; (ii)修改后的数据;以及 (iii)替换操作,如下替换序列号=(x)+l;以及所述目录的所述冲突检测器确定所述条目中的当前序列号是否具有与给定序列号的 值相同的值,如果具有,则所述处理装置适于修改数据并适于执行替换操作,如果不具有, 则所述目录的所述输出更新装置适于拒绝修改数据的请求。
15.一种客户端前端(HSS-FF、HLR-FF),访问目录以读取和更新所述目录中的数据,并 包括输出读取装置,用于提交读取所述目录中的条目上的数据的请求; 输入读取装置,用于接收所请求的数据,以及与所述目录中的所述条目上的所述数据 的至少一个子集相对应的至少一个给定的冲突检测值; 处理器,用于处理接收到的数据;输出更新装置,用于发送修改所述目录中的所述条目上的所述数据的所述至少一个子 集的请求,其中,针对至少一个给定的冲突检测值中的每一个,所述请求包括至少一个更新 后的冲突检测值;以及输入更新装置,用于在所述目录处所述至少一个更新后的冲突检测值与对应的当前冲 突检测值一致的情况下,接收对修改所述目录中的所述条目上的所述数据的所述至少一个 子集的请求的接受,否则,接收对所述请求的拒绝。
16.根据权利要求15所述的客户端前端,其中,所述输出读取装置还适于向所述目录 提交在发送修改数据的请求之前启动事务的请求。
17.根据权利要求15所述的客户端前端,其中,所述输出更新装置还适于将断言条件 与所述请求一起向所述目录提交。
18.根据权利要求15所述的客户端前端,其中,所述至少一个给定的冲突检测值是给 定的冲突检测计数器属性CDC,所述CDC具有所述目录中的所述条目上的值(χ);并且,具有 至少一个更新后的冲突检测值的请求包括⑴一个或多个添加操作,如下,添加=CDC = (χ)+1 ;添加=CDC = (χ)+2……添加=CDC =(χ) +要检测的冲突的数目NCD,其中,NCD的值等于或大于可能从所述目录中的所述条目 读取并修改数据的同时存在的客户端的数目; ( )修改后的数据;以及 (iii)替换操作,如下替换CDC = (x)+l。
19.根据权利要求18所述的客户端前端,其中,CDC属性是所期望的结构对象类或新的 辅助对象类中的强制属性。
20.根据权利要求18所述的客户端前端,其中,CDC属性是循环计数器。
21.根据权利要求18所述的客户端前端,其中,所述至少一个给定的冲突检测值是给 定的序列号属性,所述序列号属性具有所述目录中的所述条目上的值U);并且,具有至少 一个更新后的冲突检测值的请求包括(i)断言条件;( )修改后的数据;以及(iii)替换操作,如下替换序列号=(χ)+ι。
22.一种用于在来自客户端前端(HSS-FF、HLR-FF)的更新操作时检测并避免目录中的 条目上的冲突的方法,所述方法包括以下步骤从客户端前端提交读取所述目录中的条目上的数据的请求;在所述客户端前端处,接收所请求的数据,以及与所述数据的至少一个子集相对应的 至少一个给定的冲突检测值;在所述客户端前端处,处理检索到的数据;从所述客户端前端发送修改所述目录中的所述条目上的所述数据的所述至少一个子 集的请求,其中,针对至少一个给定的冲突检测值中的每一个,所述请求包括至少一个更新 后的冲突检测值;以及如果在所述目录处所述至少一个更新后的冲突检测值与对应的当前冲突检测值一致, 则在所述客户端前端处,接收对修改所述目录中的所述条目上的所述数据的所述至少一个 子集的请求的接受,否则,接收对所述请求的拒绝。
23.根据权利要求22所述的方法,其中,所述至少一个给定的冲突检测值是给定的冲 突检测计数器属性CDC,所述CDC具有所述目录中的所述条目上的值(χ);并且,具有至少一 个更新后的冲突检测值的请求包括⑴一个或多个添加操作,如下,添加=CDC = (χ)+1 ;添加=CDC = (χ)+2……添加=CDC =(x) +要检测的冲突的数目NCD,其中,NCD的值等于或大于可能从所述目录中的所述条目 读取并修改数据的同时存在的客户端的数目; ( )修改后的数据;以及 (iii)替换操作,如下替换CDC = (x)+l。
24.根据权利要求22所述的方法,其中,所述至少一个给定的冲突检测值是给定的序 列号属性,所述序列号属性具有来自所述目录中的所述条目的值(χ);并且,具有至少一个 更新后的冲突检测值的请求包括(i)断言条件;( )修改后的数据;以及(iii)替换操作,如下替换序列号=00+1。
25.一种允许客户端前端检测并避免目录中的条目上的更新操作冲突的方法,所述方 法包括以下步骤向目录发送启动事务的请求; 从所述目录接收包括事务标识符在内的响应;发送读取所述目录中的所述条目中的数据的请求,其中,所述请求还包括所述事务标 识符;从所述目录接收包括所读取的数据和所述事务标识符在内的响应,其中,所述目录阻止 所述条目内的数据成为正在进行的事务的一部分,使得其它客户端不能修改所阻止的数据; 处理所读取的数据;发送修改所述目录中的所述条目中的数据的请求,其中,所述请求包括修改的数据和 所述事务标识符,并且所述目录因为所述事务标识符的存在而执行修改数据的请求;以及 向所述目录发送停止所述事务的请求。
全文摘要
本发明描述了一种LDAP冲突检测机制和方法,允许LDAP客户端检测并避免LDAP目录内的条目上的更新操作冲突。所述方法包括以下步骤(a)从目录中的条目读取数据;(b)处理检索到的数据;(c)发送针对修改目录中的条目中的数据的请求,其中,使客户端确信在另一客户端先前已对该客户端原始读取的条目内的数据执行修改的情况下,将不会执行所请求的修改。本发明描述了LDAP冲突检测机制和方法的若干不同实施例。
文档编号G06F17/30GK101849233SQ200880114851
公开日2010年9月29日 申请日期2008年4月10日 优先权日2007年11月6日
发明者安东尼奥·阿拉尔孔阿隆索, 玛丽亚·克鲁斯·巴托洛梅罗德里戈, 胡里奥·维加阿奈斯 申请人:艾利森电话股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1