CN103034584A - 测试分布式锁的方法和装置 - Google Patents
测试分布式锁的方法和装置 Download PDFInfo
- Publication number
- CN103034584A CN103034584A CN2012105184303A CN201210518430A CN103034584A CN 103034584 A CN103034584 A CN 103034584A CN 2012105184303 A CN2012105184303 A CN 2012105184303A CN 201210518430 A CN201210518430 A CN 201210518430A CN 103034584 A CN103034584 A CN 103034584A
- Authority
- CN
- China
- Prior art keywords
- virtual client
- storehouse
- virtual
- interface
- distributed lock
- 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.)
- Granted
Links
Images
Landscapes
- Multi Processors (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种测试分布式锁的方法,包括以下步骤:构建一个用户态函数库作为虚拟客户端库,所述虚拟客户端库中封装有索引节点缓存结构和所有实现元数据系统调用的接口;以及利用虚拟客户端库对分布式锁进行测试。本发明通过利用带资源缓存的虚拟客户端进行测试,能很好地模拟真实客户端和元数据服务器之间的通信,协助对分布式锁系统的测试。
Description
技术领域
本发明涉及分布式系统领域,更具体地,涉及测试分布式锁的方法和装置。
背景技术
在分布式文件系统中,多个节点会同时访问同一些资源,而分布式锁用于保护这些资源不会因为多个使用者的并发操作而出现错误,这对保持存储系统的数据安全是至关重要的。因此,要对分布式锁模块进行全面的测试,以使其能稳定地工作。为了实现这个目标,需要使用一些测试方法力求对分布式锁的测试全面和快捷。
然而,分布式锁的测试比较复杂,主要存在如下问题:
首先,测试不完全。如果不使用真实环境测试,有很多的路径或者情况难以覆盖到;
其次,并发不易控制。分布式锁的一个关键之处就是处理各种各样的并发情况。使用简单的用例测试,模拟不出并发情况,而使用真实客户端,在测试阶段不仅需要很多硬件资源而且对并发点的控制也比较困难。
再次,问题定位困难。如果使用真实客户端测试(运行于linux内核态)出现问题会导致客户机死机,对错误定位和代码调试带来很多不便。
针对相关技术中的问题,目前尚未提出有效的解决方案。
发明内容
本发明旨在开发对分布式文件系统使用的分布式锁进行测试的方法和装置。为了提高测试效率,在测试时构建了功能比较完备的虚拟客户端。
根据本发明的一个方面,提供了一种测试分布式锁的方法,包括以下步骤:构建一个用户态函数库作为虚拟客户端库,所述虚拟客户端库中封装有索引节点缓存结构和所有实现元数据系统调用的接口;以及利用虚拟客户端库对分布式锁进行测试。
优选地,利用虚拟客户端库对分布式锁进行测试包括:调用虚拟客户端库中的初始化接口来建立一个虚拟客户端;以及根据测试需求,利用对应的参数来调用虚拟客户端库中封装的对应接口。
更优选地,所调用的接口利用参数构造消息发送给元数据服务器并等待处理结果,然后返回处理结果。
更优选地,使用多个线程调用所述虚拟客户端库中的初始化接口来建立多个虚拟客户端。多个虚拟客户端利用多个ID进行区别,其中在调用初始化接口建立多个虚拟客户端时对多个ID进行赋值。
优选地,多个虚拟客户端的索引节点缓存结构的地址放在一个数组中,线程利用一个虚拟客户端的ID为索引到该数组中进行查找。
根据本发明的另一方面,提供了一种测试分布式锁的装置,包括:构建单元,用于构建一个用户态函数库作为虚拟客户端库,虚拟客户端库中封装有索引节点缓存结构和所有实现元数据系统调用的接口;以及测试单元,用于利用虚拟客户端库对所述分布式锁进行测试。
优选地,测试单元还包括:虚拟客户端建立单元,用于调用虚拟客户端库中的初始化接口来建立一个虚拟客户端;以及调用单元,根据测试需求,利用对应的参数来调用所述虚拟客户端库中封装的对应接口,其中,所调用的接口利用参数构造消息发送给元数据服务器并等待处理结果,然后返回处理结果。
更优选地,虚拟客户端建立单元还使用多个线程调用虚拟客户端库中的初始化接口来建立多个虚拟客户端,多个虚拟客户端利用多个ID进行区别,其中在调用初始化接口建立多个虚拟客户端时对多个ID进行赋值。
优选地,多个虚拟客户端的索引节点缓存结构的地址放在一个数组中,线程利用一个虚拟客户端的ID为索引到该数组中进行查找。
本发明通过利用带资源缓存的虚拟客户端进行测试,能很好地模拟真实客户端和元数据服务器之间的通信,协助对分布式锁系统的测试。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是真实客户端测试分布式锁的原理图;
图2是根据本发明实施例的测试分布式锁的方法的流程图;
图3是根据本发明实施例的测试分布式锁的原理图;以及
图4根据本发明实施例的测试分布式锁的装置的框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
在描述本发明的测试分布式锁的技术方案之前,首先描述利用真实客户端测试分布式锁的技术。
图1是真实客户端测试分布式锁的原理图。参照图1,真实客户端运行于内核的VFS(虚拟文件系统,virtual file system)层之下,用户访问文件系统时(例如执行create、remove、link、read等操作),会将请求传递给VFS层(通过函数调用)。接着VFS调用客户端注册的接口,将请求发送给服务器,收到应答后再将结果反馈给用户。用户使用文件系统前通过mount命令将客户端挂载到客户机上,然后访问挂载点即可。
针对上述利用真实客户端测试分布式锁的缺点,本发明的发明人提出了本发明的技术方案,以下参照图2至图4进行详细描述。
图2是根据本发明实施例的测试分布式锁的方法的流程图。
参照图2,根据本发明的测试分布式锁的方法包括以下步骤:S202,构建一个用户态函数库作为虚拟客户端库,该虚拟客户端库中封装有inode缓存结构和所有实现元数据系统调用的接口;以及S204,利用虚拟客户端库对分布式锁进行测试。
其中,步骤S204可进一步包括:调用虚拟客户端库中的初始化接口来建立一个虚拟客户端;以及根据测试需求,利用对应的参数来调用虚拟客户端库中封装的对应接口。所调用的接口利用参数构造消息发送给元数据服务器并等待处理结果,然后返回处理结果。
此外,还可以使用多个线程调用所述虚拟客户端库中的初始化接口来建立多个虚拟客户端,这样就可以模拟出并发情况。多个虚拟客户端利用多个ID进行区别,其中在调用初始化接口建立多个虚拟客户端时对多个ID进行赋值。多个虚拟客户端的索引节点缓存结构的地址放在一个数组中,线程利用一个虚拟客户端的ID为索引到该数组中进行查找
图3是根据本发明实施例的测试分布式锁的原理图。
在测试中,构建一个用户态函数库作为虚拟客户端库,其中封装了inode(索引节点)缓存结构(其目的是存放可能被系统频繁访问到的数据,以提高系统的处理速度)、所有实现元数据系统调用的接口(这些接口接收参数并构造消息结构与服务器进行交互以完成调用者的操作)。注意,这里所说的元数据系统调用是一个整体概念,系统调用是linux内核给开发者提供的一些编程接口,元数据系统调用是指与操作文件系统元数据相关的系统调用,例如open(),mkdir()等。
以下具体描述如何构建虚拟客户端库。其被分为两个部分,第一部分是构造缓存结构,每一个客户端都有自己的缓存结构,该缓存结构存放inode信息,系统调用接口对inode信息的访问都会通过缓存。访问时先查找缓存,有的话就读取,没有就从服务器读取然后加入到缓存中。该结构实质上是一个哈希数组,数组的每一项是该哈希表的一个哈希桶,其中存放一个链表头结构,用来将映射到该哈希桶的inode结构链接起来,比如我们要将一个inode结构放入到缓存结构中,首先根据其inode号计算出它所在的哈希桶索引(比如使用inode号对哈希桶的个数进行取模),我们就可以找到该哈希桶的链表头,最后将该inode结构链接到该链表的末尾即可。第二部分是构造系统调用接口。这里,我们要做的就是根据接口的功能语义确定使用者需要传入的参数,然后将这些参数处理后(安全性检查、加本地锁等),传入更底层的接口(这些接口在我们要测试的代码中),更底层的接口将使用者传入的参数填入到网络消息结构中,发往元数据服务器,最后从元数据服务器接收处理结果,再返回给使用者。
在启动测试代码时,只需调用该函数库中的初始化接口即能建立一个虚拟客户端,然后再根据测试需求构造合适的参数去调用虚拟客户端库中封装的接口即可。例如,使用者要执行一个create操作,在初始化完成后,使用参数(文件系统id、父目录inode、要创建的文件名等)调用虚拟客户端库中相应的create接口即可,该接口会把传进来的参数整理成一个create消息发送给元数据服务器并等待接收处理结果,最后将结果返回给使用者。虚拟客户端的行为基本与真实客户端一致,类似于真实运行的环境,既能实现对分布式锁进行全面测试的目的,又规避了使用运行于内核态的真实客户端测试所面临的问题。
此外,为了测试分布式锁的并发情况,可以在虚拟客户端中使用多线程模拟多客户端以使用有限的资源制订用例对多种并发情况进行测试,并且方便对并发代码的控制。在测试代码启动时,每个线程都调用虚拟客户端库的初始化接口创建多个虚拟客户端,每个客户端(以及客户端中自有的数据结构,如inode缓存、分布式锁的管理结构等)以特有的ID作为区别,该ID在初始化时赋值。例如,模拟4个客户端,他们的inode缓存结构的地址放在一个有4个元素的数组中,线程要访问某个客户端的inode缓存,需要以该客户端的id为索引到数组中查找。
可以看出,如果使用真实的客户端进行系统测试,定位问题会有以下缺陷,而使用虚拟客户端可以很好地规避这些缺陷:
1、测试资源需求大。每一个真实客户端都需要个机器(或者虚拟机),而多个虚拟客户端可以运行于一个机器(或虚拟机上),可以根据需要设置客户端的数目;
2、机器间的时间有偏差。测试时经常需要分析各客户端的日志以确定它们加锁的时序,对于多个真实客户端,它们的时间很难完全同步,这样确定时序时可能出现时间偏差,而虚拟客户端运行于同一个节点上,时序不会出现偏差;
3、调试难。真实客户端运行于内核态,一旦出现问题会导致操作系统宕机,一般需要在客户端机器配置串口线,才能看到的很有限的错误信息,并且还要重启机器,而虚拟客户端运行于用户态,不会影响操作系统,出现问题能完全保留现场方便调试。
图4根据本发明实施例的测试分布式锁的装置的框图。
参照图4,根据本发明的测试分布式锁的装置包括:构建单元42,用于构建一个用户态函数库作为虚拟客户端库,虚拟客户端库中封装有索引节点缓存结构和所有实现元数据系统调用的接口;以及测试单元44,用于利用虚拟客户端库对所述分布式锁进行测试。
优选地,测试单元还包括:虚拟客户端建立单元,用于调用虚拟客户端库中的初始化接口来建立一个虚拟客户端;以及调用单元,根据测试需求,利用对应的参数来调用所述虚拟客户端库中封装的对应接口,其中,所调用的接口利用参数构造消息发送给元数据服务器并等待处理结果,然后返回处理结果。
更优选地,虚拟客户端建立单元还使用多个线程调用虚拟客户端库中的初始化接口来建立多个虚拟客户端,多个虚拟客户端利用多个ID进行区别,其中在调用初始化接口建立多个虚拟客户端时对多个ID进行赋值。
优选地,多个虚拟客户端的索引节点缓存结构的地址放在一个数组中,线程利用一个虚拟客户端的ID为索引到该数组中进行查找。
综上所述,借助于本发明的上述技术方案,通过自定义的缓存系统,在编写测试框架时设计自己的元数据缓存系统用在虚拟客户端上,能够使虚拟客户端的行为基本与真实客户端一致,很好地模拟真实客户端和元数据服务器之间的通信,协助对分布式锁系统的测试。此外,通过使用多线程模拟多客户端,能方便地控制客户端之间的并发,提高测试效率。模拟多客户端时以客户端ID为索引分开存放各个虚拟客户端从元数据服务器读取的数据,每个虚拟客户端之间互不影响。提高了分布式锁测试的准确性和完善性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种测试分布式锁的方法,其特征在于,所述方法包括以下步骤:
构建一个用户态函数库作为虚拟客户端库,所述虚拟客户端库中封装有索引节点缓存结构和所有实现元数据系统调用的接口;以及
利用所述虚拟客户端库对所述分布式锁进行测试。
2.根据权利要求1所述的方法,其特征在于,利用所述虚拟客户端库对所述分布式锁进行测试包括:
调用所述虚拟客户端库中的初始化接口来建立一个虚拟客户端;以及
根据测试需求,利用对应的参数来调用所述虚拟客户端库中封装的对应接口。
3.根据权利要求2所述的方法,其特征在于,所调用的接口利用所述参数构造消息发送给元数据服务器并等待处理结果,然后返回所述处理结果。
4.根据权利要求2所述的方法,其特征在于,使用多个线程调用所述虚拟客户端库中的初始化接口来建立多个虚拟客户端。
5.根据权利要求4所述的方法,其特征在于,所述多个虚拟客户端利用多个ID进行区别,其中在调用初始化接口建立所述多个虚拟客户端时对所述多个ID进行赋值。
6.根据权利要求5所述的方法,其特征在于,所述多个虚拟客户端的索引节点缓存结构的地址放在一个数组中,线程利用一个虚拟客户端的ID为索引到该数组中进行查找。
7.一种测试分布式锁的装置,其特征在于,所述装置包括:
构建单元,用于构建一个用户态函数库作为虚拟客户端库,所述虚拟客户端库中封装有索引节点缓存结构和所有实现元数据系统调用的接口;以及
测试单元,用于利用所述虚拟客户端库对所述分布式锁进行测试。
8.根据权利要求7所述的装置,其特征在于,所述测试单元还包括:
虚拟客户端建立单元,用于调用所述虚拟客户端库中的初始化接口来建立一个虚拟客户端;以及
调用单元,根据测试需求,利用对应的参数来调用所述虚拟客户端库中封装的对应接口,
其中,所调用的接口利用所述参数构造消息发送给元数据服务器并等待处理结果,然后返回所述处理结果。
9.根据权利要求8所述的方法,其特征在于,所述虚拟客户端建立单元还使用多个线程调用所述虚拟客户端库中的初始化接口来建立多个虚拟客户端,所述多个虚拟客户端利用多个ID进行区别,其中在调用初始化接口建立所述多个虚拟客户端时对所述多个ID进行赋值。
10.根据权利要求9所述的方法,其特征在于,所述多个虚拟客户端的索引节点缓存结构的地址放在一个数组中,线程利用一个虚拟客户端的ID为索引到该数组中进行查找。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210518430.3A CN103034584B (zh) | 2012-12-05 | 2012-12-05 | 测试分布式锁的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210518430.3A CN103034584B (zh) | 2012-12-05 | 2012-12-05 | 测试分布式锁的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103034584A true CN103034584A (zh) | 2013-04-10 |
CN103034584B CN103034584B (zh) | 2016-08-17 |
Family
ID=48021498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210518430.3A Active CN103034584B (zh) | 2012-12-05 | 2012-12-05 | 测试分布式锁的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103034584B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407016A (zh) * | 2016-10-19 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 一种多线程争抢资源的模拟方法及装置 |
CN109151021A (zh) * | 2018-08-21 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种分布式存储系统文件锁特性测试方法和装置 |
CN110351156A (zh) * | 2018-04-03 | 2019-10-18 | 大唐移动通信设备有限公司 | 一种测试方法和装置 |
CN110990483A (zh) * | 2019-11-26 | 2020-04-10 | 上海莉莉丝科技股份有限公司 | 分布式缓存中的缓存节点的数据访问和控制方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060200470A1 (en) * | 2005-03-03 | 2006-09-07 | Z-Force Communications, Inc. | System and method for managing small-size files in an aggregated file system |
CN102541983A (zh) * | 2011-10-25 | 2012-07-04 | 无锡城市云计算中心有限公司 | 一种分布式文件系统中多客户端缓存同步的方法 |
CN102567203A (zh) * | 2011-12-28 | 2012-07-11 | 创新科软件技术(深圳)有限公司 | 一种测试分布式文件系统性能的方法及系统 |
-
2012
- 2012-12-05 CN CN201210518430.3A patent/CN103034584B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060200470A1 (en) * | 2005-03-03 | 2006-09-07 | Z-Force Communications, Inc. | System and method for managing small-size files in an aggregated file system |
CN102541983A (zh) * | 2011-10-25 | 2012-07-04 | 无锡城市云计算中心有限公司 | 一种分布式文件系统中多客户端缓存同步的方法 |
CN102567203A (zh) * | 2011-12-28 | 2012-07-11 | 创新科软件技术(深圳)有限公司 | 一种测试分布式文件系统性能的方法及系统 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407016A (zh) * | 2016-10-19 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 一种多线程争抢资源的模拟方法及装置 |
CN106407016B (zh) * | 2016-10-19 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 一种多线程争抢资源的模拟方法及装置 |
CN110351156A (zh) * | 2018-04-03 | 2019-10-18 | 大唐移动通信设备有限公司 | 一种测试方法和装置 |
CN109151021A (zh) * | 2018-08-21 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种分布式存储系统文件锁特性测试方法和装置 |
CN109151021B (zh) * | 2018-08-21 | 2021-05-25 | 郑州云海信息技术有限公司 | 一种分布式存储系统文件锁特性测试方法和装置 |
CN110990483A (zh) * | 2019-11-26 | 2020-04-10 | 上海莉莉丝科技股份有限公司 | 分布式缓存中的缓存节点的数据访问和控制方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103034584B (zh) | 2016-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105224466B (zh) | 一种基于Docker的集成测试方法及系统 | |
US9870313B2 (en) | Unit-level formal verification for vehicular software systems | |
CN101997823B (zh) | 一种分布式文件系统及其数据访问方法 | |
WO2014206289A1 (en) | Method and apparatus for outputting log information | |
CN106569896B (zh) | 一种数据分发及并行处理方法和系统 | |
CN107291750A (zh) | 一种数据迁移方法和装置 | |
CN103034584A (zh) | 测试分布式锁的方法和装置 | |
CN109885535A (zh) | 一种文件存储的方法及相关装置 | |
US11829278B2 (en) | Secure debugging in multitenant cloud environment | |
CN107704568A (zh) | 一种测试数据添加的方法及装置 | |
CN109542754A (zh) | 移动设备的接入方法、应用程序的调试方法、装置和系统 | |
Gong et al. | Geoprocessing in the Microsoft cloud computing platform-azure | |
CN104133762B (zh) | 软件测试方法及测试装置 | |
CN116975649A (zh) | 数据处理方法、装置、电子设备、存储介质及程序产品 | |
Cheptsov | HPC in big data age: An evaluation report for java-based data-intensive applications implemented with Hadoop and OpenMPI | |
US9229659B2 (en) | Identifying and accessing reference data in an in-memory data grid | |
Jia et al. | Using the 5W+ 1H model in reporting systematic literature review: A case study on software testing for cloud computing | |
Chullipparambil | Big data analytics using Hadoop tools | |
Singh | Cluster-level logging of containers with containers: Logging challenges of container-based cloud deployments | |
Xie et al. | Modeling and verifying HDFS using CSP | |
US20210056120A1 (en) | In-stream data load in a replication environment | |
CN117176743B (zh) | 数据处理方法、装置、设备、可读存储介质及程序产品 | |
Mir Taheri | Distributed Crawling of Rich Internet Applications | |
Bogdanov et al. | Storage database in cloud processing | |
CN115733828A (zh) | 一种api参数的识别方法、装置、电子设备及存储介质 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220725 Address after: 100089 building 36, courtyard 8, Dongbeiwang West Road, Haidian District, Beijing Patentee after: Dawning Information Industry (Beijing) Co.,Ltd. Patentee after: DAWNING INFORMATION INDUSTRY Co.,Ltd. Address before: 100193 No. 36 Building, No. 8 Hospital, Wangxi Road, Haidian District, Beijing Patentee before: Dawning Information Industry (Beijing) Co.,Ltd. |
|
TR01 | Transfer of patent right |