mirror of
https://github.com/s3fs-fuse/s3fs-fuse.git
synced 2024-11-19 10:45:12 +00:00
commit
9237d07226
2
README
2
README
@ -61,7 +61,7 @@ Known Issues:
|
|||||||
-------------
|
-------------
|
||||||
s3fs should be working fine with S3 storage. However, There are couple of limitations:
|
s3fs should be working fine with S3 storage. However, There are couple of limitations:
|
||||||
|
|
||||||
* Currently s3fs could hang the CPU if you have lots of time-outs. This is *NOT* a fault of s3fs but rather libcurl. This happends when you try to copy thousands of files in 1 session, it doesn't happend when you upload hundreds of files or less.
|
* Currently s3fs could hang the CPU if you have lots of time-outs. This is *NOT* a fault of s3fs but rather libcurl. This happens when you try to copy thousands of files in 1 session, it doesn't happen when you upload hundreds of files or less.
|
||||||
* CentOS 4.x/RHEL 4.x users - if you use the kernel that shipped with your distribution and didn't upgrade to the latest kernel RedHat/CentOS gives, you might have a problem loading the "fuse" kernel. Please upgrade to the latest kernel (2.6.16 or above) and make sure "fuse" kernel module is compiled and loadable since FUSE requires this kernel module and s3fs requires it as well.
|
* CentOS 4.x/RHEL 4.x users - if you use the kernel that shipped with your distribution and didn't upgrade to the latest kernel RedHat/CentOS gives, you might have a problem loading the "fuse" kernel. Please upgrade to the latest kernel (2.6.16 or above) and make sure "fuse" kernel module is compiled and loadable since FUSE requires this kernel module and s3fs requires it as well.
|
||||||
* Moving/renaming/erasing files takes time since the whole file needs to be accessed first. A workaround could be to use s3fs's cache support with the use_cache option.
|
* Moving/renaming/erasing files takes time since the whole file needs to be accessed first. A workaround could be to use s3fs's cache support with the use_cache option.
|
||||||
|
|
||||||
|
12
src/curl.cpp
12
src/curl.cpp
@ -529,7 +529,7 @@ bool S3fsCurl::LocateBundle(void)
|
|||||||
if(0 == S3fsCurl::curl_ca_bundle.size()){
|
if(0 == S3fsCurl::curl_ca_bundle.size()){
|
||||||
CURL_CA_BUNDLE = getenv("CURL_CA_BUNDLE");
|
CURL_CA_BUNDLE = getenv("CURL_CA_BUNDLE");
|
||||||
if(CURL_CA_BUNDLE != NULL) {
|
if(CURL_CA_BUNDLE != NULL) {
|
||||||
// check for existance and readability of the file
|
// check for existence and readability of the file
|
||||||
ifstream BF(CURL_CA_BUNDLE);
|
ifstream BF(CURL_CA_BUNDLE);
|
||||||
if(!BF.good()){
|
if(!BF.good()){
|
||||||
DPRN("%s: file specified by CURL_CA_BUNDLE environment variable is not readable", program_name.c_str());
|
DPRN("%s: file specified by CURL_CA_BUNDLE environment variable is not readable", program_name.c_str());
|
||||||
@ -1904,7 +1904,7 @@ int S3fsCurl::GetIAMCredentials(void)
|
|||||||
|
|
||||||
// analizing response
|
// analizing response
|
||||||
if(0 == result && !S3fsCurl::SetIAMCredentials(bodydata->str())){
|
if(0 == result && !S3fsCurl::SetIAMCredentials(bodydata->str())){
|
||||||
DPRN("Something error occured, could not get IAM credential.");
|
DPRN("Something error occurred, could not get IAM credential.");
|
||||||
}
|
}
|
||||||
delete bodydata;
|
delete bodydata;
|
||||||
bodydata = NULL;
|
bodydata = NULL;
|
||||||
@ -3473,11 +3473,11 @@ bool AdditionalHeader::AddHeader(headers_t& meta, const char* path) const
|
|||||||
}
|
}
|
||||||
int nPathLen = strlen(path);
|
int nPathLen = strlen(path);
|
||||||
for(charcnt_list_t::const_iterator iter = charcntlist.begin(); iter != charcntlist.end(); ++iter){
|
for(charcnt_list_t::const_iterator iter = charcntlist.begin(); iter != charcntlist.end(); ++iter){
|
||||||
// get target charactor count
|
// get target character count
|
||||||
if(nPathLen < (*iter)){
|
if(nPathLen < (*iter)){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// make target suffix(same charactor count) & find
|
// make target suffix(same character count) & find
|
||||||
string suffix(&path[nPathLen - (*iter)]);
|
string suffix(&path[nPathLen - (*iter)]);
|
||||||
if(addheader.end() == addheader.find(suffix)){
|
if(addheader.end() == addheader.find(suffix)){
|
||||||
continue;
|
continue;
|
||||||
@ -3512,9 +3512,9 @@ bool AdditionalHeader::Dump(void) const
|
|||||||
if(!foreground2){
|
if(!foreground2){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// charactor count list
|
// character count list
|
||||||
stringstream ssdbg;
|
stringstream ssdbg;
|
||||||
ssdbg << "Charactor count list[" << charcntlist.size() << "] = {";
|
ssdbg << "Character count list[" << charcntlist.size() << "] = {";
|
||||||
for(charcnt_list_t::const_iterator citer = charcntlist.begin(); citer != charcntlist.end(); ++citer){
|
for(charcnt_list_t::const_iterator citer = charcntlist.begin(); citer != charcntlist.end(); ++citer){
|
||||||
ssdbg << " " << (*citer);
|
ssdbg << " " << (*citer);
|
||||||
}
|
}
|
||||||
|
@ -351,7 +351,7 @@ class S3fsCurl
|
|||||||
//
|
//
|
||||||
typedef std::map<CURL*, S3fsCurl*> s3fscurlmap_t;
|
typedef std::map<CURL*, S3fsCurl*> s3fscurlmap_t;
|
||||||
typedef bool (*S3fsMultiSuccessCallback)(S3fsCurl* s3fscurl); // callback for succeed multi request
|
typedef bool (*S3fsMultiSuccessCallback)(S3fsCurl* s3fscurl); // callback for succeed multi request
|
||||||
typedef S3fsCurl* (*S3fsMultiRetryCallback)(S3fsCurl* s3fscurl); // callback for failuer and retrying
|
typedef S3fsCurl* (*S3fsMultiRetryCallback)(S3fsCurl* s3fscurl); // callback for failure and retrying
|
||||||
|
|
||||||
class S3fsMultiCurl
|
class S3fsMultiCurl
|
||||||
{
|
{
|
||||||
|
@ -131,7 +131,7 @@ static void s3fs_destroy_dyn_crypt_mutex(struct CRYPTO_dynlock_value* dyndata, c
|
|||||||
bool s3fs_init_crypt_mutex(void)
|
bool s3fs_init_crypt_mutex(void)
|
||||||
{
|
{
|
||||||
if(s3fs_crypt_mutex){
|
if(s3fs_crypt_mutex){
|
||||||
FPRNNN("s3fs_crypt_mutex is not NULL, destory it.");
|
FPRNNN("s3fs_crypt_mutex is not NULL, destroy it.");
|
||||||
if(!s3fs_destroy_crypt_mutex()){
|
if(!s3fs_destroy_crypt_mutex()){
|
||||||
DPRN("Failed to s3fs_crypt_mutex");
|
DPRN("Failed to s3fs_crypt_mutex");
|
||||||
return false;
|
return false;
|
||||||
|
16
src/s3fs.cpp
16
src/s3fs.cpp
@ -2040,7 +2040,7 @@ static int s3fs_release(const char* path, struct fuse_file_info* fi)
|
|||||||
|
|
||||||
// [NOTICE]
|
// [NOTICE]
|
||||||
// At first, we remove stats cache.
|
// At first, we remove stats cache.
|
||||||
// Because fuse does not wait for responce from "release" function. :-(
|
// Because fuse does not wait for response from "release" function. :-(
|
||||||
// And fuse runs next command before this function returns.
|
// And fuse runs next command before this function returns.
|
||||||
// Thus we call deleting stats function ASSAP.
|
// Thus we call deleting stats function ASSAP.
|
||||||
//
|
//
|
||||||
@ -2562,7 +2562,7 @@ static bool is_truncated(xmlDocPtr doc)
|
|||||||
|
|
||||||
// return: the pointer to object name on allocated memory.
|
// return: the pointer to object name on allocated memory.
|
||||||
// the pointer to "c_strErrorObjectName".(not allocated)
|
// the pointer to "c_strErrorObjectName".(not allocated)
|
||||||
// NULL(a case of something error occured)
|
// NULL(a case of something error occurred)
|
||||||
static char* get_object_name(xmlDocPtr doc, xmlNodePtr node, const char* path)
|
static char* get_object_name(xmlDocPtr doc, xmlNodePtr node, const char* path)
|
||||||
{
|
{
|
||||||
// Get full path
|
// Get full path
|
||||||
@ -2688,7 +2688,7 @@ static void s3fs_destroy(void*)
|
|||||||
{
|
{
|
||||||
DPRN("destroy");
|
DPRN("destroy");
|
||||||
|
|
||||||
// Destory curl
|
// Destroy curl
|
||||||
if(!S3fsCurl::DestroyS3fsCurl()){
|
if(!S3fsCurl::DestroyS3fsCurl()){
|
||||||
DPRN("Could not release curl library.");
|
DPRN("Could not release curl library.");
|
||||||
}
|
}
|
||||||
@ -2929,14 +2929,14 @@ static int s3fs_utility_mode(void)
|
|||||||
|
|
||||||
xmlDocPtr doc;
|
xmlDocPtr doc;
|
||||||
if(NULL == (doc = xmlReadMemory(body.c_str(), static_cast<int>(body.size()), "", NULL, 0))){
|
if(NULL == (doc = xmlReadMemory(body.c_str(), static_cast<int>(body.size()), "", NULL, 0))){
|
||||||
DPRN("xmlReadMemory returns with error.");
|
DPRN("xmlReadMemory exited with error.");
|
||||||
result = EXIT_FAILURE;
|
result = EXIT_FAILURE;
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
// make working uploads list
|
// make working uploads list
|
||||||
uncomp_mp_list_t list;
|
uncomp_mp_list_t list;
|
||||||
if(!get_uncomp_mp_list(doc, list)){
|
if(!get_uncomp_mp_list(doc, list)){
|
||||||
DPRN("get_uncomp_mp_list returns with error.");
|
DPRN("get_uncomp_mp_list exited with error.");
|
||||||
result = EXIT_FAILURE;
|
result = EXIT_FAILURE;
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
@ -2944,7 +2944,7 @@ static int s3fs_utility_mode(void)
|
|||||||
print_uncomp_mp_list(list);
|
print_uncomp_mp_list(list);
|
||||||
// remove
|
// remove
|
||||||
if(!abort_uncomp_mp_list(list)){
|
if(!abort_uncomp_mp_list(list)){
|
||||||
DPRN("something error occured in removing process.");
|
DPRN("an error occurred during removal process.");
|
||||||
result = EXIT_FAILURE;
|
result = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2952,7 +2952,7 @@ static int s3fs_utility_mode(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destory curl
|
// Destroy curl
|
||||||
if(!S3fsCurl::DestroyS3fsCurl()){
|
if(!S3fsCurl::DestroyS3fsCurl()){
|
||||||
DPRN("Could not release curl library.");
|
DPRN("Could not release curl library.");
|
||||||
}
|
}
|
||||||
@ -3900,7 +3900,7 @@ int main(int argc, char* argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// error checking of command line arguments for compatability
|
// error checking of command line arguments for compatibility
|
||||||
if(S3fsCurl::IsPublicBucket() && S3fsCurl::IsSetAccessKeyId()){
|
if(S3fsCurl::IsPublicBucket() && S3fsCurl::IsSetAccessKeyId()){
|
||||||
fprintf(stderr, "%s: specifying both public_bucket and the access keys options is invalid\n",
|
fprintf(stderr, "%s: specifying both public_bucket and the access keys options is invalid\n",
|
||||||
program_name.c_str());
|
program_name.c_str());
|
||||||
|
@ -496,9 +496,9 @@ string get_username(uid_t uid)
|
|||||||
DPRNCRIT("failed to allocate memory.");
|
DPRNCRIT("failed to allocate memory.");
|
||||||
return string("");
|
return string("");
|
||||||
}
|
}
|
||||||
// get group infomation
|
// get group information
|
||||||
if(0 != (result = getpwuid_r(uid, &pwinfo, pbuf, maxlen, &ppwinfo))){
|
if(0 != (result = getpwuid_r(uid, &pwinfo, pbuf, maxlen, &ppwinfo))){
|
||||||
DPRNNN("could not get pw infomation.");
|
DPRNNN("could not get pw information.");
|
||||||
free(pbuf);
|
free(pbuf);
|
||||||
return string("");
|
return string("");
|
||||||
}
|
}
|
||||||
@ -532,9 +532,9 @@ int is_uid_inculde_group(uid_t uid, gid_t gid)
|
|||||||
DPRNCRIT("failed to allocate memory.");
|
DPRNCRIT("failed to allocate memory.");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
// get group infomation
|
// get group information
|
||||||
if(0 != (result = getgrgid_r(gid, &ginfo, pbuf, maxlen, &pginfo))){
|
if(0 != (result = getgrgid_r(gid, &ginfo, pbuf, maxlen, &pginfo))){
|
||||||
DPRNNN("could not get group infomation.");
|
DPRNNN("could not get group information.");
|
||||||
free(pbuf);
|
free(pbuf);
|
||||||
return -result;
|
return -result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user