22from qcloud_cos import CosS3Client
33import sys
44import logging
5- import hashlib
65import crcmod
76import os
7+ import subprocess
88
99logging .basicConfig (level = logging .ERROR , stream = sys .stdout )
1010
1111cos_client = None
12+ run_dir = ""
1213
1314
14- def init_cos_client (region , bucket_name ):
15+ def init_cos_client (region , bucket_name , mnt_point ):
1516 global cos_client
17+ global run_dir
1618 secret_id = ''
1719 secret_key = ''
1820 with open ('/etc/passwd-cosfs' ) as fl :
@@ -21,12 +23,15 @@ def init_cos_client(region, bucket_name):
2123 parts = line .split (":" )
2224 if len (parts ) < 3 :
2325 raise ValueError ("unexpected secret info in /etc/passwd-cosfs" )
24- secret_id = parts [1 ]
25- secret_key = parts [2 ]
26+ secret_id = parts [1 ]. strip ()
27+ secret_key = parts [2 ]. strip ()
2628 if len (region ) == 0 or len (secret_id ) == 0 or len (secret_key ) == 0 :
2729 raise ValueError ("Unexpected region or secret_id or secret_key" )
30+ print ("init cos client" )
2831 config = CosConfig (Region = region , SecretId = secret_id , SecretKey = secret_key , Token = None , Scheme = 'http' )
2932 cos_client = CosS3Client (config )
33+ run_dir = os .path .dirname (os .path .normpath (mnt_point ))
34+ print ("run_dir:" + run_dir )
3035
3136
3237def get_cos_file_crc64 (bucket , key ):
@@ -36,13 +41,34 @@ def get_cos_file_crc64(bucket, key):
3641 return str (c64 (body ))
3742
3843
44+ def get_local_file_crc64 (file_path ):
45+ result = subprocess .run ([os .path .join (run_dir , "coscli-linux" ), '-c' ,
46+ os .path .join (run_dir , 'test/cos.yaml' ), 'hash' , file_path ],
47+ stdout = subprocess .PIPE )
48+ return str (result .stdout ).split (':' )[- 1 ].strip ("'n\\ " )
49+
50+
3951def verify_file_checksum_length_with_local (bucket , key , local_file_path ):
4052 object_attr = cos_client .head_object (Bucket = bucket , Key = key )
41- c64 = crcmod .mkCrcFun (0x142F0E1EBA9EA3693 , initCrc = 0 , xorOut = 0xffffffffffffffff , rev = True )
53+ test_crc64 = crcmod .Crc (0x142F0E1EBA9EA3693 , initCrc = 0 , xorOut = 0xffffffffffffffff , rev = True )
54+ # c64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693, initCrc=0, xorOut=0xffffffffffffffff, rev=True)
4255 cos_len = int (object_attr ['Content-Length' ])
4356 cos_crc64 = object_attr ['x-cos-hash-crc64ecma' ]
4457 local_len = os .stat (local_file_path ).st_size
45- local_crc64 = str (c64 (open (local_file_path , 'rb' ).read ()))
58+ # read_bytes = 0
59+ # buffer_size = 128 * 1024
60+ # with open(local_file_path, 'rb') as fl:
61+ # byte_array = fl.read(buffer_size)
62+ # read_bytes = read_bytes + len(byte_array)
63+ # while len(byte_array) > 0:
64+ # test_crc64.update(byte_array)
65+ # byte_array = fl.read(buffer_size)
66+ # read_bytes = read_bytes + len(byte_array)
67+ # if read_bytes % (100 * 1024 * 1024) == 0:
68+ # print('read bytes ' + str(read_bytes))
69+ local_crc64 = get_local_file_crc64 (local_file_path )
70+ # local_crc64 = str(int(test_crc64.hexdigest(), 16))
71+ # local_crc64 = str(c64(open(local_file_path, 'rb').read()))
4672 if local_len > 0 and cos_crc64 == '' :
4773 cos_crc64 = get_cos_file_crc64 (bucket , key )
4874 print ('key' + key + " cos crc64:" + cos_crc64 )
@@ -63,4 +89,4 @@ def verify_file_checksum_length(bucket, key, local_len, local_crc64):
6389 if cos_len != local_len or (cos_len != 0 and cos_crc64 != local_crc64 ):
6490 raise ValueError ('file diff, local len:' + str (local_len ) +
6591 ', crc64:' + local_crc64 + '; cos file:' + key + ', len:' + str (cos_len ) +
66- ', crc64:' + cos_crc64 )
92+ ', crc64:' + cos_crc64 )
0 commit comments