CN101849233B - 轻量级目录访问协议(ldap)冲突检测机制和方法 - Google Patents
轻量级目录访问协议(ldap)冲突检测机制和方法 Download PDFInfo
- Publication number
- CN101849233B CN101849233B CN2008801148511A CN200880114851A CN101849233B CN 101849233 B CN101849233 B CN 101849233B CN 2008801148511 A CN2008801148511 A CN 2008801148511A CN 200880114851 A CN200880114851 A CN 200880114851A CN 101849233 B CN101849233 B CN 101849233B
- Authority
- CN
- China
- Prior art keywords
- data
- request
- cdc
- collision detection
- client
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 130
- 238000000034 method Methods 0.000 title claims abstract description 44
- 230000007246 mechanism Effects 0.000 title abstract description 54
- 238000012986 modification Methods 0.000 claims abstract description 62
- 230000004048 modification Effects 0.000 claims abstract description 62
- 230000008569 process Effects 0.000 claims description 18
- 230000005540 biological transmission Effects 0.000 claims description 7
- 238000012545 processing Methods 0.000 abstract description 6
- 230000004044 response Effects 0.000 description 30
- 238000004891 communication Methods 0.000 description 10
- 108010076504 Protein Sorting Signals Proteins 0.000 description 9
- 239000004744 fabric Substances 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 235000019580 granularity Nutrition 0.000 description 1
- 239000004615 ingredient Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
Abstract
本发明描述了一种LDAP冲突检测机制和方法,允许LDAP客户端检测并避免LDAP目录内的条目上的更新操作冲突。所述方法包括以下步骤:(a)从目录中的条目读取数据;(b)处理检索到的数据;(c)发送针对修改目录中的条目中的数据的请求,其中,使客户端确信在另一客户端先前已对该客户端原始读取的条目内的数据执行修改的情况下,将不会执行所请求的修改。本发明描述了LDAP冲突检测机制和方法的若干不同实施例。
Description
在先提交美国申请的权益
本申请要求于2007年11月6日提交的、序列号为60/985,710的美国临时专利申请的优先权,其全部以引证的方式并入于此。
技术领域
本发明涉及LDAP冲突检测机制和方法,用于允许LDAP客户端检测和避免LDAP目录内的条目上的更新操作冲突。
背景技术
由此定义了以下缩写,这些缩写中的至少一些在现有技术和本发明的以下描述中提及。
在通信领域中,目前的订户数据库架构正面临着主流IT技术的即将出现的架构的挑战,在该即将出现的架构中,将订户数据保存在与提供特定服务的节点分离的一个或多个数据库中。该方式称作多层架构,图1示出了示意图,该示意图以图解方式示出了在无线电信通信领域中使用的这种类型的架构。
参照图1,示出了通信网络100,通信网络100具有包括HSS FE 102和置备FE 104在内的IMS网络101以及包括HLR/AuC FE 108和AAAFE 110在内的CS/PS核心网106。HSS FE 102、置备FE 104、HLR/AuCFE 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 FE108和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读取然后修改数据相关联的步骤如下:
1a-1b.出于任何目的,从客户端108感兴趣的LDAP目录112中的条目读取一些数据202。这需要客户端108将一个LDAP搜索请求(SearchRequest)操作发送至LDAP目录112(步骤1a)。然后,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。
1b.客户端1从LDAP目录112接收所请求的数据202。这可以通过一个或多个LDAP消息(LDAP搜索结果条目)来完成,该LDAP消息包括指示所有请求的信息已被发送的消息(LDAP搜索结果完成)。此时,客户端1可以花一些时间,出于以下任何目的,执行任何内部逻辑:例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在这种情况下,客户端1已更新数据202’。
2a.客户端2请求从LDAP目录112读取一些数据202。该读取消息可以请求与前述相同的数据、或先前读取的数据的一部分、或LDAP目录112内的任何其它数据。在本示例中,假定客户端2请求了在步骤1b读取的相同数据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没有任何不允许对数据的该具体修改的原因或信息。然而,可能发生的是,基于步骤1b处的数据状态,客户端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 FE 402和增强型置备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之间的冲突。例如,该新CDC属性可以定义为:
(<assigned_OID>
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 InformationModels”、日期注明为2006年6月的RFC 4512(其内容以引证的方式并入于此)。
该新CDC属性可以在所期望的结构对象类(即,用于目录条目的对象类)中称作“强制”属性。在这种情况下,每个目录条目将属于一个结构对象类且仅属于一个结构对象类,并且,当创建了相应的目录条目时,将置备在所选结构对象类中被定义为强制的所有属性。备选地,可以在新的“辅助”对象类中定义新属性。在这种情况下,一个条目将属于一个结构对象类且仅属于一个结构对象类,但其可能还属于零个或更多个辅助对象类。
可以将CDC作为循环计数器进行管理,因此可以经由以下数学表达式(‘%’表示“取模”运算符)来更新每一个CDC:
CDC[n+1]=(CDC[n]+1)%M
其中,“M”是该计数器可达到的最大数目(因此,CDC将遵循序列:0→1→2……→(M-2)→(M-1)→0→1……)。在目录条目创建时,不需要对值CDC进行初始化,但在条目创建时可能需要置备值CDC。
此外,冲突检测机制还基于对指示同时存在的LDAP客户端402、404、408和410的新参数(这里称作NCD“要检测的冲突的数目”)进行定义,同时存在的LDAP客户端402、404、408和410是要在修改LDAP目录412中的数据时防止它们自身之间的冲突时所考虑的。
此外,冲突检测机制基于将一些“额外”修改操作(针对CDC属性值)添加至标准LDAP修改请求操作。该特定修改的关键方面涉及利用标准LDAP行为,其中,在尝试将值“添加”至已存在且具有该相同值的属性的情况下,拒绝LDAP修改消息。以下更详细地讨论这一点。
使用这些定义以及修改后的LDAP修改消息,LDAP客户端402、404、408和410将遵循以下规则:
1.读取已针对冲突检测而准备的、检索到的数据(被存储在LDAP目录412中的条目中)中的当前CDC属性值。实际上,可以从LDAP目录412中的相同条目或任何其它条目读取任何其它数目的CDC属性值。
2.当修改已针对冲突检测而准备的、条目中的任何数据时,要考虑以下两件事:
A.LDAP修改消息可以包括对于以下值、针对CDC属性的“添加”操作:
CDC=(所读取的CDC值+1)%M
CDC=(所读取的CDC值+2)%M
……
CDC=(所读取的CDC值+NCD)%M
注意:在使用循环计数器的情况下,根据CDC属性的类型,可能需要考虑模数M。
B.在“添加”操作之后,LDAP修改消息包括“替换”操作,如下:
CDC=所读取的CDC值+1
并且以下,有示例帮助更好地解释这些规则的用途:
假定对于已针对冲突检测而准备的条目,LDAP客户端402(例如)所读取的CDC值是0,同时,从LDAP目录412读取该数据。此外,假定CDC被实现为循环计数器,M(最大值)是65536。那么,CDC属性可以存储值0至65535,如下:
0->1->2->……->65534->65535->0->1
此外,假定要检测的冲突的数目被设置为4(NCD=4)。这意味着每个LDAP客户端(例如LDAP客户端402)能够“检测”是1个、2个、3个还是甚至4个其它LDAP客户端(例如LDAP客户端404、408和410)已在从最初读取CDC的时刻起的时间内以及在第一LDAP客户端(例如LDAP客户端402)决定需要对条目中的数据作出一些更新的时刻更新了“受保护的”条目。
然后,第一LDAP客户端(例如LDAP客户端402)发送包括以下“添加”操作在内的LDAP修改消息:
CDC=1
CDC=2
CDC=3
CDC=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值。
1b1.-1b2.客户端1从LDAP目录412接收所请求的数据502和CDC值。这可以通过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤1b1)并通过指示搜索已成功的LDAP搜索结果完成(步骤1b2)来完成。在本示例中,客户端1的、所读取的数据的本地拷贝具有CDC=(x)。此时,客户端1可以花一些时间,出于以下任何目的,执行任何内部逻辑:例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在这种情况下,客户端1已更新数据502’。
2a.客户端2发送针对从LDAP目录412中的相同条目读取相同数据的至少一部分的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准LDAP SEARCH来请求数据和CDC值。
2b1.-2b2.客户端2从LDAP目录412接收所请求的数据502和CDC值。这可以通过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤2b1)并通过指示搜索已成功的LDAP搜索结果完成(步骤2b2)来完成。在本示例中,客户端2的、所读取的数据的本地拷贝具有CDC=(x)。此时,客户端2可以花一些时间,出于以下任何目的,执行任何内部逻辑:例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在这种情况下,客户端2已更新数据502”。
3a.客户端2请求对至少一部分也由客户端1读取的所读取数据502进行修改。具体地,客户端2发送包括以下各项在内的LDAP修改请求:(1)基本对象:DN条目;(2)三个添加操作:添加:CDC=(x)+1;CDC=(x)+2;CDC=(x)+3;(3)修改后的数据502”;以及(4)替换操作:替换:CDC=(x)+1。
3b.客户端2从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改已成功执行,这是由于LDAP目录412没有以下CDC属性:该CDC属性具有三个“添加”操作中的任一个中的相同值。具体地,在这三个添加操作之前,LDAP目录412的CDC值为(x),在这些添加操作中,CDC=(x)+1、CDC=(x)+2、CDC=(x)+3。解除(RECALL):标准LDAP行为使得如果尝试将值“添加”至已存在且具有该相同值的属性,则将拒绝LDAP修改消息(在步骤6a详细讨论)。在这一点上,LDAP目录412已将所读取的条目与数据502”和CDC=(x)+1相关联。
4a.客户端3发送针对从LDAP目录412中的相同条目读取相同数据的至少一部分的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准LDAP SEARCH来请求数据和CDC值。
4b1.-4b2.客户端3从LDAP目录412接收所请求的数据502”。这可以通过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤4b1)并通过指示搜索已成功的LDAP搜索结果完成(步骤4b2)来完成。在本示例中,客户端3的、所读取的数据的本地拷贝具有CDC=(x)+1。此时,客户端3可以花一些时间,出于以下任何目的,执行任何内部逻辑:例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在这种情况下,客户端3已更新数据502”’。
5a.客户端3请求对至少一部分也由客户端1和2从相同条目读取的所读取数据进行修改。具体地,客户端3发送包括以下各项在内的LDAP修改请求:(1)基本对象:DN条目;(2)三个添加操作:添加:CDC=(x+1)+1;CDC=(x+1)+2;CDC=(x+1)+3;(3)修改后的数据502”’;以及(4)替换操作:替换:CDC=(x+1)+1。
5b.客户端3从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改已成功执行,这是由于LDAP目录412没有以下CDC属性:该CDC属性具有三个“添加”操作中的相同值。具体地,在这三个添加操作之前,LDAP目录412的CDC值为(x+1),在这些添加操作中,CDC=(x+1)+1、CDC=(x+1)+2、CDC=(x+1)+3。解除(RECALL):标准LDAP行为使得如果尝试将值“添加”至已存在且具有该相同值的属性,则将拒绝LDAP修改消息(在步骤6a详细讨论)。在这一点上,LDAP目录412已将所读取的条目与数据502”’和CDC=(x)+2相关联。
6a.客户端1请求对在步骤1a-1b读取回来的数据502进行修改。具体地,客户端1发送包括以下各项在内的LDAP修改请求:(1)基本对象:DN条目;(2)三个添加操作:添加:CDC=(x)+1;CDC=(x)+2;CDC=(x)+3;(3)修改后的数据502’;以及(4)替换操作:替换:CDC=(x)+1。
6b.客户端1从LDAP目录412接收指示修改请求未成功的LDAP修改响应。修改未成功执行,这是由于LDAP目录412具有以下CDC属性:该CDC属性称为CDC=(x)+2,其是第二个“添加”操作中的相同值。解除(RECALL):标准LDAP行为使得如果尝试将值“添加”至已存在且具有该相同值的属性,则将拒绝LDAP修改消息。这在步骤6a发生,由此,成功检测到冲突。
参照图6,图6是一幅信号序列图,示出了在所选的NCD值低于所需的值从而使得难以根据本发明来适当地检测所有可能的冲突的情况下可能出现的问题。在本示例中,示出了三个同时存在的LDAP客户端402、404和408(客户端1、2和3),但NDC=1,这可能在检测LDAP客户端402、404和408之间的冲突时造成问题。步骤如下:
1a.客户端1发送针对从LDAP条目412中的条目读取一些数据502的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准LDAP SEARCH来请求数据502和CDC值。
1b1.-1b2.客户端1从LDAP目录412接收所请求的数据502和CDC值。这可以通过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤1b1)并通过指示搜索已成功的LDAP搜索结果完成(步骤1b2)来完成。在本示例中,客户端1的、所读取的数据的本地拷贝具有CDC=(x)。此时,客户端1可以花一些时间,出于以下任何目的,执行任何内部逻辑:例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在这种情况下,客户端1已更新数据502’。
2a.客户端2发送针对从LDAP目录412中的相同条目读取相同数据的至少一部分的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准LDAP SEARCH来请求数据和CDC值。
2b1.-2b2.客户端2从LDAP目录412接收所请求的数据502和CDC值。这可以通过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤2b1)并通过指示搜索已成功的LDAP搜索结果完成(步骤2b2)来完成。在本示例中,客户端2的、所读取的数据的本地拷贝具有CDC=(x)。此时,客户端2可以花一些时间,出于以下任何目的,执行任何内部逻辑:例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在这种情况下,客户端2已更新数据502”。
3a.客户端2请求对至少一部分也由客户端1读取的所读取数据502进行修改。具体地,客户端2发送包括以下各项在内的LDAP修改请求:(1)基本对象:DN条目;(2)一个添加操作:添加:CDC=(x)+1;(3)修改后的数据402”;以及(4)替换操作:替换:CDC=(x)+1。
3b.客户端2从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改已成功执行,这是由于LDAP目录412没有以下CDC属性:该CDC属性具有该一个“添加”操作中的相同值。具体地,在该添加操作CDC=(x)+1之前,LDAP目录412的CDC值为(x)。解除(RECALL):标准LDAP行为使得如果尝试将值“添加”至已存在且具有该相同值的属性,则将拒绝LDAP修改消息。在这一点上,LDAP目录412已将所读取的条目与数据402”和CDC=(x)+1相关联。
4a.客户端3发送针对从LDAP目录412中的相同条目读取相同数据的至少一部分的消息。该消息可能是读取包括CDC在内的任何量的数据的请求,并且可以使用任何标准LDAP SEARCH来请求数据和CDC值。
4b1.-4b2.客户端3从LDAP目录412接收所请求的数据502”。这可以通过包括所请求的信息(DN、属性列表、CDC值)在内的LDAP搜索结果条目(步骤4b1)并通过指示搜索已成功的LDAP搜索结果完成(步骤4b2)来完成。在本示例中,客户端3的、所读取的数据的本地拷贝具有CDC=(x)+1。此时,客户端3可以花一些时间,出于以下任何目的,执行任何内部逻辑:例如,对所读取的数据执行一些一致性检验、连接至另一节点以基于所读取的内容来请求更多的一些数据……。在这种情况下,客户端3已更新数据502”’。
5a.客户端3请求对至少一部分也由客户端1和2从相同条目读取的所读取数据进行修改。具体地,客户端3发送包括以下各项在内的LDAP修改请求:(1)基本对象:DN条目;(2)一个添加操作:添加:CDC=(x+1)+1;(3)修改后的数据502”’;以及(4)替换操作:替换:CDC=(x+1)+1。
5b.客户端3从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改已成功执行,这是由于LDAP目录412没有以下CDC属性:该CDC属性具有该一个“添加”操作中的相同值。具体地,在该添加操作CDC=(x+1)+1之前,LDAP目录412的CDC值为(x+1)。解除(RECALL):标准LDAP行为使得如果尝试将值“添加”至已存在且具有该相同值的属性,则将拒绝LDAP修改消息。在这一点上,LDAP目录412已将所读取的条目与数据502”’和CDC=(x)+2相关联。
6a.客户端1请求对在步骤1a-1b读取回来的数据502进行修改。具体地,客户端1发送包括以下各项在内的LDAP修改请求:(1)基本对象:DN条目;(2)一个添加操作:添加:CDC=(x)+1;(3)修改后的数据502’;以及(4)替换操作:替换:CDC=(x)+1。
6b.客户端1从LDAP目录412接收指示修改请求已成功的LDAP修改响应。修改已执行,这是由于LDAP目录412没有以下CDC属性:该CDC属性具有该一个“添加”操作中的相同值。具体地,在该添加操作CDC=(x)+1之前,LDAP目录412的CDC值为(x)+2。这是不期望的,这是由于客户端2和3先前都修改了数据,然而,本发明的冲突检测机制没有检测到这些冲突,这是由于NCD值太低,这意味着在由客户端1、2和3发送的LDAP修改请求消息中没有足够的添加操作。
该特定信号序列图示出了需要选择参数NCD的正确值,使得冲突检测机制可以检测到所有可能的冲突。在本示例中,NCD已被设置为“1”,因此,可能已检测到不多于两个同时存在的访问,并且可能没有避免对数据的不期望的修改。因此,为了帮助确保适当地实现冲突检测机制,应当遵循以下两个推荐:(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”)。因此,冲突检测机制在建立添加操作时利用标准行为,使得如果已存在要“添加”的值,则拒绝所请求的修改。仅当某其它客户端已将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事务性来帮助检测和避免冲突。如何完成这一点将在以下步骤中描述:
1a.客户端1通过将启动事务请求(StartTransactionRequest)发送至LDAP目录412来启动LDAP中的事务。该启动事务请求可以是新的LDAP消息,其可以为空,其功能是请求LDAP目录412产生事务标识符。
1b.客户端1接收对其先前的、针对启动LDAP中的事务的请求的响应(启动事务响应(StartTransactionResponse))。该响应可以是至少包括事务标识符(TransId1)在内的新LDAP消息。该标识符将被包括在LDAP客户端1需要将其作为在本申请中可被视为单一操作的相同事务的一部分(即,被视为消息组的一部分)进行处理的任何LDAP消息中。
2a.客户端1发送从LDAP目录412读取一些数据702的请求(LDAP搜索请求(LDAPSearchRequest))。该LDAP SEARCH消息包括刚刚产生的事务标识符,这意味着该消息应当是事务的一部分(即,消息组的一部分)。该LDAP SEARCH消息可以请求读取任何量的数据702,并且任何标准LDAP SEARCH可以适用。
此时,LDAP目录412在以下意义上实现在必要时能够阻止“所读取的”数据(或该“所读取的”数据的一部分)的内部机制:如果以下操作是针对相同事务(即,包括相同事务Id(TransactionId))的,则将对在该时刻读取的数据执行这些操作。然而,不具有该事务的(即,不包括相同事务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的多个属性之一修改为正在进行的事务的一部分的请求,即,用于修改的消息包括对应的事务Id(TransId1)和修改后的数据702’。LDAP目录412识别出该请求处于正在进行的事务内,由此,在先前被“阻止”成为相同事务的一部分的数据702上允许该修改。
5b.客户端1从LDA目录412接收修改成功消息(LDA修改响应(LDAModifyResponse)[结果成功])。由于该修改被视为相同事务的一部分,因此,在步骤5a成功处理了该修改。
6a.客户端1将关闭正在进行的事务的请求发送至LDAP目录412。该请求可以是包括要关闭的对应LDAP事务的事务Id在内的新LDAP消息。
6b.客户端1接收指示LDAP目录412成功关闭了LDAP事务的消息(停止事务请求(StopTransactionRequest)(TransId1))。该消息可以是确认成功执行关闭事务请求的新LDAP消息。实际上,该步骤可能是可选的,这是由于在客户端侧可能不需要该确认。
可见,在该过程中,实现了冲突检测机制,其防止客户端2覆盖客户端1不想在该特定时间修改的一些数据。在该方案中,在步骤1a、1b、6a和6b已呈现了新LDAP消息,也呈现了包括事务Id在内的新控制字段。另外,该冲突检测机制使用具有如以上在步骤2a和2b讨论的事务Id的新LDAP搜索消息。对于与该特定机制所使用的LDAP事务性有关的更多细节,参考K.Zeilenga的标题为“RFC 4528:Lightweight Directory AccessProtocol(LDAP)Assertion Control”、日期注明为2006年6月的论文(该文献的内容以引证的方式并入于此)
参照图8,图8是一幅信号序列图,用于帮助解释根据本发明第三实施例的、可用于检测冲突的另一冲突检测机制。该冲突检测机制利用LDAP事务性和上述CDC参数(在条目中的每一个中定义),来验证在事务中包括的一个或多个条目的修改,如下:
1a和2a.客户端1发送针对从LDAP目录412中的条目1和2读取一些数据802和804以及CDC信息的两个请求(LDAP搜索请求(LDAPSearchRequests))。这些标准LDAP SEARCH消息中的每一个可以请求从条目1和2读取任何量的数据以及CDC值。
1b和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中的所请求的数据以及对应CDC值在内的消息(LDAP搜索结果条目/搜索完成)。然后,客户端2执行任何所需的处理和逻辑,该执行操作使用或不使用针对这种目的而读取的数据。在这种情况下,客户端2已更新数据804”。
4a.客户端2发送请求对LDAP目录412的条目2中的数据进行修改的消息(LDAP修改请求)。条目2中的若干属性被请求修改,包括对条目2的CDC值的修改。CDC值修改是使用以上关于本发明第一实施例而描述的相同过程来完成的。在这种情况下没有开启事务,这是由于仅一个条目受到影响。
4b.客户端2从LDAP目录412接收指示修改请求已被接受的消息(LDAP修改响应[结果成功])。接受了在步骤4a请求的修改,并且将修改后的数据804”存储在条目2中,并更新了条目2的CDC值。
5a.客户端1发送用于请求启动与LDAP目录412的事务的消息(启动事务请求)。该消息还请求LDAP目录412产生事务标识符。
5b.响应于启动LDAP目录412中的事务的请求,客户端1接收消息(启动事务响应[TransId1])。具体地,LDAP目录412返回事务标识符(TransId1)。
6a.客户端1发送用于请求对LDAP目录412的条目1中的数据进行修改的消息(LDAP修改请求(TransId1))。条目1中的若干属性被请求修改,包括对条目1的CDC值的修改。CDC值修改是使用以上关于本发明第一实施例而描述的相同过程来完成的。
6b.LDAP目录412接受客户端1的修改请求,这是由于尚未针对对应条目1而改变CDC值。但是,该修改操作保持即将在接受了完成事务时执行。
7a.客户端1发送用于请求LDAP目录412的条目2中的数据进行修改的消息(LDAP修改请求(TransId1))。条目2中的若干属性被请求修改,包括对条目2的CDC值的修改。CDC值修改是使用以上关于本发明第一实施例而描述的相同过程来完成的。
7b.客户端1接收指示条目2的修改请求已被LDAP目录412拒绝的消息(LDAP修改响应[结果不成功])。LDAP目录412拒绝了该修改,这是由于在本示例中,条目2的CDC值被由客户端2在步骤4a期间执行的过程所修改。
8a.客户端1发送针对由于不能执行正在进行的事务的一部分而“异常中止”正在进行的事务的消息(停止事务请求[异常中止,TransId1])。
该消息可以是包括要关闭的对应事务的事务Id在内的新LDAP消息。8b.客户端1从LDAP目录412接收指示事务已被成功关闭的消息(停止事务响应[TransId1])。该消息可以是用于确认成功执行关闭事务请求的新LDAP消息。备选地,该消息可能是可选的消息,这是由于在客户端侧可能不需要确认。
参照图9,图9是一幅信号序列图,用于帮助解释根据本发明第四实施例的、可用于检测冲突的另一冲突检测机制。该冲突检测机制利用了LDAP断言,该LDAP断言允许客户端(特别是LDAPv3客户端)指定针对要由LDAP目录412执行的操作必须为真的条件,否则将整体拒绝所请求的操作。LDAP断言已在上述RFC 4528中定义,并且可以在以下文献中找到与LDAPv3客户端有关的细节:K.Zeilenga“RFC 4510:Lightweight Directory Access Protocol(LDAP):Technical SpecificationRoad Map”,June 2006(其内容以引证的方式并入与此)。
具体地,LDAP断言用于检验与执行修改时相同的操作中的条件,并且这导致了操作原子性,这是由于条件验证和数据修改都是在没有任何其它操作中断的情况下执行的。为了实现这一点,RFC 4528定义了新的LDAP控制(“断言控制”),并且文献K.Zeilenga“RFC 4521:Considerations for Lightweight Directory Access Protocol(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中的信号流图示出了使用本发明的该具体冲突检测机制的示例情况:
1a.客户端1发送用于请求从一个或多个条目读取数据902的消息(LDAP搜索请求),该一个或多个条目包括针对冲突检测而准备的至少一个条目1。该消息还具有针对读取LDAP目录412的至少一个条目1内的“序列号”属性类型的请求。
1b.客户端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,其中,原始读取的序列号是“n”。具体地,客户端2读取包括以下各项在内的LDAP修改请求:(1)断言操作:断言:序列号=n,临界性:真;(2)修改后的数据902”;以及(3)替换操作:替换:序列号n+1(注意:在可以执行步骤2和3之前,步骤1必须为真)。基本上,客户端2发送包括对序列号属性的更新(以1增大其值)在内的LDAP修改请求,同时,LDAP修改请求包括用于检验序列号的“断言”,以确保其是刚刚在步骤2b读取的相同序列号。仅当断言的估计为真时,才执行LDAP修改操作。并且,仅当任何其它客户端未增大序列号时这才发生,而如果增大了序列号,则将展示出的是,从在步骤2b读取了该序列号起,另一客户端已修改了数据。
3b.客户端从LDAP目录412接收指示修改请求已成功的LDAP修改响应。
4a.客户端1将用于请求对冲突检测准备完成条目中的数据进行更新的消息(LDAP修改请求)发送至LDAP目录412,其中,原始读取的序列号是“n”。具体地,客户端1发送包括以下各项在内的LDAP修改请求:(1)断言操作:断言:序列号=n,临界性:真;(2)修改后的数据902’;以及(3)替换操作:替换:序列号n+1(注意:在可以执行步骤2和3之前,步骤1必须为真)。在这种情况下,LDAP目录412确定了断言被估计为假,这是由于序列号属性不具有该客户端在步骤1b期间原始读取的相同值。这意味着冲突已被避免。
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.CDC冲突检测机制具有以下优点:
○标准LDAP客户端能够检测是否发生冲突(即,由该客户端读取的数据可能已被另一客户端更新)。
○本发明的CDC机制部分地依赖于现今被任何商用LDAP服务器实施方式所支持的标准LDAP。该标准LDAP在LDAP目录或LDAP客户端处不需要任何所扩展的LDAP支持。
○本发明的CDC机制实现了互斥的(mutex)机制,其中,公共资源是数据(要读取和修改的),临界部分是从数据被LDAP客户端读取的时刻和相同LDAP客户端需要数据修改起的时间。
9.LDAP断言冲突检测机制具有以下优点:
○标准LDAP客户端能够检测是否发生冲突(即,由该客户端读取的数据可能已被另一客户端更新)。
○本发明的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 Access Protocol(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/lists/openldap-software/200301/msg00529.html下载)。
6.K.Zeilenga“LDAP Transactions”,November 18,2007(从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,用于在在所述目录处所述至少一个更新后的冲突检测值与对应的当前冲突检测值一致的情况下,接收对修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的接受,否则,接收对该请求的拒绝。
尽管本发明的若干实施例已在附图中示出并在以上具体实施方式中描述,但应当理解,本发明不限于所公开的实施例,而是在不脱离如权利要求阐述和限定的本发明精神的情况下还能够进行多种重新布置、修改和替换。
Claims (16)
1.一种用于在来自多于一个客户端前端的更新操作时检测并避免目录中的条目上的冲突的方法,所述方法包括以下步骤:
在所述目录处,从客户端前端接收读取所述目录中的条目上的数据的请求;
在所述目录处,分配与所述目录中的所述条目上的所述数据的至少一个子集相对应的至少一个给定的冲突检测值,其中,所述至少一个给定的冲突检测值包括给定的冲突检测计数器属性CDC,所述CDC具有所述目录中的所述条目上的值(x);
向所述客户端前端提交所请求的数据以及所述至少一个给定的冲突检测值;
在所述目录处,从所述客户端前端接收修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求,针对至少一个给定的冲突检测值中的每一个,所述请求具有至少一个更新后的冲突检测值,其中,具有至少一个更新后的冲突检测值的请求包括:
(i)一个或多个添加操作,如下,添加:CDC=(x)+1;添加:CDC=(x)+2……添加:CDC=(x)+要检测的冲突的数目NCD,其中,NCD的值等于或大于可能从所述目录中的所述条目读取并修改数据的同时存在的客户端的数目;
(ii)修改后的数据;以及
(iii)替换操作,如下:替换CDC=(x)+1;
在所述目录处,确定所述至少一个更新后的冲突检测值是否与对应的当前冲突检测值一致;
如果所述至少一个更新后的冲突检测值与对应的当前冲突检测值一致,则向所述客户端前端提交对修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的接受,如果所述请求具有尝试对当前CDC属性进行操作的添加操作,向所述客户端前端提交对所述请求的拒绝,其中,所述当前CDC属性在所述条目内具有与给定CDC属性值(x)不同的值;以及
在发现所述请求可接受的情况下,将当前冲突检测值设置为下一个值。
2.根据权利要求1所述的方法,其中,所述客户端前端在发送修改数据的请求之前,发起与所述目录的事务。
3.根据权利要求1所述的方法,其中,在所述目录处从所述客户端前端接收到的修改所述数据的所述至少一个子集的请求包括断言条件,并且,所述目录确保在修改所述目录中的所述数据之前所述断言条件为真。
4.根据权利要求1所述的方法,其中,CDC属性是所期望的结构对象类或新的辅助对象类中的强制属性。
5.根据权利要求1所述的方法,其中,CDC属性是循环计数器。
6.一种用于在来自多于一个客户端前端的更新操作时检测并避免目录中的条目上的冲突的目录系统,所述目录系统包括:
用于从客户端前端接收读取所述目录中的条目上的数据的请求的装置;
用于分配与所述目录中的所述条目上的所述数据的至少一个子集相对应的至少一个给定的冲突检测值的装置,其中,所述至少一个给定的冲突检测值包括给定的冲突检测计数器属性CDC,所述CDC具有所述目录中的所述条目上的值(x);
用于向所述客户端前端提交所请求的数据以及所述至少一个给定的冲突检测值的装置;
用于从所述客户端前端接收修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的装置,针对至少一个给定的冲突检测值中的每一个,所述请求具有至少一个更新后的冲突检测值,其中,具有至少一个更新后的冲突检测值的请求包括;
(i)一个或多个添加操作,如下,添加:CDC=(x)+1;添加:CDC=(x)+2……添加:CDC=(x)+要检测的冲突的数目NCD,其中,NCD的值等于或大于可能从所述目录中的所述条目读取并修改数据的同时存在的客户端的数目;
(ii)修改后的数据;以及
(iii)替换操作,如下:替换CDC=(x)+1;
用于确定所述至少一个更新后的冲突检测值是否与对应的当前冲突检测值一致的装置;
用于如果所述至少一个更新后的冲突检测值与对应的当前冲突检测值一致,则向所述客户端前端提交对修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的接受,如果所述请求具有尝试对当前CDC属性进行操作的添加操作,向所述客户端前端提交对所述请求的拒绝的装置,其中,所述当前CDC属性在所述条目内具有与给定CDC属性值(x)不同的值;以及
用于在发现所述请求可接受的情况下,将当前冲突检测值设置为下一个值的装置。
7.根据权利要求6所述的目录系统,还包括:用于在从所述客户端前端接收修改数据的请求之前,从客户端前端接收启动事务的请求的装置。
8.根据权利要求6所述的目录系统,其中,用于从所述客户端前端接收修改所述数据的所述至少一个子集的请求的装置包括用于接收断言条件的装置,并且,所述目录还包括用于确保在修改所述条目中的数据之前所述断言条件为真的装置。
9.根据权利要求6所述的目录系统,其中,CDC属性是所期望的结构对象类或新的辅助对象类中的强制属性。
10.根据权利要求6所述的目录系统,其中,CDC属性是循环计数器。
11.一种用于在来自客户端前端的更新操作时检测并避免目录中的条目上的冲突的客户端前端,所述客户端前端包括:
用于提交读取所述目录中的条目上的数据的请求的装置;
用于接收所请求的数据,以及与所述目录中的所述条目上的所述数据的至少一个子集相对应的至少一个给定的冲突检测值的装置,其中,所述至少一个给定的冲突检测值是给定的冲突检测计数器属性CDC,所述CDC具有所述目录中的所述条目上的值(x);
用于处理接收到的数据的装置;
用于发送修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的装置,针对至少一个给定的冲突检测值中的每一个,所述请求具有至少一个更新后的冲突检测值,其中,具有至少一个更新后的冲突检测值的请求包括:
(i)一个或多个添加操作,如下,添加:CDC=(x)+1;添加:CDC=(x)+2……添加:CDC=(x)+要检测的冲突的数目NCD,其中,NCD的值等于或大于可能从所述目录中的所述条目读取并修改数据的同时存在的客户端的数目;
(ii)修改后的数据;以及
(iii)替换操作,如下:替换CDC=(x)+1;以及
用于在所述目录处所述至少一个更新后的冲突检测值与对应的当前冲突检测值一致的情况下,接收对修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的接受,否则,接收对所述请求的拒绝的装置。
12.根据权利要求11所述的客户端前端,还包括向所述目录提交在发送修改数据的请求之前启动事务的请求的装置。
13.根据权利要求11所述的客户端前端,还包括将断言条件与所述请求一起向所述目录提交的装置。
14.根据权利要求11所述的客户端前端,其中,CDC属性是所期望的结构对象类或新的辅助对象类中的强制属性。
15.根据权利要求11所述的客户端前端,其中,CDC属性是循环计数器。
16.一种用于在来自客户端前端的更新操作时检测并避免目录中的条目上的冲突的方法,所述方法包括以下步骤:
从客户端前端提交读取所述目录中的条目上的数据的请求;
在所述客户端前端处,接收所请求的数据,以及与所述数据的至少一个子集相对应的至少一个给定的冲突检测值,其中,所述至少一个给定的冲突检测值包括给定的冲突检测计数器属性CDC,所述CDC具有所述目录中的所述条目上的值(x);
在所述客户端前端处,处理检索到的数据;
从所述客户端前端发送修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求,针对至少一个给定的冲突检测值中的每一个,所述请求具有至少一个更新后的冲突检测值,其中,具有至少一个更新后的冲突检测值的请求包括:
(i)一个或多个添加操作,如下,添加:CDC=(x)+1;添加:CDC=(x)+2……添加:CDC=(x)+要检测的冲突的数目NCD,其中,NCD的值等于或大于可能从所述目录中的所述条目读取并修改数据的同时存在的客户端的数目;
(ii)修改后的数据;以及
(iii)替换操作,如下:替换CDC=(x)+1;以及
如果在所述目录处所述至少一个更新后的冲突检测值与对应的当前冲突检测值一致,则在所述客户端前端处,接收对修改所述目录中的所述条目上的所述数据的所述至少一个子集的请求的接受,否则,接收对所述请求的拒绝。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US98571007P | 2007-11-06 | 2007-11-06 | |
US60/985,710 | 2007-11-06 | ||
PCT/IB2008/000876 WO2009060266A1 (en) | 2007-11-06 | 2008-04-10 | Lightweight directory access protocol (ldap) collision detection mechanism and method |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101849233A CN101849233A (zh) | 2010-09-29 |
CN101849233B true CN101849233B (zh) | 2013-01-09 |
Family
ID=39720584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008801148511A Active CN101849233B (zh) | 2007-11-06 | 2008-04-10 | 轻量级目录访问协议(ldap)冲突检测机制和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8204989B2 (zh) |
EP (1) | EP2210194B1 (zh) |
CN (1) | CN101849233B (zh) |
ES (1) | ES2417489T3 (zh) |
WO (1) | WO2009060266A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2534587B1 (en) | 2010-02-11 | 2019-11-20 | Telefonaktiebolaget LM Ericsson (publ) | Data management at a directory database |
SG192289A1 (en) * | 2012-01-06 | 2013-08-30 | Smart Communications Inc | System, method and computer program arranged to facilitate a transaction |
US20150363454A1 (en) * | 2013-02-15 | 2015-12-17 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and Apparatuses for Handling Concurrent Accesses to Data in a Directory |
CN104410495B (zh) * | 2014-11-19 | 2018-03-27 | 天津南大通用数据技术股份有限公司 | 基于ldapv3控制操作的目录认证实现方法 |
US10409253B2 (en) * | 2016-10-24 | 2019-09-10 | Fisher-Rosemount Systems, Inc. | Systems and methods for merging modular control systems into a process plant |
US10366026B1 (en) * | 2016-12-23 | 2019-07-30 | Amazon Technologies, Inc. | Random access to decompressed blocks |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998040805A2 (en) * | 1997-02-27 | 1998-09-17 | Siebel Systems, Inc. | Method of synchronizing independently distributed software and database schema |
US6493725B1 (en) * | 1998-05-18 | 2002-12-10 | Sharp Kabushiki Kaisha | Database managing system |
US6516314B1 (en) * | 1998-11-17 | 2003-02-04 | Telefonaktiebolaget L M Ericsson (Publ) | Optimization of change log handling |
WO2004002062A1 (en) * | 2002-06-24 | 2003-12-31 | Siemens Aktiengesellschaft | A policy management method and system |
US8010682B2 (en) * | 2004-12-28 | 2011-08-30 | International Business Machines Corporation | Early coherency indication for return data in shared memory architecture |
US7809838B2 (en) * | 2005-12-08 | 2010-10-05 | International Business Machines Corporation | Managing concurrent data updates in a composite services delivery system |
JP2007164252A (ja) * | 2005-12-09 | 2007-06-28 | Sony Computer Entertainment Inc | 仮想空間のオブジェクトを管理するシステム |
-
2008
- 2008-04-10 ES ES08737415T patent/ES2417489T3/es active Active
- 2008-04-10 CN CN2008801148511A patent/CN101849233B/zh active Active
- 2008-04-10 US US12/741,407 patent/US8204989B2/en active Active
- 2008-04-10 WO PCT/IB2008/000876 patent/WO2009060266A1/en active Application Filing
- 2008-04-10 EP EP08737415A patent/EP2210194B1/en not_active Not-in-force
Non-Patent Citations (6)
Title |
---|
CHIU Lin et al.High level specification of concurrency control in distributed database systems.《Proceedings of the International Conference On Soft Engineering,Singapor》.1988,309页第1栏第2段及第二栏第2段,314页第二栏5.3节及图7. * |
draft-zeilenga-ldap-txn-10.txt.《IETF STANDARD-WORKING-DRAFT,INTERNET ENGINEERING TASK FORCE》.2007,第3页第2节,第4页第3节,第8页第6节. * |
K.Zeilenga.Lightweight Directory Access Protocol(LDAP) Assertion Control * |
Kurt D.Zeilenga.LDAP Transaction < * |
Kurt D.Zeilenga.LDAP Transaction <draft-zeilenga-ldap-txn-10.txt.《IETF STANDARD-WORKING-DRAFT,INTERNET ENGINEERING TASK FORCE》.2007,第3页第2节,第4页第3节,第8页第6节. |
rfc4528.txt.《IETF STANDARD,INTERNET ENGINEERING TASK FORCE》.2006,第2页第1-3段. * |
Also Published As
Publication number | Publication date |
---|---|
EP2210194A1 (en) | 2010-07-28 |
US8204989B2 (en) | 2012-06-19 |
CN101849233A (zh) | 2010-09-29 |
EP2210194B1 (en) | 2013-04-03 |
US20100268815A1 (en) | 2010-10-21 |
ES2417489T3 (es) | 2013-08-08 |
WO2009060266A1 (en) | 2009-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3549325B1 (en) | Cross-chain interactions using a domain name scheme in blockchain systems | |
CN101849233B (zh) | 轻量级目录访问协议(ldap)冲突检测机制和方法 | |
US7543047B2 (en) | Method for data synchronization and update conflict resolution between mobile clients and server in mobile system | |
JP4842279B2 (ja) | データベースサーバによるファイル操作を実行するためのインフラストラクチャ | |
US9569074B2 (en) | Method and system for using an intermediary server | |
US10749953B2 (en) | Synchronization server process | |
US7409397B2 (en) | Supporting replication among a plurality of file operation servers | |
CN101111840B (zh) | 用于在数据库管理系统中为文件操作提供锁定的技术 | |
US6973463B2 (en) | Replication architecture for a directory server | |
US8250102B2 (en) | Remote storage and management of binary object data | |
US20020032775A1 (en) | System and method for transmitting and retrieving data via a distributed persistence framework | |
US20020069196A1 (en) | Method, system and program product for enabling authorized access and request-initiated translation of data files. | |
US8090686B2 (en) | Multi-master attribute uniqueness | |
US20070005555A1 (en) | Method and mechanism for supporting virtual content in performing file operations at a RDBMS | |
KR20060116140A (ko) | 저장 플랫폼에서의 로킹 및 아이솔레이션을 위한 시스템 및방법 | |
US8996484B2 (en) | Recursive lock-and-propagate operation | |
US20030088615A1 (en) | Update resolution procedure for a directory server | |
JP2001101062A (ja) | 複製サーバ装置 | |
Najmi et al. | ebXML Registry Services and Protocols | |
Najmi et al. | ebXML Registry Services and Protocols Version 3.0 | |
Standard | OASIS/ebXML Registry Services Specification v2. 0 | |
Freidlitz et al. | Pro. NET Directory Services Programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |