diff --git a/src/cache.cpp b/src/cache.cpp index 9dbb768..593760a 100644 --- a/src/cache.cpp +++ b/src/cache.cpp @@ -334,7 +334,7 @@ bool StatCache::IsNoObjectCache(const std::string& key, bool overcheck) return false; } -bool StatCache::AddStat(const std::string& key, headers_t& meta, bool forcedir, bool no_truncate) +bool StatCache::AddStat(const std::string& key, const headers_t& meta, bool forcedir, bool no_truncate) { if(!no_truncate && CacheSize< 1){ return true; @@ -372,7 +372,7 @@ bool StatCache::AddStat(const std::string& key, headers_t& meta, bool forcedir, ent->meta.clear(); SetStatCacheTime(ent->cache_date); // Set time. //copy only some keys - for(headers_t::iterator iter = meta.begin(); iter != meta.end(); ++iter){ + for(headers_t::const_iterator iter = meta.begin(); iter != meta.end(); ++iter){ std::string tag = lower(iter->first); std::string value = iter->second; if(tag == "content-type"){ diff --git a/src/cache.h b/src/cache.h index 3c25174..43798f6 100644 --- a/src/cache.h +++ b/src/cache.h @@ -163,7 +163,7 @@ class StatCache bool AddNoObjectCache(const std::string& key); // Add stat cache - bool AddStat(const std::string& key, headers_t& meta, bool forcedir = false, bool no_truncate = false); + bool AddStat(const std::string& key, const headers_t& meta, bool forcedir = false, bool no_truncate = false); // Update meta stats bool UpdateMetaStats(const std::string& key, headers_t& meta); diff --git a/src/curl.cpp b/src/curl.cpp index cdf29e5..f10e8d1 100644 --- a/src/curl.cpp +++ b/src/curl.cpp @@ -1988,7 +1988,7 @@ bool S3fsCurl::SetUseAhbe(bool ahbe) return old; } -bool S3fsCurl::GetResponseCode(long& responseCode, bool from_curl_handle) +bool S3fsCurl::GetResponseCode(long& responseCode, bool from_curl_handle) const { responseCode = -1; diff --git a/src/curl.h b/src/curl.h index d3f1b0b..173681e 100644 --- a/src/curl.h +++ b/src/curl.h @@ -339,7 +339,7 @@ class S3fsCurl bool GetIAMCredentials(const char* cred_url, const char* iam_v2_token, const char* ibm_secret_access_key, std::string& response); bool GetIAMRoleFromMetaData(const char* cred_url, const char* iam_v2_token, std::string& token); bool AddSseRequestHead(sse_type_t ssetype, const std::string& ssevalue, bool is_only_c, bool is_copy); - bool GetResponseCode(long& responseCode, bool from_curl_handle = true); + bool GetResponseCode(long& responseCode, bool from_curl_handle = true) const; int RequestPerform(bool dontAddAuthHeaders=false); int DeleteRequest(const char* tpath); int GetIAMv2ApiToken(const char* token_url, int token_ttl, const char* token_ttl_hdr, std::string& response); @@ -371,9 +371,9 @@ class S3fsCurl std::string GetSpecialSavedPath() const { return saved_path; } std::string GetUrl() const { return url; } std::string GetOp() const { return op; } - headers_t* GetResponseHeaders() { return &responseHeaders; } - BodyData* GetBodyData() { return &bodydata; } - BodyData* GetHeadData() { return &headdata; } + const headers_t* GetResponseHeaders() const { return &responseHeaders; } + const BodyData* GetBodyData() const { return &bodydata; } + const BodyData* GetHeadData() const { return &headdata; } CURLcode GetCurlCode() const { return curlCode; } long GetLastResponseCode() const { return LastResponseCode; } bool SetUseAhbe(bool ahbe); diff --git a/src/curl_multi.h b/src/curl_multi.h index 003f22c..c2d62da 100644 --- a/src/curl_multi.h +++ b/src/curl_multi.h @@ -62,7 +62,7 @@ class S3fsMultiCurl explicit S3fsMultiCurl(int maxParallelism); ~S3fsMultiCurl(); - int GetMaxParallelism() { return maxParallelism; } + int GetMaxParallelism() const { return maxParallelism; } S3fsMultiSuccessCallback SetSuccessCallback(S3fsMultiSuccessCallback function); S3fsMultiNotFoundCallback SetNotFoundCallback(S3fsMultiNotFoundCallback function); diff --git a/src/curl_util.h b/src/curl_util.h index 5567c1b..9fc6b14 100644 --- a/src/curl_util.h +++ b/src/curl_util.h @@ -28,7 +28,6 @@ class sse_type_t; //---------------------------------------------- // Functions //---------------------------------------------- -std::string GetContentMD5(int fd); struct curl_slist* curl_slist_sort_insert(struct curl_slist* list, const char* data); struct curl_slist* curl_slist_sort_insert(struct curl_slist* list, const char* key, const char* value); struct curl_slist* curl_slist_remove(struct curl_slist* list, const char* key); diff --git a/src/fdcache_entity.cpp b/src/fdcache_entity.cpp index 912a264..c205988 100644 --- a/src/fdcache_entity.cpp +++ b/src/fdcache_entity.cpp @@ -196,7 +196,7 @@ void FdEntity::Clear() // The return value is the same as the class method GetInode(). // The caller must have exclusive control. // -ino_t FdEntity::GetInode() +ino_t FdEntity::GetInode() const { if(cachepath.empty()){ S3FS_PRN_INFO("cache file path is empty, then return inode as 0."); @@ -298,7 +298,7 @@ int FdEntity::OpenPseudoFd(int flags, AutoLock::Type locktype) return pseudo_fd; } -int FdEntity::GetOpenCount(AutoLock::Type locktype) +int FdEntity::GetOpenCount(AutoLock::Type locktype) const { AutoLock auto_lock(&fdent_lock, locktype); @@ -362,7 +362,7 @@ int FdEntity::OpenMirrorFile() return mirrorfd; } -bool FdEntity::FindPseudoFd(int fd, AutoLock::Type locktype) +bool FdEntity::FindPseudoFd(int fd, AutoLock::Type locktype) const { AutoLock auto_lock(&fdent_lock, locktype); @@ -777,7 +777,7 @@ bool FdEntity::IsModified() const return pagelist.IsModified(); } -bool FdEntity::GetStats(struct stat& st, AutoLock::Type locktype) +bool FdEntity::GetStats(struct stat& st, AutoLock::Type locktype) const { AutoLock auto_lock(&fdent_lock, locktype); if(-1 == physical_fd){ @@ -976,7 +976,7 @@ bool FdEntity::ClearHoldingMtime(AutoLock::Type locktype) return true; } -bool FdEntity::GetSize(off_t& size) +bool FdEntity::GetSize(off_t& size) const { AutoLock auto_lock(&fdent_lock); if(-1 == physical_fd){ @@ -988,7 +988,7 @@ bool FdEntity::GetSize(off_t& size) return true; } -bool FdEntity::GetXattr(std::string& xattr) +bool FdEntity::GetXattr(std::string& xattr) const { AutoLock auto_lock(&fdent_lock); @@ -2531,7 +2531,7 @@ bool FdEntity::AddUntreated(off_t start, off_t size) return result; } -bool FdEntity::GetLastUpdateUntreatedPart(off_t& start, off_t& size) +bool FdEntity::GetLastUpdateUntreatedPart(off_t& start, off_t& size) const { // Get last untreated area if(!untreated_list.GetLastUpdatePart(start, size)){ diff --git a/src/fdcache_entity.h b/src/fdcache_entity.h index 110aa92..7a88134 100644 --- a/src/fdcache_entity.h +++ b/src/fdcache_entity.h @@ -49,7 +49,7 @@ class FdEntity static bool mixmultipart; // whether multipart uploading can use copy api. static bool streamupload; // whether stream uploading. - pthread_mutex_t fdent_lock; + mutable pthread_mutex_t fdent_lock; bool is_lock_init; std::string path; // object path int physical_fd; // physical file(cache or temporary file) descriptor @@ -73,7 +73,7 @@ class FdEntity static ino_t GetInode(int fd); void Clear(); - ino_t GetInode(); + ino_t GetInode() const; int OpenMirrorFile(); int NoCacheLoadAndPost(PseudoFdInfo* pseudo_obj, off_t start = 0, off_t size = 0); // size=0 means loading to end PseudoFdInfo* CheckPseudoFdFlags(int fd, bool writable, AutoLock::Type locktype = AutoLock::NONE); @@ -105,12 +105,12 @@ class FdEntity void Close(int fd); bool IsOpen() const { return (-1 != physical_fd); } - bool FindPseudoFd(int fd, AutoLock::Type locktype = AutoLock::NONE); + bool FindPseudoFd(int fd, AutoLock::Type locktype = AutoLock::NONE) const; int Open(const headers_t* pmeta, off_t size, const struct timespec& ts_mctime, int flags, AutoLock::Type type); bool LoadAll(int fd, headers_t* pmeta = NULL, off_t* size = NULL, bool force_load = false); int Dup(int fd, AutoLock::Type locktype = AutoLock::NONE); int OpenPseudoFd(int flags = O_RDONLY, AutoLock::Type locktype = AutoLock::NONE); - int GetOpenCount(AutoLock::Type locktype = AutoLock::NONE); + int GetOpenCount(AutoLock::Type locktype = AutoLock::NONE) const; const char* GetPath() const { return path.c_str(); } bool RenamePath(const std::string& newpath, std::string& fentmapkey); int GetPhysicalFd() const { return physical_fd; } @@ -118,7 +118,7 @@ class FdEntity bool MergeOrgMeta(headers_t& updatemeta); int UploadPending(int fd, AutoLock::Type type); - bool GetStats(struct stat& st, AutoLock::Type locktype = AutoLock::NONE); + bool GetStats(struct stat& st, AutoLock::Type locktype = AutoLock::NONE) const; int SetCtime(struct timespec time, AutoLock::Type locktype = AutoLock::NONE); int SetAtime(struct timespec time, AutoLock::Type locktype = AutoLock::NONE); int SetMCtime(struct timespec mtime, struct timespec ctime, AutoLock::Type locktype = AutoLock::NONE); @@ -128,8 +128,8 @@ class FdEntity bool UpdateMCtime(); bool SetHoldingMtime(struct timespec mtime, AutoLock::Type locktype = AutoLock::NONE); bool ClearHoldingMtime(AutoLock::Type locktype = AutoLock::NONE); - bool GetSize(off_t& size); - bool GetXattr(std::string& xattr); + bool GetSize(off_t& size) const; + bool GetXattr(std::string& xattr) const; bool SetXattr(const std::string& xattr); bool SetMode(mode_t mode); bool SetUId(uid_t uid); @@ -150,7 +150,7 @@ class FdEntity void MarkDirtyNewFile(); - bool GetLastUpdateUntreatedPart(off_t& start, off_t& size); + bool GetLastUpdateUntreatedPart(off_t& start, off_t& size) const; bool ReplaceLastUpdateUntreatedPart(off_t front_start, off_t front_size, off_t behind_start, off_t behind_size); }; diff --git a/src/fdcache_fdinfo.cpp b/src/fdcache_fdinfo.cpp index c006358..42e30b0 100644 --- a/src/fdcache_fdinfo.cpp +++ b/src/fdcache_fdinfo.cpp @@ -302,7 +302,7 @@ bool PseudoFdInfo::GetUploadId(std::string& id) const return true; } -bool PseudoFdInfo::GetEtaglist(etaglist_t& list) +bool PseudoFdInfo::GetEtaglist(etaglist_t& list) const { if(!IsUploading()){ S3FS_PRN_ERR("Multipart Upload has not started yet."); diff --git a/src/fdcache_fdinfo.h b/src/fdcache_fdinfo.h index 34a6538..d0ce8f4 100644 --- a/src/fdcache_fdinfo.h +++ b/src/fdcache_fdinfo.h @@ -66,7 +66,7 @@ class PseudoFdInfo filepart_list_t upload_list; petagpool etag_entities; // list of etag string and part number entities(to maintain the etag entity even if MPPART_INFO is destroyed) bool is_lock_init; - pthread_mutex_t upload_list_lock; // protects upload_id and upload_list + mutable pthread_mutex_t upload_list_lock; // protects upload_id and upload_list Semaphore uploaded_sem; // use a semaphore to trigger an upload completion like event flag volatile int instruct_count; // number of instructions for processing by threads volatile int completed_count; // number of completed processes by thread @@ -103,7 +103,7 @@ class PseudoFdInfo bool IsUploading() const { return !upload_id.empty(); } bool GetUploadId(std::string& id) const; - bool GetEtaglist(etaglist_t& list); + bool GetEtaglist(etaglist_t& list) const; bool AppendUploadPart(off_t start, off_t size, bool is_copy = false, etagpair** ppetag = NULL); diff --git a/src/fdcache_untreated.cpp b/src/fdcache_untreated.cpp index c8ac6ee..b646a8c 100644 --- a/src/fdcache_untreated.cpp +++ b/src/fdcache_untreated.cpp @@ -99,7 +99,7 @@ bool UntreatedParts::AddPart(off_t start, off_t size) return true; } -bool UntreatedParts::RowGetPart(off_t& start, off_t& size, off_t max_size, off_t min_size, bool lastpart) +bool UntreatedParts::RowGetPart(off_t& start, off_t& size, off_t max_size, off_t min_size, bool lastpart) const { if(max_size <= 0 || min_size < 0 || max_size < min_size){ S3FS_PRN_ERR("Paramter are wrong(max_size=%lld, min_size=%lld).", static_cast(max_size), static_cast(min_size)); @@ -108,7 +108,7 @@ bool UntreatedParts::RowGetPart(off_t& start, off_t& size, off_t max_size, off_t AutoLock auto_lock(&untreated_list_lock); // Check the overlap with the existing part and add the part. - for(untreated_list_t::iterator iter = untreated_list.begin(); iter != untreated_list.end(); ++iter){ + for(untreated_list_t::const_iterator iter = untreated_list.begin(); iter != untreated_list.end(); ++iter){ if(!lastpart || iter->untreated_tag == last_tag){ if(min_size <= iter->size){ if(iter->size <= max_size){ @@ -191,7 +191,7 @@ bool UntreatedParts::ClearParts(off_t start, off_t size) // // Update the last updated Untreated part // -bool UntreatedParts::GetLastUpdatePart(off_t& start, off_t& size) +bool UntreatedParts::GetLastUpdatePart(off_t& start, off_t& size) const { AutoLock auto_lock(&untreated_list_lock); diff --git a/src/fdcache_untreated.h b/src/fdcache_untreated.h index 3704953..355c02e 100644 --- a/src/fdcache_untreated.h +++ b/src/fdcache_untreated.h @@ -30,14 +30,14 @@ class UntreatedParts { private: - pthread_mutex_t untreated_list_lock; // protects untreated_list + mutable pthread_mutex_t untreated_list_lock; // protects untreated_list bool is_lock_init; untreated_list_t untreated_list; long last_tag; // [NOTE] Use this to identify the latest updated part. private: - bool RowGetPart(off_t& start, off_t& size, off_t max_size, off_t min_size, bool lastpart); + bool RowGetPart(off_t& start, off_t& size, off_t max_size, off_t min_size, bool lastpart) const; public: UntreatedParts(); @@ -46,12 +46,12 @@ class UntreatedParts bool empty(); bool AddPart(off_t start, off_t size); - bool GetLastUpdatedPart(off_t& start, off_t& size, off_t max_size, off_t min_size = MIN_MULTIPART_SIZE) { return RowGetPart(start, size, max_size, min_size, true); } + bool GetLastUpdatedPart(off_t& start, off_t& size, off_t max_size, off_t min_size = MIN_MULTIPART_SIZE) const { return RowGetPart(start, size, max_size, min_size, true); } bool ClearParts(off_t start, off_t size); bool ClearAll() { return ClearParts(0, 0); } - bool GetLastUpdatePart(off_t& start, off_t& size); + bool GetLastUpdatePart(off_t& start, off_t& size) const; bool ReplaceLastUpdatePart(off_t start, off_t size); bool RemoveLastUpdatePart(); diff --git a/src/s3fs.cpp b/src/s3fs.cpp index 170ea6f..e9141df 100644 --- a/src/s3fs.cpp +++ b/src/s3fs.cpp @@ -3112,7 +3112,7 @@ static int list_bucket(const char* path, S3ObjList& head, const char* delimiter, S3FS_PRN_ERR("ListBucketRequest returns with error."); return result; } - BodyData* body = s3fscurl.GetBodyData(); + const BodyData* body = s3fscurl.GetBodyData(); // xmlDocPtr if(NULL == (doc = xmlReadMemory(body->str(), static_cast(body->size()), "", NULL, 0))){ @@ -4037,7 +4037,7 @@ static int s3fs_check_service() if(300 <= responseCode && responseCode < 500){ // check region error(for putting message or retrying) - BodyData* body = s3fscurl.GetBodyData(); + const BodyData* body = s3fscurl.GetBodyData(); std::string expectregion; std::string expectendpoint; if(check_region_error(body->str(), body->size(), expectregion)){ diff --git a/src/s3fs_cred.cpp b/src/s3fs_cred.cpp index 0b592d0..78281c4 100644 --- a/src/s3fs_cred.cpp +++ b/src/s3fs_cred.cpp @@ -285,7 +285,7 @@ bool S3fsCred::SetAccessKeyWithSessionToken(const char* AccessKeyId, const char* return true; } -bool S3fsCred::IsSetAccessKeys(AutoLock::Type type) +bool S3fsCred::IsSetAccessKeys(AutoLock::Type type) const { AutoLock auto_lock(&token_lock, type); @@ -321,14 +321,14 @@ bool S3fsCred::SetIAMRole(const char* role, AutoLock::Type type) return true; } -std::string S3fsCred::GetIAMRole(AutoLock::Type type) +std::string S3fsCred::GetIAMRole(AutoLock::Type type) const { AutoLock auto_lock(&token_lock, type); return IAM_role; } -bool S3fsCred::IsSetIAMRole(AutoLock::Type type) +bool S3fsCred::IsSetIAMRole(AutoLock::Type type) const { AutoLock auto_lock(&token_lock, type); @@ -435,7 +435,7 @@ int S3fsCred::SetIMDSVersion(int version, AutoLock::Type type) return old; } -int S3fsCred::GetIMDSVersion(AutoLock::Type type) +int S3fsCred::GetIMDSVersion(AutoLock::Type type) const { AutoLock auto_lock(&token_lock, type); @@ -455,7 +455,7 @@ bool S3fsCred::SetIAMv2APIToken(const std::string& token, AutoLock::Type type) return true; } -std::string S3fsCred::GetIAMv2APIToken(AutoLock::Type type) +std::string S3fsCred::GetIAMv2APIToken(AutoLock::Type type) const { AutoLock auto_lock(&token_lock, type); @@ -596,7 +596,7 @@ bool S3fsCred::SetIAMRoleFromMetaData(const char* response, AutoLock::Type type) // // Check passwd file readable // -bool S3fsCred::IsReadableS3fsPasswdFile() +bool S3fsCred::IsReadableS3fsPasswdFile() const { if(passwd_file.empty()){ return false; diff --git a/src/s3fs_cred.h b/src/s3fs_cred.h index 32983cc..43e9b76 100644 --- a/src/s3fs_cred.h +++ b/src/s3fs_cred.h @@ -53,7 +53,7 @@ class S3fsCred static std::string bucket_name; - pthread_mutex_t token_lock; + mutable pthread_mutex_t token_lock; bool is_lock_init; std::string passwd_file; @@ -104,7 +104,7 @@ class S3fsCred bool SetAccessKey(const char* AccessKeyId, const char* SecretAccessKey, AutoLock::Type type); bool SetAccessKeyWithSessionToken(const char* AccessKeyId, const char* SecretAccessKey, const char * SessionToken, AutoLock::Type type); - bool IsSetAccessKeys(AutoLock::Type type); + bool IsSetAccessKeys(AutoLock::Type type) const; bool SetIsECS(bool flag); bool SetIsUseSessionToken(bool flag); @@ -112,20 +112,20 @@ class S3fsCred bool SetIsIBMIAMAuth(bool flag); int SetIMDSVersion(int version, AutoLock::Type type); - int GetIMDSVersion(AutoLock::Type type); + int GetIMDSVersion(AutoLock::Type type) const; bool SetIAMv2APIToken(const std::string& token, AutoLock::Type type); - std::string GetIAMv2APIToken(AutoLock::Type type); + std::string GetIAMv2APIToken(AutoLock::Type type) const; bool SetIAMRole(const char* role, AutoLock::Type type); - std::string GetIAMRole(AutoLock::Type type); - bool IsSetIAMRole(AutoLock::Type type); + std::string GetIAMRole(AutoLock::Type type) const; + bool IsSetIAMRole(AutoLock::Type type) const; size_t SetIAMFieldCount(size_t field_count); std::string SetIAMCredentialsURL(const char* url); std::string SetIAMTokenField(const char* token_field); std::string SetIAMExpiryField(const char* expiry_field); - bool IsReadableS3fsPasswdFile(); + bool IsReadableS3fsPasswdFile() const; bool CheckS3fsPasswdFilePerms(); bool ParseS3fsPasswdFile(bucketkvmap_t& resmap); bool ReadS3fsPasswdFile(AutoLock::Type type); diff --git a/src/threadpoolman.cpp b/src/threadpoolman.cpp index 1696e6c..a4a0142 100644 --- a/src/threadpoolman.cpp +++ b/src/threadpoolman.cpp @@ -177,7 +177,7 @@ ThreadPoolMan::~ThreadPoolMan() } } -bool ThreadPoolMan::IsExit() +bool ThreadPoolMan::IsExit() const { AutoLock auto_lock(&thread_exit_flag_lock); return is_exit; diff --git a/src/threadpoolman.h b/src/threadpoolman.h index fdd3a3d..4a00551 100644 --- a/src/threadpoolman.h +++ b/src/threadpoolman.h @@ -70,7 +70,7 @@ class ThreadPoolMan thpoolman_params_t instruction_list; bool is_exit_flag_init; - pthread_mutex_t thread_exit_flag_lock; + mutable pthread_mutex_t thread_exit_flag_lock; private: static void* Worker(void* arg); @@ -78,7 +78,7 @@ class ThreadPoolMan explicit ThreadPoolMan(int count = 1); ~ThreadPoolMan(); - bool IsExit(); + bool IsExit() const; void SetExitFlag(bool exit_flag); bool StopThreads();