1
0
Fork 0

fix a few issues in BackupNoAuthSysTest (#8868)

This commit is contained in:
Jan 2019-04-29 19:13:39 +02:00 committed by GitHub
parent 191343b371
commit 1408654d2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 67 additions and 91 deletions

View File

@ -97,11 +97,11 @@ bool GeneralServer::openEndpoint(IoContext& ioContext, Endpoint* endpoint) {
return true; return true;
} }
GeneralServer::IoThread::~IoThread() { shutdown(); }
GeneralServer::IoThread::IoThread(IoContext& iocontext) GeneralServer::IoThread::IoThread(IoContext& iocontext)
: Thread("Io"), _iocontext(iocontext) {} : Thread("Io"), _iocontext(iocontext) {}
GeneralServer::IoThread::~IoThread() { shutdown(); }
void GeneralServer::IoThread::run() { void GeneralServer::IoThread::run() {
// run the asio io context // run the asio io context
_iocontext._asioIoContext.run(); _iocontext._asioIoContext.run();
@ -111,8 +111,7 @@ GeneralServer::IoContext::IoContext()
: _clients(0), : _clients(0),
_thread(*this), _thread(*this),
_asioIoContext(1), // only a single thread per context _asioIoContext(1), // only a single thread per context
_asioWork(_asioIoContext), _asioWork(_asioIoContext) {
_stopped(false) {
_thread.start(); _thread.start();
} }

View File

@ -73,7 +73,6 @@ class GeneralServer {
IoThread _thread; IoThread _thread;
asio_ns::io_context _asioIoContext; asio_ns::io_context _asioIoContext;
asio_ns::io_context::work _asioWork; asio_ns::io_context::work _asioWork;
std::atomic<bool> _stopped;
public: public:
IoContext(); IoContext();

View File

@ -120,7 +120,6 @@ GeneralServerFeature::GeneralServerFeature(application_features::ApplicationServ
_numIoThreads(0) { _numIoThreads(0) {
setOptional(true); setOptional(true);
startsAfter("AQLPhase"); startsAfter("AQLPhase");
startsAfter("Endpoint"); startsAfter("Endpoint");
startsAfter("Upgrade"); startsAfter("Upgrade");
startsAfter("SslServer"); startsAfter("SslServer");
@ -249,10 +248,7 @@ void GeneralServerFeature::stop() {
} }
void GeneralServerFeature::unprepare() { void GeneralServerFeature::unprepare() {
for (auto& server : _servers) { _servers.clear();
delete server;
}
_jobManager.reset(); _jobManager.reset();
GENERAL_SERVER = nullptr; GENERAL_SERVER = nullptr;
@ -284,10 +280,9 @@ void GeneralServerFeature::buildServers() {
ssl->SSL->verifySslOptions(); ssl->SSL->verifySslOptions();
} }
GeneralServer* server = new GeneralServer(_numIoThreads); auto server = std::make_unique<GeneralServer>(_numIoThreads);
server->setEndpointList(&endpointList); server->setEndpointList(&endpointList);
_servers.push_back(server); _servers.push_back(std::move(server));
} }
void GeneralServerFeature::defineHandlers() { void GeneralServerFeature::defineHandlers() {

View File

@ -96,15 +96,6 @@ class GeneralServerFeature final : public application_features::ApplicationFeatu
void stop() override final; void stop() override final;
void unprepare() override final; void unprepare() override final;
private:
double _keepAliveTimeout = 300.0;
bool _allowMethodOverride;
bool _proxyCheck;
std::vector<std::string> _trustedProxies;
std::vector<std::string> _accessControlAllowOrigins;
public:
bool proxyCheck() const { return _proxyCheck; } bool proxyCheck() const { return _proxyCheck; }
std::vector<std::string> trustedProxies() const { return _trustedProxies; } std::vector<std::string> trustedProxies() const { return _trustedProxies; }
@ -112,10 +103,16 @@ class GeneralServerFeature final : public application_features::ApplicationFeatu
void buildServers(); void buildServers();
void defineHandlers(); void defineHandlers();
private:
double _keepAliveTimeout = 300.0;
bool _allowMethodOverride;
bool _proxyCheck;
std::vector<std::string> _trustedProxies;
std::vector<std::string> _accessControlAllowOrigins;
std::unique_ptr<rest::RestHandlerFactory> _handlerFactory; std::unique_ptr<rest::RestHandlerFactory> _handlerFactory;
std::unique_ptr<rest::AsyncJobManager> _jobManager; std::unique_ptr<rest::AsyncJobManager> _jobManager;
std::unique_ptr<std::pair<aql::QueryRegistry*, traverser::TraverserEngineRegistry*>> _combinedRegistries; std::unique_ptr<std::pair<aql::QueryRegistry*, traverser::TraverserEngineRegistry*>> _combinedRegistries;
std::vector<rest::GeneralServer*> _servers; std::vector<std::unique_ptr<rest::GeneralServer>> _servers;
uint64_t _numIoThreads; uint64_t _numIoThreads;
}; };

View File

@ -46,10 +46,6 @@ class IoTask : public std::enable_shared_from_this<IoTask> {
public: public:
std::string const& name() const { return _name; } std::string const& name() const { return _name; }
// get a VelocyPack representation of the IoTask for reporting
std::shared_ptr<arangodb::velocypack::Builder> toVelocyPack() const;
void toVelocyPack(arangodb::velocypack::Builder&) const;
protected: protected:
GeneralServer::IoContext& _context; GeneralServer::IoContext& _context;
GeneralServer& _server; GeneralServer& _server;

View File

@ -72,7 +72,7 @@ bool ListenTask::start() {
} }
void ListenTask::accept() { void ListenTask::accept() {
auto self(shared_from_this()); auto self = shared_from_this();
auto handler = [this, self](asio_ns::error_code const& ec) { auto handler = [this, self](asio_ns::error_code const& ec) {
TRI_ASSERT(_acceptor != nullptr); TRI_ASSERT(_acceptor != nullptr);

View File

@ -68,7 +68,8 @@ namespace arangodb {
Scheduler* SchedulerFeature::SCHEDULER = nullptr; Scheduler* SchedulerFeature::SCHEDULER = nullptr;
SchedulerFeature::SchedulerFeature(application_features::ApplicationServer& server) SchedulerFeature::SchedulerFeature(application_features::ApplicationServer& server)
: ApplicationFeature(server, "Scheduler"), _scheduler(nullptr) { : ApplicationFeature(server, "Scheduler"),
_scheduler(nullptr) {
setOptional(false); setOptional(false);
startsAfter("GreetingsPhase"); startsAfter("GreetingsPhase");
startsAfter("FileDescriptors"); startsAfter("FileDescriptors");

View File

@ -156,8 +156,8 @@ arangodb::Result checkHttpResponse(arangodb::httpclient::SimpleHttpClient& clien
if (response == nullptr || !response->isComplete()) { if (response == nullptr || !response->isComplete()) {
return {TRI_ERROR_INTERNAL, return {TRI_ERROR_INTERNAL,
"got invalid response from server: '" + client.getErrorMessage() + "got invalid response from server: '" + client.getErrorMessage() +
"' while executing " + requestAction + " with this payload: '" + "' while executing " + requestAction + (originalRequest.empty() ? "" : " with this payload: '" +
originalRequest + "'"}; originalRequest + "'")};
} }
if (response->wasHttpError()) { if (response->wasHttpError()) {
int errorNum = TRI_ERROR_INTERNAL; int errorNum = TRI_ERROR_INTERNAL;
@ -171,7 +171,7 @@ arangodb::Result checkHttpResponse(arangodb::httpclient::SimpleHttpClient& clien
return {errorNum, "got invalid response from server: HTTP " + return {errorNum, "got invalid response from server: HTTP " +
itoa(response->getHttpReturnCode()) + ": '" + itoa(response->getHttpReturnCode()) + ": '" +
errorMsg + "' while executing '" + requestAction + errorMsg + "' while executing '" + requestAction +
"' with this payload: '" + originalRequest + "'"}; (originalRequest.empty() ? "" : "' with this payload: '" + originalRequest + "'")};
} }
return {TRI_ERROR_NO_ERROR}; return {TRI_ERROR_NO_ERROR};
} }
@ -609,7 +609,6 @@ arangodb::Result restoreData(arangodb::httpclient::SimpleHttpClient& httpClient,
arangodb::Result result; arangodb::Result result;
StringBuffer buffer(true); StringBuffer buffer(true);
bool isGzip(false);
VPackSlice const parameters = jobData.collection.get("parameters"); VPackSlice const parameters = jobData.collection.get("parameters");
std::string const cname = std::string const cname =
@ -625,20 +624,16 @@ arangodb::Result restoreData(arangodb::httpclient::SimpleHttpClient& httpClient,
if (!datafile || datafile->status().fail()) { if (!datafile || datafile->status().fail()) {
datafile = jobData.directory.readableFile( datafile = jobData.directory.readableFile(
cname + "_" + arangodb::rest::SslInterface::sslMD5(cname) + ".data.json.gz"); cname + "_" + arangodb::rest::SslInterface::sslMD5(cname) + ".data.json.gz");
isGzip = true; }
} // if
if (!datafile || datafile->status().fail()) { if (!datafile || datafile->status().fail()) {
datafile = jobData.directory.readableFile( datafile = jobData.directory.readableFile(cname + ".data.json.gz");
cname + ".data.json.gz"); }
isGzip = true;
} // if
if (!datafile || datafile->status().fail()) { if (!datafile || datafile->status().fail()) {
datafile = jobData.directory.readableFile(cname + ".data.json"); datafile = jobData.directory.readableFile(cname + ".data.json");
isGzip = false;
if (!datafile || datafile->status().fail()) {
result = {TRI_ERROR_CANNOT_READ_FILE, "could not open file"};
return result;
} }
if (!datafile || datafile->status().fail()) {
result = {TRI_ERROR_CANNOT_READ_FILE, "could not open data file for collection '" + cname + "'"};
return result;
} }
int64_t const fileSize = TRI_SizeFile(datafile->path().c_str()); int64_t const fileSize = TRI_SizeFile(datafile->path().c_str());
@ -652,6 +647,8 @@ arangodb::Result restoreData(arangodb::httpclient::SimpleHttpClient& httpClient,
int64_t numReadForThisCollection = 0; int64_t numReadForThisCollection = 0;
int64_t numReadSinceLastReport = 0; int64_t numReadSinceLastReport = 0;
bool const isGzip = (0 == datafile->path().substr(datafile->path().size() - 3).compare(".gz"));
buffer.clear(); buffer.clear();
while (true) { while (true) {
if (buffer.reserve(16384) != TRI_ERROR_NO_ERROR) { if (buffer.reserve(16384) != TRI_ERROR_NO_ERROR) {

View File

@ -305,12 +305,9 @@ EncryptionFeature const* ManagedDirectory::encryptionFeature() const {
std::unique_ptr<ManagedDirectory::File> ManagedDirectory::readableFile(std::string const& filename, std::unique_ptr<ManagedDirectory::File> ManagedDirectory::readableFile(std::string const& filename,
int flags) { int flags) {
std::unique_ptr<File> file{nullptr}; std::unique_ptr<File> file;
if (_status.fail()) { // directory is in a bad state
return file;
}
if (!_status.fail()) { // directory is in a bad state?
try { try {
bool gzFlag = (0 == filename.substr(filename.size() - 3).compare(".gz")); bool gzFlag = (0 == filename.substr(filename.size() - 3).compare(".gz"));
file = std::make_unique<File>(*this, filename, file = std::make_unique<File>(*this, filename,
@ -319,7 +316,8 @@ std::unique_ptr<ManagedDirectory::File> ManagedDirectory::readableFile(std::stri
_status.reset(TRI_ERROR_CANNOT_READ_FILE, "error opening file " + _status.reset(TRI_ERROR_CANNOT_READ_FILE, "error opening file " +
::filePath(*this, filename) + ::filePath(*this, filename) +
" for reading"); " for reading");
return {nullptr}; file.reset();
}
} }
return file; return file;
@ -327,7 +325,7 @@ std::unique_ptr<ManagedDirectory::File> ManagedDirectory::readableFile(std::stri
std::unique_ptr<ManagedDirectory::File> ManagedDirectory::writableFile( std::unique_ptr<ManagedDirectory::File> ManagedDirectory::writableFile(
std::string const& filename, bool overwrite, int flags, bool gzipOk) { std::string const& filename, bool overwrite, int flags, bool gzipOk) {
std::unique_ptr<File> file{nullptr}; std::unique_ptr<File> file;
if (_status.fail()) { // directory is in a bad state if (_status.fail()) { // directory is in a bad state
return file; return file;
@ -352,7 +350,7 @@ std::unique_ptr<ManagedDirectory::File> ManagedDirectory::writableFile(
} }
} }
file = std::make_unique<File>(*this, filename, file = std::make_unique<File>(*this, filenameCopy,
(ManagedDirectory::DefaultWriteFlags ^ flags), _writeGzip && gzipOk); (ManagedDirectory::DefaultWriteFlags ^ flags), _writeGzip && gzipOk);
} catch (...) { } catch (...) {
return {nullptr}; return {nullptr};
@ -464,18 +462,14 @@ void ManagedDirectory::File::write(char const* data, size_t length) {
if (!written) { if (!written) {
_status = _context->status(); _status = _context->status();
} }
} else if (isGzip()) { return;
gzwrite(_gzFile, data, length);
} else {
::rawWrite(_fd, data, length, _status, _path, _flags);
} }
#else #endif
if (isGzip()) { if (isGzip()) {
gzwrite(_gzFile, data, length); gzwrite(_gzFile, data, length);
} else { } else {
::rawWrite(_fd, data, length, _status, _path, _flags); ::rawWrite(_fd, data, length, _status, _path, _flags);
} // else }
#endif
} }
ssize_t ManagedDirectory::File::read(char* buffer, size_t length) { ssize_t ManagedDirectory::File::read(char* buffer, size_t length) {
@ -490,27 +484,20 @@ ssize_t ManagedDirectory::File::read(char* buffer, size_t length) {
if (bytesRead < 0) { if (bytesRead < 0) {
_status = _context->status(); _status = _context->status();
} }
} else if (isGzip()) { return bytesRead;
bytesRead = gzread(_gzFile, buffer, length);
} else {
bytesRead = ::rawRead(_fd, buffer, length, _status, _path, _flags);
} }
#else #endif
if (isGzip()) { if (isGzip()) {
bytesRead = gzread(_gzFile, buffer, length); bytesRead = gzread(_gzFile, buffer, length);
} else { } else {
bytesRead = ::rawRead(_fd, buffer, length, _status, _path, _flags); bytesRead = ::rawRead(_fd, buffer, length, _status, _path, _flags);
} // else } // else
#endif
return bytesRead; return bytesRead;
} }
std::string ManagedDirectory::File::slurp() { std::string ManagedDirectory::File::slurp() {
std::string content; std::string content;
if (!::isReadable(_fd, _flags, _path, _status)) { if (::isReadable(_fd, _flags, _path, _status)) {
return content;
}
char buffer[::DefaultIOChunkSize]; char buffer[::DefaultIOChunkSize];
while (true) { while (true) {
ssize_t bytesRead = read(buffer, ::DefaultIOChunkSize); ssize_t bytesRead = read(buffer, ::DefaultIOChunkSize);
@ -521,7 +508,7 @@ std::string ManagedDirectory::File::slurp() {
break; break;
} }
} }
}
return content; return content;
} }

View File

@ -220,7 +220,7 @@ class ManagedDirectory {
* @return Unique pointer to file, if opened * @return Unique pointer to file, if opened
*/ */
std::unique_ptr<File> writableFile(std::string const& filename, std::unique_ptr<File> writableFile(std::string const& filename,
bool overwrite, int flags = 0, bool gzipOk = true ); bool overwrite, int flags = 0, bool gzipOk = true);
/** /**
* @brief Write a string to file * @brief Write a string to file

View File

@ -120,6 +120,11 @@ void Version::initialize() {
Values["icu-version"] = getICUVersion(); Values["icu-version"] = getICUVersion();
Values["openssl-version-compile-time"] = getOpenSSLVersion(true); Values["openssl-version-compile-time"] = getOpenSSLVersion(true);
Values["openssl-version-run-time"] = getOpenSSLVersion(false); Values["openssl-version-run-time"] = getOpenSSLVersion(false);
#ifdef __pie__
Values["pie"] = std::to_string(__pie__);
#else
Values["pie"] = "none";
#endif
Values["platform"] = TRI_PLATFORM; Values["platform"] = TRI_PLATFORM;
Values["reactor-type"] = getBoostReactorType(); Values["reactor-type"] = getBoostReactorType();
Values["server-version"] = getServerVersion(); Values["server-version"] = getServerVersion();