greenplumn s3conf 源码
greenplumn s3conf 代码
文件路径:/gpcontrib/gpcloud/src/s3conf.cpp
#include "s3conf.h"
#include "s3macros.h"
#include "s3params.h"
#include <arpa/inet.h>
#ifndef S3_STANDALONE
extern "C" {
void write_log(const char* fmt, ...) __attribute__((format(printf, 1, 2)));
}
#endif
// For GpIdentity
#ifndef S3_STANDALONE
extern "C" {
#include "c.h"
#include "cdb/cdbvars.h"
extern int getgpsegmentCount(void);
extern char *DataDir;
}
#endif
// configurable parameters
int32_t s3ext_segid = -1;
int32_t s3ext_segnum = -1;
string s3ext_logserverhost;
int32_t s3ext_loglevel = EXT_WARNING;
int32_t s3ext_logtype = INTERNAL_LOG;
int32_t s3ext_logserverport = -1;
int32_t s3ext_logsock_udp = -1;
struct sockaddr_in s3ext_logserveraddr;
S3Params InitConfig(const string& urlWithOptions) {
#ifdef S3_STANDALONE
s3ext_segid = 0;
s3ext_segnum = 1;
#else
s3ext_segid = GpIdentity.segindex;
s3ext_segnum = getgpsegmentCount();
#endif
if (s3ext_segid == -1 && s3ext_segnum > 0) {
s3ext_segid = 0;
s3ext_segnum = 1;
}
string urlWithOptionsProcessed = ReplaceNewlineWithSpace(urlWithOptions);
string sourceUrl = TruncateOptions(urlWithOptionsProcessed);
S3_CHECK_OR_DIE(!sourceUrl.empty(), S3RuntimeError, "URL not found from location string");
string httpUrl = GetOptS3(urlWithOptionsProcessed, "config_server");
string configPath = GetOptS3(urlWithOptionsProcessed, "config");
if (configPath.empty()) {
S3WARN("The 'config' parameter is not provided, use default value 's3/s3.conf'.");
configPath = "s3/s3.conf";
}
string configSection = GetOptS3(urlWithOptionsProcessed, "section");
if (configSection.empty()) {
configSection = "default";
}
// region could be empty
string urlRegion = GetOptS3(urlWithOptionsProcessed, "region");
// read configurations from file
#if !defined(S3_STANDALONE)
Config s3Cfg(configPath, httpUrl, DataDir);
#else
Config s3Cfg(configPath);
#endif
S3_CHECK_OR_DIE(s3Cfg.Handle() != NULL, S3RuntimeError,
"Failed to parse config file '" + configPath + "', or it doesn't exist(or http failed)");
S3_CHECK_OR_DIE(s3Cfg.SectionExist(configSection), S3ConfigError,
"Selected section '" + configSection +
"' does not exist, please check your configuration file",
configSection);
bool useHttps = s3Cfg.GetBool(configSection, "encryption", "true");
string version = s3Cfg.Get(configSection, "version", "");
S3Params params(sourceUrl, useHttps, version, urlRegion);
string content = s3Cfg.Get(configSection, "loglevel", "WARNING");
s3ext_loglevel = getLogLevel(content.c_str());
content = s3Cfg.Get(configSection, "logtype", "INTERNAL");
s3ext_logtype = getLogType(content.c_str());
params.setDebugCurl(s3Cfg.GetBool(configSection, "debug_curl", "false"));
string accessId = s3Cfg.Get(configSection, "accessid", "");
string secret = s3Cfg.Get(configSection, "secret", "");
if(accessId.empty() && secret.empty())
{
S3WARN("Both accessid and secret are empty in s3 config file, try to read default aws credentials.");
GetAwsProfileInfo(configSection, accessId, secret);
}
params.setCred(accessId, secret, s3Cfg.Get(configSection, "token", ""));
s3ext_logserverhost = s3Cfg.Get(configSection, "logserverhost", "127.0.0.1");
s3ext_logserverport = s3Cfg.SafeScan("logserverport", configSection, 1111, 1, 65535);
int64_t numOfChunks = s3Cfg.SafeScan("threadnum", configSection, 4, 1, 8);
params.setNumOfChunks(numOfChunks);
int64_t chunkSize = s3Cfg.SafeScan("chunksize", configSection, 64 * 1024 * 1024,
8 * 1024 * 1024, 128 * 1024 * 1024);
params.setChunkSize(chunkSize);
int64_t lowSpeedLimit = s3Cfg.SafeScan("low_speed_limit", configSection, 10240, 0, INT_MAX);
params.setLowSpeedLimit(lowSpeedLimit);
int64_t lowSpeedTime = s3Cfg.SafeScan("low_speed_time", configSection, 60, 0, INT_MAX);
params.setLowSpeedTime(lowSpeedTime);
params.setProxy(s3Cfg.Get(configSection, "proxy", ""));
params.setAutoCompress(s3Cfg.GetBool(configSection, "autocompress", "true"));
params.setVerifyCert(s3Cfg.GetBool(configSection, "verifycert", "true"));
string sse_type = s3Cfg.Get(configSection, "server_side_encryption", "");
if (sse_type == "sse-s3") {
params.setSSEType(SSE_S3);
} else {
params.setSSEType(SSE_NONE);
}
params.setGpcheckcloud_newline(s3Cfg.Get(configSection, "gpcheckcloud_newline", "\n"));
CheckEssentialConfig(params);
return params;
}
void GetAwsProfileInfo(const string configSection, string& accessId, string& secret)
{
string home(getenv("HOME"));
string configPath = home + "/.aws/credentials";
Config awsCfg(configPath);
S3_CHECK_OR_DIE(awsCfg.Handle() != NULL, S3RuntimeError,
"Failed to parse aws credentials file '" + configPath + "', or it doesn't exist(or http failed)");
S3_CHECK_OR_DIE(awsCfg.SectionExist(configSection), S3ConfigError,
"Selected section '" + configSection +
"' does not exist, please check your aws credentials file",
configSection);
accessId = awsCfg.Get(configSection, "aws_access_key_id", "");
secret = awsCfg.Get(configSection, "aws_secret_access_key", "");
}
void CheckEssentialConfig(const S3Params& params) {
if (params.getCred().accessID.empty()) {
S3_CHECK_OR_DIE(false, S3ConfigError, "\"FATAL: access id not set\"", "accessid");
}
if (params.getCred().secret.empty()) {
S3_CHECK_OR_DIE(false, S3ConfigError, "\"FATAL: secret id not set\"", "secret");
}
if (s3ext_segnum <= 0) {
S3_CHECK_OR_DIE(false, S3ConfigError, "\"FATAL: segment info is invalid\"", "segment");
}
string newline = params.getGpcheckcloud_newline();
if (newline.compare("\n") && newline.compare("\r\n") && newline.compare("\r")) {
S3_CHECK_OR_DIE(false, S3ConfigError, "\"FATAL: gpcheckcloud_newline is invalid\"\"",
"gpcheckcloud_newline");
}
}
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦