diff --git a/common/cpp/include/common/io_error.h b/common/cpp/include/common/io_error.h index f6fa351fa6727fcef518ee6d10b9f5f70c2b5d82..4c6d2b67450b9e486929430cd5b834a7c3aecf8a 100644 --- a/common/cpp/include/common/io_error.h +++ b/common/cpp/include/common/io_error.h @@ -18,6 +18,7 @@ enum class IOErrorType { kAddressAlreadyInUse, kConnectionRefused, kConnectionResetByPeer, + kUnreachableNetwork, kTimeout, kFileAlreadyExists, kNoSpaceLeft, @@ -51,6 +52,11 @@ auto const kBadFileNumber = IOErrorTemplate { auto const kResourceTemporarilyUnavailable = IOErrorTemplate { "Resource temporarily unavailable", IOErrorType::kResourceTemporarilyUnavailable }; + +auto const kUnreachableNetwork = IOErrorTemplate { + "Network is unreachable", IOErrorType::kUnreachableNetwork +}; + auto const kPermissionDenied = IOErrorTemplate { "Permission denied", IOErrorType::kPermissionDenied }; diff --git a/common/cpp/src/database/mongodb_client.cpp b/common/cpp/src/database/mongodb_client.cpp index 63f69cd3f4e73ca6ced7d0f3db9cda7ef9c32b85..66c8b02cf95c507a7e01db91a6bdf5da56d897f5 100644 --- a/common/cpp/src/database/mongodb_client.cpp +++ b/common/cpp/src/database/mongodb_client.cpp @@ -236,14 +236,15 @@ Error MongoDBClient::InsertAsSubset(const FileInfo& file, if (err) { return err; } - auto query = BCON_NEW ("$and","[","{","_id", BCON_INT64(subset_id),"}","{","images._id","{","$ne",BCON_INT64(file.id),"}","}","]"); + auto query = BCON_NEW ("$and", "[", "{", "_id", BCON_INT64(subset_id), "}", "{", "images._id", "{", "$ne", + BCON_INT64(file.id), "}", "}", "]"); auto update = BCON_NEW ("$setOnInsert", "{", "size", BCON_INT64 (subset_size), "}", "$addToSet", "{", "images", BCON_DOCUMENT(document.get()), "}"); - err = AddBsonDocumentToArray(query, update,ignore_duplicates); + err = AddBsonDocumentToArray(query, update, ignore_duplicates); bson_destroy (query); bson_destroy (update); diff --git a/common/cpp/src/request/request_pool.cpp b/common/cpp/src/request/request_pool.cpp index 03f1e9bffa525be677097245191a0bc3edb9b386..163ad4599f385253876302b2054a12ba30858df6 100644 --- a/common/cpp/src/request/request_pool.cpp +++ b/common/cpp/src/request/request_pool.cpp @@ -1,5 +1,3 @@ -#include <request/request_pool.h> -#include <request/request_pool.h> #include "request/request_pool.h" namespace asapo { diff --git a/common/cpp/src/system_io/system_io.cpp b/common/cpp/src/system_io/system_io.cpp index db0a2760cb0467d3a2a6e8a156615fa19593a996..0764fcad7a9e60419ed6f6a157de308c77685323 100644 --- a/common/cpp/src/system_io/system_io.cpp +++ b/common/cpp/src/system_io/system_io.cpp @@ -290,10 +290,13 @@ std::unique_ptr<sockaddr_in> SystemIO::BuildSockaddrIn(const std::string& addres std::string host; uint16_t port = 0; std::tie(host, port) = *hostname_port_tuple; - host = ResolveHostnameToIp(host, err); - if (*err != nullptr) { - return nullptr; - } + +// this is not thread safe call we should not resolve hostname here - we actually already have ip in address. +// todo: remove this +// host = ResolveHostnameToIp(host, err); +// if (*err != nullptr) { +// return nullptr; +// } short family = AddressFamilyToPosixFamily(AddressFamilies::INET); if (family == -1) { diff --git a/common/cpp/src/system_io/system_io_linux_mac.cpp b/common/cpp/src/system_io/system_io_linux_mac.cpp index 74d41e9e57c8a6ab0764d0ac281647c108f7cab8..c8b1d5b07533f60d41513251eb2c9154975a6123 100644 --- a/common/cpp/src/system_io/system_io_linux_mac.cpp +++ b/common/cpp/src/system_io/system_io_linux_mac.cpp @@ -35,6 +35,8 @@ Error GetLastErrorFromErrno() { return IOErrorTemplates::kBadFileNumber.Generate(); case EAGAIN: return IOErrorTemplates::kResourceTemporarilyUnavailable.Generate(); + case ENETUNREACH: + return IOErrorTemplates::kUnreachableNetwork.Generate(); case ENOENT: case ENOTDIR: return IOErrorTemplates::kFileNotFound.Generate(); diff --git a/deploy/docker/cluster/Dockerfile b/deploy/docker/cluster/Dockerfile index f810f8817210aaf8ed9e7d9a20a417258f166c0f..427524d878de46464d7953c947c3ef840be022ae 100644 --- a/deploy/docker/cluster/Dockerfile +++ b/deploy/docker/cluster/Dockerfile @@ -50,7 +50,7 @@ RUN cd /var/run/asapo asapo && terraform init COPY asapo-* /usr/bin/ -COPY *.sh /tmp/asapo_runscripts/ +COPY *.sh asapo_overwrite_vars.tfvars /tmp/asapo_runscripts/ COPY *.py /etc/asapo/ COPY *.hcl.tpl /etc/asapo/ diff --git a/examples/producer/dummy-data-producer/dummy_data_producer.cpp b/examples/producer/dummy-data-producer/dummy_data_producer.cpp index a9384b2a2b8bd3188d5c9e1452196d876209e3c2..8f62763ddeb4cdb66ac5d848fe332b4581eca83e 100644 --- a/examples/producer/dummy-data-producer/dummy_data_producer.cpp +++ b/examples/producer/dummy-data-producer/dummy_data_producer.cpp @@ -71,7 +71,7 @@ void ProcessCommandArguments(int argc, char* argv[], Args* args) { std::cout << "Usage: " << argv[0] << " <destination> <beamtime_id[%<stream>%<token>]> <number_of_byte> <iterations> <nthreads>" - " <mode 0 -t tcp, 1 - filesystem> <timeout (sec)> [n images in set (default 1)]" + " <mode x0 -t tcp, x1 - filesystem, 0x - write files, 1x - do not write files> <timeout (sec)> [n images in set (default 1)]" << std::endl; exit(EXIT_FAILURE); } @@ -127,7 +127,7 @@ asapo::FileData CreateMemoryBuffer(size_t size) { bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t iterations, uint64_t images_in_set, - const std::string& stream) { + const std::string& stream, bool write_files) { asapo::Error err; if (iterations > 0) { // send wrong meta, for negative integration tests @@ -149,7 +149,8 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it } event_header.user_metadata = std::move(meta); if (images_in_set == 1) { - auto err = producer->SendData(event_header, std::move(buffer), asapo::kDefaultIngestMode, &ProcessAfterSend); + auto err = producer->SendData(event_header, std::move(buffer), write_files ? asapo::kDefaultIngestMode : + asapo::kTransferData, &ProcessAfterSend); if (err) { std::cerr << "Cannot send file: " << err << std::endl; return false; @@ -165,7 +166,8 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it event_header.file_name = stream + "/" + event_header.file_name; } event_header.user_metadata = meta; - auto err = producer->SendData(event_header, std::move(buffer), asapo::kDefaultIngestMode, &ProcessAfterSend); + auto err = producer->SendData(event_header, std::move(buffer), write_files ? asapo::kDefaultIngestMode : + asapo::kTransferData, &ProcessAfterSend); if (err) { std::cerr << "Cannot send file: " << err << std::endl; return false; @@ -179,7 +181,7 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it std::unique_ptr<asapo::Producer> CreateProducer(const Args& args) { asapo::Error err; auto producer = asapo::Producer::Create(args.receiver_address, args.nthreads, - args.mode == 0 ? asapo::RequestHandlerType::kTcp : asapo::RequestHandlerType::kFilesystem, + args.mode % 10 == 0 ? asapo::RequestHandlerType::kTcp : asapo::RequestHandlerType::kFilesystem, asapo::SourceCredentials{args.beamtime_id, args.stream, args.token }, &err); if(err) { std::cerr << "Cannot start producer. ProducerError: " << err << std::endl; @@ -231,7 +233,8 @@ int main (int argc, char* argv[]) { system_clock::time_point start_time = system_clock::now(); - if(!SendDummyData(producer.get(), args.number_of_bytes, args.iterations, args.images_in_set, args.stream)) { + if(!SendDummyData(producer.get(), args.number_of_bytes, args.iterations, args.images_in_set, args.stream, + args.mode / 10 == 0)) { return EXIT_FAILURE; } diff --git a/tests/automatic/mongo_db/insert_dataset/insert_dataset_mongodb.cpp b/tests/automatic/mongo_db/insert_dataset/insert_dataset_mongodb.cpp index 2d595be84c638c923eccd7fde6559281241ae3eb..c15b83406905c4a5de98c1d4b8c80e98a639404b 100644 --- a/tests/automatic/mongo_db/insert_dataset/insert_dataset_mongodb.cpp +++ b/tests/automatic/mongo_db/insert_dataset/insert_dataset_mongodb.cpp @@ -46,7 +46,7 @@ int main(int argc, char* argv[]) { fi.source = "host:1234"; fi.id = 1; - uint64_t subset_size=2; + uint64_t subset_size = 2; if (args.keyword != "Notconnected") { db.Connect("127.0.0.1", "data", "test"); diff --git a/tests/automatic/system_io/ip_tcp_network/client_serv/ip_tcp_network.cpp b/tests/automatic/system_io/ip_tcp_network/client_serv/ip_tcp_network.cpp index 8c304bcfd7bf0542c729ac6cd54f618178082be0..c95b33ebe1ea6f88fc2e52deb68cf87840188af7 100644 --- a/tests/automatic/system_io/ip_tcp_network/client_serv/ip_tcp_network.cpp +++ b/tests/automatic/system_io/ip_tcp_network/client_serv/ip_tcp_network.cpp @@ -158,7 +158,7 @@ int main(int argc, char* argv[]) { std::cout << "[META] Check unknown host" << std::endl; io->CreateAndConnectIPTCPSocket("some-host-that-might-not-exists.aa:1234", &err); - if(asapo::IOErrorTemplates::kUnableToResolveHostname != err) { + if(err != asapo::IOErrorTemplates::kUnreachableNetwork) { ExitIfErrIsNotOk(&err, 303); } diff --git a/tests/manual/receiver_debug_local/discovery.json b/tests/manual/receiver_debug_local/discovery.json new file mode 100644 index 0000000000000000000000000000000000000000..89b991729d2c089f7bea1a0ce7523ca065a25d9d --- /dev/null +++ b/tests/manual/receiver_debug_local/discovery.json @@ -0,0 +1,19 @@ +{ + "Mode": "static", + "Receiver": { + "StaticEndpoints": [ + "localhost:22001" + ], + "MaxConnections": 32 + }, + "Broker": { + "StaticEndpoint": "localhost:5005" + }, + "Mongo": { + "StaticEndpoint": "127.0.0.1:27017" + }, + "Port": 5900, + "LogLevel":"debug" +} + + diff --git a/tests/manual/receiver_debug_local/discovery.json.tpl b/tests/manual/receiver_debug_local/discovery.json.tpl index b068613852287d5c712033c65bd17b1725d12faf..120614c760605d3ed0ca632d24830e96ffd42f94 100644 --- a/tests/manual/receiver_debug_local/discovery.json.tpl +++ b/tests/manual/receiver_debug_local/discovery.json.tpl @@ -9,6 +9,9 @@ "Broker": { "StaticEndpoint": "localhost:5005" }, + "Mongo": { + "StaticEndpoint": "127.0.0.1:27017" + }, "Port": {{ env "NOMAD_PORT_discovery" }}, "LogLevel":"debug" } diff --git a/tests/manual/receiver_debug_local/nginx_kill.nmd b/tests/manual/receiver_debug_local/nginx_kill.nmd new file mode 100644 index 0000000000000000000000000000000000000000..cb3abbac259780ce7366042f24a19d635f032994 --- /dev/null +++ b/tests/manual/receiver_debug_local/nginx_kill.nmd @@ -0,0 +1,17 @@ +job "nginx_kill" { + datacenters = ["dc1"] + + type = "batch" + + group "nginx_kill" { + count = 1 + + task "nginx_kill" { + driver = "raw_exec" + config { + command = "killall", + args = ["nginx"] + } + } + } +} diff --git a/tests/manual/receiver_debug_local/start_dummyproducer.sh b/tests/manual/receiver_debug_local/start_dummyproducer.sh index 902e17cb1a8c94ebe8c0be2ddcff213653f10917..55640449ed847c43db3afb678d99a7e6faf07d1b 100755 --- a/tests/manual/receiver_debug_local/start_dummyproducer.sh +++ b/tests/manual/receiver_debug_local/start_dummyproducer.sh @@ -2,13 +2,13 @@ beamtime_id=asapo_test -nfiles=10 +nfiles=1000 timeout=100 -fsize=100 -mode=0 #tcp -nthreads=4 +fsize=10000 +mode=10 #tcp & no file write +nthreads=32 exec=/home/yakubov/projects/asapo/cmake-build-debug/examples/producer/dummy-data-producer/dummy-data-producer -$exec localhost:8400 ${beamtime_id} $fsize $nfiles $nthreads $mode $timeout \ No newline at end of file +$exec localhost:8400 ${beamtime_id} $fsize $nfiles $nthreads $mode $timeout diff --git a/tests/manual/receiver_debug_local/start_receiver.sh b/tests/manual/receiver_debug_local/start_receiver.sh new file mode 100755 index 0000000000000000000000000000000000000000..231051afff79b8daa029c44a33e54a33098b3949 --- /dev/null +++ b/tests/manual/receiver_debug_local/start_receiver.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + + +exec=/home/yakubov/projects/asapo/cmake-build-debug/receiver/receiver + + +$exec receiver.json