jungeun kim
2018-Jan-12  09:17 UTC
[Gluster-users] Reading over than the file size on dispersed volume
Hi All,
I'm using gluster as dispersed volume and I send to ask for very serious
thing.
I have 3 servers and there are 9 bricks.
My volume is like below.
------------------------------------------------------
Volume Name: TEST_VOL
Type: Disperse
Volume ID: be52b68d-ae83-46e3-9527-0e536b867bcc
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x (6 + 3) = 9
Transport-type: tcp
Bricks:
Brick1: server1:/data/brick1
Brick2: server2:/data/brick1
Brick3: server3:/data/brick1
Brick4: server1:/data/brick2
Brick5: server2:/data/brick2
Brick6: server3:/data/brick2
Brick7: server1:/data/brick3
Brick8: server2:/data/brick3
Brick9: server3:/data/brick3
Options Reconfigured:
network.ping-timeout: 10
performance.write-behind: on
features.quota-deem-statfs: on
features.inode-quota: on
features.quota: on
transport.address-family: inet
nfs.disable: on
------------------------------------------------------
I generated the temporary files by various size to test.
But I have found out some files MD5 mismatch after uploading to glusterfs.
e.g
fallocate -l 130352 test1
fallocate -l 2281569280 test2
fallocate -l 667417616 test3
I have to calculate to make MD5 after uploading.
But the total size is different when reading the files to EOF. and MD5 is
different, too.
( I write 42byte header in each files when create the file )
    char buf[128*1024] = {0,};
    offset += 42;
    while ((retr = glfs_pread(fd, (void*)&buf, sizeof(buf), offset, 0)) >
0) {
        DEBUG("retr : %ld, offset : %ld(%d)", retr,offset,errno)    ;
        offset += retr;
        MD5_Update(&context, buf, retr);
    }
    DEBUG("total : %d", offset);
[DEBUG] retr : 130394, offset : 42(0) (star_glusterfs.c:96)
[DEBUG] retr : 1024, offset : 130436(0) (star_glusterfs.c:96)
[DEBUG] retr : 636, offset : 131460(0) (star_glusterfs.c:96)
[DEBUG] total : 132096 (star_glusterfs.c:109)
Why the glfs_pread(or glfs_read) function reads until over than the file
size ?
This is fine on dispersed (4+2) and (8+1) volume but it is happend on (6+3)
or (6+4) or (7+2) disperse volume.
I want to know exact cause.
Thank you.
Regards,
Jenny
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.gluster.org/pipermail/gluster-users/attachments/20180112/ff5effdf/attachment.html>
Jim Kinney
2018-Jan-12  18:13 UTC
[Gluster-users] Reading over than the file size on dispersed volume
On a disperse setup shouldn't the various nodes have different parts of the files and thus the md5sums would be different? On Fri, 2018-01-12 at 18:17 +0900, jungeun kim wrote:> Hi All, > > I'm using gluster as dispersed volume and I send to ask for very > serious thing. > I have 3 servers and there are 9 bricks. > > My volume is like below. > ------------------------------------------------------ > Volume Name: TEST_VOL > Type: Disperse > Volume ID: be52b68d-ae83-46e3-9527-0e536b867bcc > Status: Started > Snapshot Count: 0 > Number of Bricks: 1 x (6 + 3) = 9 > Transport-type: tcp > Bricks: > Brick1: server1:/data/brick1 > Brick2: server2:/data/brick1 > Brick3: server3:/data/brick1 > Brick4: server1:/data/brick2 > Brick5: server2:/data/brick2 > Brick6: server3:/data/brick2 > Brick7: server1:/data/brick3 > Brick8: server2:/data/brick3 > Brick9: server3:/data/brick3 > Options Reconfigured: > network.ping-timeout: 10 > performance.write-behind: on > features.quota-deem-statfs: on > features.inode-quota: on > features.quota: on > transport.address-family: inet > nfs.disable: on > ------------------------------------------------------ > > I generated the temporary files by various size to test. > But I have found out some files MD5 mismatch after uploading to > glusterfs. > > e.g > fallocate -l 130352 test1 > fallocate -l 2281569280 test2 > fallocate -l 667417616 test3 > > I have to calculate to make MD5 after uploading. > But the total size is different when reading the files to EOF. and > MD5 is different, too. > ( I write 42byte header in each files when create the file ) > > > char buf[128*1024] = {0,}; > offset += 42; > while ((retr = glfs_pread(fd, (void*)&buf, sizeof(buf), offset, > 0)) > 0) { > DEBUG("retr : %ld, offset : %ld(%d)", retr,offset,errno) ; > offset += retr; > MD5_Update(&context, buf, retr); > } > > DEBUG("total : %d", offset); > > [DEBUG] retr : 130394, offset : 42(0) (star_glusterfs.c:96) > [DEBUG] retr : 1024, offset : 130436(0) (star_glusterfs.c:96) > [DEBUG] retr : 636, offset : 131460(0) (star_glusterfs.c:96) > [DEBUG] total : 132096 (star_glusterfs.c:109) > > > Why the glfs_pread(or glfs_read) function reads until over than the > file size ? > > This is fine on dispersed (4+2) and (8+1) volume but it is happend on > (6+3) or (6+4) or (7+2) disperse volume. > I want to know exact cause. > Thank you. > > Regards, > > Jenny > > > > _______________________________________________ > Gluster-users mailing list > Gluster-users at gluster.org > http://lists.gluster.org/mailman/listinfo/gluster-users-- James P. Kinney III Every time you stop a school, you will have to build a jail. What you gain at one end you lose at the other. It's like feeding a dog on his own tail. It won't fatten the dog. - Speech 11/23/1900 Mark Twain http://heretothereideas.blogspot.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.gluster.org/pipermail/gluster-users/attachments/20180112/8da71fd2/attachment.html>