OCFS2 Xattr Test
Contents
Introduction
This document aims at scheduling the testing plan against Xattr which we're currently implementing on Ocfs2,and also capture/record the testing result to trace the status during test where we can easily position a bug.In an addition,we also explain how all of the testcases will be organized and the workflow of their corresponding testing tool.
TestLimitation
The limitation defined by desgin roadmap during xattr implementation on ocfs2 should be claimed here to make a clear understanding of how can we expect our testing tool most.
#define XATTR_NAME_MAX 255 /* max chars in an extended attribute name */
#define XATTR_SIZE_MAX 65536 /* max size of an extended attribute value (64k) */
#define XATTR_LIST_MAX 65536 /* max size of extended attribute namelist (64k) */
#define MAX_EAs_ONEFILE ? /* max number of EA entry in one file,still no idea about this,have we set a limitation for this?*/
Testcases
we concentrated on feature,stress and boundary test,and then formalize these into a testing tool package.
1.Single-node Case,all cases scheduled in single_xattr_run.sh
1.Feature test,including add,update,remove,list functionality on commonfile/directory/symlink,also check different namespace(user,security,system,trusted).do random update on EAs(include random name_size and random value_sz,and its string value),moreeover,a sanity check should be conducted under a series of block and cluster size(-b 1k -C 4k,-b 4k -C 4k,-b 4k,-C 32k)
2.Boundary test,firstly test each argument which exactly meet the limitation we documented above separately,then mix up together.
3.Concurrent operations(update/read) test with multiple forked processes against one file,father be responsible for a number of entry's creation,after that, the rest of children take race to update all this entries,meanwhile,the father process read all entries,and check the consistency of all retrieved xattr value.
4.Multiple file test,manipulates thousands of file simultaneously via spreading the same amount of processes to perform xattr add/update and content modification together.
5.Stress test,punch the test by tuning workload extremely high,including file_nums,iteration_nums,EA_nums,EA_size,EAName_size.it's up to user's flavor:
currently,my example is ./single_xattr_run.sh -i 1000 -x 10000 -n user -l 250 -s 40000 -o logs -d /dev/sdd1 /storage
2.Multi-nodes Case
NOTE:To launch the multi-nodes test,need to install openmpi first,and a configuration of ssh or rsh passwordless access also needed in advance. For the generic/basic mulitinode testing program,it was obtained by the help of MPI apis to populates a fixed number of testing process(Rank0~rankN) on multi-nodes,my testing idea as followings,
Step 1. Rank0(root rank) help to creating the testing file,rest ranks
wait its completion,then open with rw mode.
for (i=0;i<xattr_entry_nums;i++)
do
Step 2. Rank0(root rank) help to create the EA entry on testing
file(normal,directory,symlink) ==Meanwhile,all none-root ranks wait
until the completion of this creation.
Step 3.All none-root ranks take a race to perform concurrent updates,or remove&&add upon the
newly added EA entry,while the rank0 take a race to read this EA entry.and check the consistency of retrieved data as well.
done
Step 4. All ranks take a race to list all EAs concurrently.
Step 5. Ranks take race to remove all EAs.
Step 6. After removal,rank0 verify its emptiness of xattr list.
By tunning the workload and parameter setting(viaxattr_multinode_run.sh),we perform the /utility/limitation/boundary/stress/ testcases on multinodes.
1.Feature/utility test,,including concurrent add,update,remove,list functionality test on commonfile/directory/symlink,also check different namespace(user,security,system,trusted) through multiple nodes.
2.Limitation/boundary test,check all limitations we set above.
3.Stress test,punch the test by tuning workload extremely high,including file_nums,iteration_nums,EA_nums,EA_size,EAName_size,rank_nums.
3. ACLs and Security EA test for Xattr
1. Generic ACLs Test.
2. Default ACLs Test.
3. ACLs Test With File Utilities.
4. Copying ACLs Test.
5. Archive and Restore ACLs Test.
6. ACLs Limitation Test.
7. Huge ACLs Entries Test.
8. Stress ACLs Test.
4. Additional boundary tests suggested by Tao
1. non-xattr test.
2. simple in-inode-xattr test(it will include set a small xattr, a large
xattr).
3. in-inode-xattr-extension test. it will fill up the in-inode space and
then extend the xattr to an outside xattr block. you need to test t4
scenarios at least.
1) insert a small xattr.
2) insert a large xattr.
3) replace a small xattr in-inode to a large one(value_size>80)(which
will remove the old in-inode xattr and add it in outside block).
4) replace a small xattr in-inode to a large one(value_size<80).
4. outside-xattr-block test.
1) insert a small xattr.
2) insert a large xattr.
3) replace xattr to a small one((value_size<80)) which then can be
inserted into in-inode and deleted from xattr block.
4) replace xattr to a value(value_size>80) but the old one has a size
of(48~80).
5. basic bucket-extension test.
1) insert a small xattr.
2) insert a large xattr.
3) replace a small xattr in-inode to a large one(value_size>80)(which
will remove the old in-inode xattr and add it in outside bucket).
4) replace a small xattr in-inode to a large one(value_size<80).
6. basic bucket insert test.
1) insert a small xattr.
2) insert a large xattr.
3) replace xattr to a small one((value_size<80)) which then can be
inserted into in-inode and deleted from xattr bucket.
4) replace xattr to a value(value_size>80) but the old one has a size
of(48~80).
5. Combination tests for inline-data and inline-xattr
1) Filling-up test: inline-data consume less than (or equal to) max_inline_data - 256,
inline-xattr consume less or equal than 256
2) Disable inline-xattr test: inline-data consume more than max_inline_data - 256,which cause
inline-xattr disabled.
3) Disable inline-xattr test: shrink inline-data size to less than(or equal to) max_inline_data -
256, which re-enable the inline-xattr.
4) Inline xattr reservation test: add inline-xattr entry first(to reserve the last 256 bytes), then try
to fill the inodes with inline-data to see if inline-xattr will get
affected.
TestStatus
Kernel/Patches |
Arch/Nodes |
Ocfs2 Options |
Testing Report |
Ocfs2-Tools |
Testing Tool |
Date |
Coverage |
2.6.26-rc4 |
x86_64/2 Nodes |
/dev/sdd1 |
Single-Node Test,Refer to testing log:xattr_test_log-20080630-165712.log |
Latest tools src built from git repo |
06/30/2008 |
||
2.6.26-rc4 |
x86_64/2 Nodes |
/dev/sdd1 |
Single-Node Test: |
Latest Src build from git repo |
07/02/2008 |
||
2.6.26-rc4 |
x86_64/2 Nodes |
/dev/sdd1 |
Single-Node Test: |
Latest Src build from git repo |
07/03/2008 |
||
2.6.26-rc8 |
x86_64/2 Nodes |
/dev/sdd1 |
Multi-Node Test: |
Latest Src build from git repo |
07/08/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Multi-Node Test: |
Latest Src build from git repo |
07/09/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Multi-Node Test: |
Latest Src build from git repo |
07/10/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Single/Multiple Tool Enhancement |
Latest Src build from git repo |
07/13/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Single Tool Enhancement: |
Latest Src build from git repo |
07/15/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Multiple-node Tool Enhancement: |
Latest Src build from git repo |
07/16/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Single-node Tool Enhancement: |
Latest Src build from git repo |
07/20/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Single/Multiple Node Test: |
Latest Src build from git repo |
07/21/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Single/Multiple Node Test: |
Latest Src build from git repo |
07/22/2008 |
||
2.6.26-rc9 |
x86_64/2 Nodes |
/dev/sdd1 |
Single/Multiple Node Coverage Test: |
Latest Src build from git repo |
07/26/2008 |
||
2.6.26-rc9 with latest 15 xattr patches |
x86_64/2 Nodes |
/dev/sdd1 |
Overall Single-Node Test: |
Latest Src build from git repo |
08/13/2008 |
||
2.6.26-rc9 with latest 15 xattr patches |
x86_64/2 Nodes |
/dev/sdd1 |
Overall Single-Node Test: |
Latest Src build from git repo |
08/14/2008 |
||
2.6.26-rc9 with latest 15 xattr patches |
x86_64/2 Nodes |
/dev/sdc5 |
Source Merge for single-node test |
Latest Src build from git repo |
09/05/2008 |
||
2.6.26-rc9 with latest 15 xattr patches |
x86_64/2 Nodes |
/dev/sdd1 |
Source Merge for multiple-nodes test: |
Latest Src build from git repo |
09/06/2008 |
||
2.6.26-rc9 with latest 15 xattr patches |
x86_64/2 Nodes |
/dev/sdd1 |
Mail out the patches for xattr tests |
Latest Src build from git repo |
09/08/2008 |
||
2.6.26-rc9 with latest 15 xattr patches |
x86_64/2 Nodes |
/dev/sdd1 |
Modify multiple launcher with remote_mount.py support |
Latest Src build from git repo |
09/25/2008 |
||
2.6.26-rc9 with latest 15 xattr patches |
x86_64/2 Nodes |
/dev/sdd1 |
Add multiple_run.sh for all existing multi-nodes testcases |
Latest Src build from git repo |
09/25/2008 |
||
2.6.27-rc3 with xattr patches(Mark's latest mainline kernel) |
x86_64/2 Nodes |
/dev/sdd1 |
Overall tests for xattr with latest xattr testing suite in both single-node and multi-node modes |
Latest Src build from git repo |
10/15/2008 |
||
2.6.27 with xattr patches |
x86_64/2 Nodes |
/dev/sdd1 |
Overall tests for xattr with latest xattr testing suite in both single-node and multi-node modes |
Latest Src build from git repo |
10/20/2008 |
xattr-single-test-gcov-report-081023 |
|
Mark's git tree(git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git merge_window),merge_window branch 2.6.28-rc4 kernel(with v3 xattr patch set) |
x86_64/2 Nodes |
/dev/sdd1 |
Overall tests for xattr with latest xattr testing suite in both single-node and multi-node modes:PASS |
Latest Src build from git repo,applied tiger's v2 mkfs patch |
11/14/2008 |
||
Mark's git tree(git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git merge_window),merge_window branch 2.6.28-rc4 kernel(with v5 acls patch set) |
x86_64/2 Nodes |
/dev/sdd1 |
Latest Src build from git repo,applied tiger's v2 mkfs patch |
11/25/2008 |
|||
Mark's git tree(git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git merge_window),merge_window branch 2.6.28-rc4 kernel(with v3 xattr patch set) |
x86_64/2 Nodes |
/dev/sdd1 |
Additional Func Tests Dev: 4 out of 6 testcases completed |
Latest Src build from git repo,applied tiger's v2 mkfs patch |
12/03/2008 |
||
Mark's git tree(git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git merge_window),merge_window branch 2.6.28-rc7 kernel(with v3 xattr patch set) |
x86_64/2 Nodes |
/dev/sdd1 |
Additional Func Tests Dev: 4 out of 6 testcases completed |
Latest Src build from git repo,applied tiger's v2 mkfs patch |
12/04/2008 |
||
Mark's git tree(git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git merge_window),merge_window branch 2.6.28-rc7 kernel(with v3 xattr patch set) |
x86_64/2 Nodes |
/dev/sdd1 |
Additional Func Tests Dev: 6 out of 6 testcases completed |
Latest Src build from git repo,applied tiger's v2 mkfs patch |
12/05/2008 |
||
Mark's git tree(git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git merge_window),merge_window branch 2.6.28-rc7 kernel(with v3 xattr patch set) |
x86_64/2 Nodes |
/dev/sdd1 |
Inline Data&Xattr Combination Test Dev: 4 out of 4 testcases completed |
Latest Src build from git repo,applied tiger's v2 mkfs patch |
12/08/2008 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git xattr-buckets-2),attr-buckets-2 2.6.28-rc7 kernel(with v4 xattr patch set) |
x86_64/2 Nodes |
/dev/sdd1 |
Thorough Xattr Tests against xattr-buckets-2 branch on joel's tree : Blocked. |
Latest Src build from git repo,applied tiger's v2 mkfs&debugfs patch for xattr support |
12/10/2008 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git xattr-buckets-2),attr-buckets-2 2.6.28-rc7 kernel(with v4 xattr patch set) |
x86_64/2 Nodes |
/dev/sdd1 |
Thorough Xattr Tests against xattr-buckets-2 branch on joel's tree |
Latest Src build from git repo,applied tiger's v2 mkfs&debugfs patch for xattr support |
12/12/2008 |
||
Mark's git tree(git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git merge_window.prev) |
x86_64/2 Nodes |
/dev/sdd1 |
Xattr multi-nodes tests against mark's merge_window.prev branch |
Latest Src build from git repo,applied tiger's v2 mkfs&debugfs patch for xattr support |
12/16/2008 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git xattr-buckets-2) |
x86_64/2 Nodes |
/dev/sde1 |
Thorough tests with both single&multiple node mode against joel's xattr-buckets-2 branch |
Latest Src build from git repo,applied tiger's v2 mkfs&debugfs patch for xattr support |
12/16/2008 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git metaecc) |
x86_64/2 Nodes |
/dev/sde1 |
Thorough tests with both single&multiple node mode against joel's metaecc branch: |
Latest Src tree from metaecc branch,applied tiger's v2 mkfs&debugfs patch for xattr support |
12/17/2008 |
||
Mark's git tree(git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git merge_window |
x86_64/2 Nodes |
/dev/sde1 |
Thorough tests in single-node&multi-nodes mode against Mark's merge_window branch: |
Latest Src tree from metaecc branch,applied tiger's v2 mkfs&debugfs patch for xattr support |
12/19/2008 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git mergefixup |
x86_64/2 Nodes |
/dev/sde1 |
Thorough tests in single node mode against joel's merge-fixup branch: |
Latest Src tree from metaecc branch,applied tiger's v2 mkfs&debugfs patch for xattr support |
12/19/2008 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git mergefixup |
x86_64/2 Nodes |
/dev/sde1 |
Thorough tests in multiple nodes mode against joel's merge-fixup branch: |
Latest Src tree from metaecc branch,applied tiger's v2 mkfs&debugfs patch for xattr support |
12/20/2008 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git mergefixup |
x86_64/2 Nodes |
/dev/sde1 |
Latest Src tree from metaecc branch,applied tiger's v2 mkfs&debugfs patch for xattr support |
1/24/2009 |
|||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git cacheme |
x86_64/2 Nodes |
/dev/sdb1 |
Multi-node tests: All testcases passed |
Latest Src tree from metaecc branch,applied tiger's v2 mkfs&debugfs patch for xattr support |
2/22/2009 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git cacheme |
x86_64/2 Nodes |
/dev/sdb1 |
Single-node&Multi-nodes tests: All testcases passed |
Latest Src tree from metaecc branch,applied tiger's v2 mkfs&debugfs patch for xattr support |
2/26/2009 |
||
Joel's git tree(git://oss.oracle.com/git/jlbec/linux-2.6.git cacheme |
x86_64/2 Nodes |
/dev/sdb1 |
Single-node&Multi-nodes tests: All testcases passed |
Latest Src tree from metaecc branch,applied tiger's v2 mkfs&debugfs patch for xattr support |
3/12/2009 |
Testing Tools
Currently,since I've not got a svn/git repo for source code,I just kept my latest tools src locally on testing nodes,will move to a proper repo soon once get one.
Name |
Script / Program |
Description |
Technology |
#nodes |
Useful? |
What is tested |
xattr_test |
single_xattr_test.c |
These script and c program together help to coordinate xattr test on single node,including feature and stress test. |
Shell,C |
1 |
Yes |
Check basic xattr functionality on ocfs2 on single node,and stress the the test by tuning workload,also emulate a race to perform concurrent operations on xattr between multi-nodes. |
multinode_xattr_test.c |
propagate processes on multiple nodes to take a race for xattr operations on one file |
C,Shell,Openmpi |
2 |
Yes |