merged T70

This commit is contained in:
Marko Budiselic 2016-08-19 11:29:15 +01:00
commit e5f161974f
17 changed files with 148 additions and 53 deletions

View File

@ -330,6 +330,13 @@ if (LOG_NO_ERROR)
add_definitions(-DLOG_NO_ERROR)
endif()
# -- logging ------------------------------------------------------------------
# -- logger -------------------------------------------------------------------
option(SYNC_LOGGER "" OFF)
message(STATUS "SYNC LOGGER: ${SYNC_LOGGER}")
if (SYNC_LOGGER)
add_definitions(-DSYNC_LOGGER)
endif()
# -- logger -------------------------------------------------------------------
# -- assert -------------------------------------------------------------------
option(RUNTIME_ASSERT "Enable runtime assertions" ON)
message(STATUS "RUNTIME_ASSERT: ${RUNTIME_ASSERT}")
@ -448,17 +455,22 @@ endif()
# memgraph build name
execute_process(
OUTPUT_VARIABLE COMMIT_NO
COMMAND git rev-list --count HEAD
OUTPUT_VARIABLE COMMIT_BRANCH
COMMAND git rev-parse --abbrev-ref HEAD
)
execute_process(
OUTPUT_VARIABLE COMMIT_HASH
COMMAND git rev-parse --short HEAD
)
string(STRIP ${COMMIT_HASH} COMMIT_HASH)
execute_process(
OUTPUT_VARIABLE COMMIT_NO
COMMAND git rev-list --count HEAD
)
string(STRIP ${COMMIT_BRANCH} COMMIT_BRANCH)
string(STRIP ${COMMIT_NO} COMMIT_NO)
string(STRIP ${COMMIT_HASH} COMMIT_HASH)
set(MEMGRAPH_BUILD_NAME
"memgraph_${COMMIT_HASH}_${COMMIT_NO}_${CMAKE_BUILD_TYPE}")
"memgraph_${COMMIT_BRANCH}_${COMMIT_HASH}_${COMMIT_NO}_${CMAKE_BUILD_TYPE}")
# memgraph main executable
if (MEMGRAPH)

View File

@ -85,7 +85,7 @@ public:
encoder.write_integer(edge.to().id());
// write the type of the edge
encoder.write_string(edge.edge_type());
encoder.write_string(edge.edge_type().get());
// write the property map
auto props = edge.properties();

View File

@ -4,9 +4,9 @@
#include <cstring>
#include <functional>
#include "utils/likely.hpp"
#include "communication/bolt/v1/config.hpp"
#include "logging/default.hpp"
#include "utils/likely.hpp"
namespace bolt
{
@ -20,27 +20,25 @@ class ChunkedEncoder
public:
using byte = unsigned char;
ChunkedEncoder(Stream& stream) : stream(stream)
ChunkedEncoder(Stream &stream)
: logger(logging::log->logger("Chunked Encoder")), stream(stream)
{
logger = logging::log->logger("Chunked Encoder");
}
static constexpr size_t chunk_size = N - 2;
void write(byte value)
{
if(UNLIKELY(pos == N))
end_chunk();
if (UNLIKELY(pos == N)) end_chunk();
chunk[pos++] = value;
}
void write(const byte* values, size_t n)
void write(const byte *values, size_t n)
{
logger.trace("write {} bytes", n);
while(n > 0)
{
while (n > 0) {
auto size = n < N - pos ? n : N - pos;
std::memcpy(chunk.data() + pos, values, size);
@ -48,8 +46,7 @@ public:
pos += size;
n -= size;
if(pos == N)
end_chunk();
if (pos == N) end_chunk();
}
}
@ -69,13 +66,10 @@ private:
std::reference_wrapper<Stream> stream;
std::array<byte, C> chunk;
size_t pos {2};
size_t pos{2};
void end_chunk()
{
// TODO: this call is unnecessary bacause the same method is called
// inside the flush method
// write_chunk_header();
flush();
}
@ -98,5 +92,4 @@ private:
pos = 2;
}
};
}

View File

@ -49,6 +49,8 @@ public:
streams.emplace_back(std::forward<Stream::uptr>(stream));
}
virtual std::string type() = 0;
protected:
friend class Logger;

View File

@ -12,6 +12,7 @@ public:
protected:
void emit(Record::uptr) override;
std::string type() override;
private:
lockfree::MpscQueue<Record> records;

View File

@ -8,4 +8,5 @@ class SyncLog : public Log, Lockable<Futex>
{
protected:
void emit(Record::uptr) override;
std::string type() override;
};

View File

@ -17,9 +17,31 @@ public:
void compile(const std::string &in_file, const std::string &out_file)
{
std::string flags;
// TODO: sync this with cmake configuration
#ifdef NDEBUG
flags += " -DNDEBUG -O2";
#endif
#ifdef LOG_NO_TRACE
flags += " -DLOG_NO_TRACE";
#endif
#ifdef LOG_NO_DEBUG
flags += " -DLOG_NO_DEBUG";
#endif
#ifdef LOG_NO_INFO
flags += " -DLOG_NO_INFO";
#endif
#ifdef LOG_NO_WARN
flags += " -DLOG_NO_WARN";
#endif
#ifdef LOG_NO_ERROR
flags += " -DLOG_NO_ERROR";
#endif
// generate compile command
auto compile_command = utils::prints(
"clang++",
"clang++" + flags,
// "-std=c++1y -O2 -DNDEBUG", // compile flags
"-std=c++1y", // compile flags // TODO: load from config file
in_file, // input file
@ -30,6 +52,8 @@ public:
"-shared -fPIC" // shared library flags
);
logger.debug("compile command -> {}", compile_command);
// synchronous call
auto compile_status = system(compile_command.c_str());

View File

@ -55,7 +55,7 @@ public:
{"query", query},
{"code", cpp_traverser.code}});
logger.trace("generated code: {}", generated);
// logger.trace("generated code: {}", generated);
utils::write_file(generated, path);
}

View File

@ -21,8 +21,8 @@ public:
using sptr_code_lib = std::shared_ptr<CodeLib>;
ProgramLoader() :
stripper(make_query_stripper(TK_LONG, TK_FLOAT, TK_STR, TK_BOOL)),
logger(logging::log->logger("ProgramLoader"))
logger(logging::log->logger("ProgramLoader")),
stripper(make_query_stripper(TK_LONG, TK_FLOAT, TK_STR, TK_BOOL))
{
}

View File

@ -45,14 +45,15 @@ const std::string vertex_accessor_args_id =
const std::string match_vertex_by_id =
"auto {0} = db.graph.vertices.find(t, args[{1}]->as<Int64>().value);\n"
" if (!{0}) return t.commit(), std::make_shared<QueryResult>();";
" if (!{0}) return t.commit(), false;";
const std::string match_edge_by_id =
"auto {0} = db.graph.edges.find(t, args[{1}]->as<Int64>().value);\n"
" if (!{0}) return t.commit(), std::make_shared<QueryResult>();";
" if (!{0}) return t.commit(), false;";
const std::string write_entity =
"stream.write_field(\"{0}\");\n"
" stream.write_record();\n"
" stream.write_list_header(1);\n"
" stream.write({0});\n"
" stream.write_success_empty();\n";

42
release/alpha.sh Executable file
View File

@ -0,0 +1,42 @@
#!/bin/bash
# Initial version of script that is going to be used for release build.
# TODO: enable options related to lib
echo "Memgraph Release Building..."
cd ../build
# get most recent version of memgraph exe
exe_name=`ls -t memgraph_* | head -1`
cd ../release
# create libs dir
mkdir -p libs
# initialize all libs
# cp ../libs/setup.sh libs/setup.sh
# ./libs/setup.sh
# just copy all libs
cp -r ../libs ./
# compile memgraph
cd ../build
# rm -rf ./*
# cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE:String=debug ..
# make -j 4
# create dst directory
mkdir -p ../release/${exe_name}
# copy all relevant files
cp ${exe_name} ../release/${exe_name}/memgraph
cp libmemgraph_pic.a ../release/${exe_name}/libmemgraph_pic.a
cp -r include ../release/${exe_name}/include
cp -r template ../release/${exe_name}/template
mkdir -p ../release/${exe_name}/compiled/cpu
echo "Memgraph Release Building DONE"

View File

@ -1,3 +0,0 @@
#!/bin/bash
echo "TODO: build beta version of Memgraph"

View File

@ -41,7 +41,7 @@ public:
} while(tokens.back().id != 0);
return std::move(tree);
return tree;
}
protected:

View File

@ -8,31 +8,35 @@ session = driver.session()
queries = [];
queries.append((True, "CREATE (n {age: 32}) RETURN n"))
queries.append((True, "CREATE (n {name: \"Max\", age: 21}) RETURN n"))
queries.append((False, "CREATE (n {name: \"Paul\", age: 21}) RETURN n"))
queries.append((False, "CREATE (n:PERSON {name: \"Chris\", age: 20}) RETURN n"))
queries.append((False, "CREATE (n:PERSON:STUDENT {name: \"Marko\", age: 19}) RETURN n"))
queries.append((False, "CREATE (n:TEST {string: \"Properties test\", integer: 100, float: 232.2323, bool: True}) RETURN n"))
queries.append((True, "CREATE (n {name: \"Paul\", age: 21}) RETURN n"))
queries.append((True, "CREATE (n:PERSON {name: \"Chris\", age: 20}) RETURN n"))
queries.append((True, "CREATE (n:PERSON:STUDENT {name: \"Marko\", age: 19}) RETURN n"))
queries.append((True, "CREATE (n:TEST {string: \"Properties test\", integer: 100, float: 232.2323, bool: True}) RETURN n"))
queries.append((False, "MATCH (n) WHERE ID(n)=0 RETURN n"))
queries.append((False, "MATCH (n) WHERE ID(n)=1 RETURN n"))
queries.append((False, "MATCH (n) WHERE ID(n)=2 RETURN n"))
queries.append((False, "MATCH (n) WHERE ID(n)=3 RETURN n"))
queries.append((False, "MATCH (n) WHERE ID(n)=4 RETURN n"))
queries.append((True, "MATCH (n) WHERE ID(n)=0 RETURN n"))
queries.append((True, "MATCH (n) WHERE ID(n)=1 RETURN n"))
queries.append((True, "MATCH (n) WHERE ID(n)=2 RETURN n"))
queries.append((True, "MATCH (n) WHERE ID(n)=3 RETURN n"))
queries.append((True, "MATCH (n) WHERE ID(n)=4 RETURN n"))
queries.append((True, "MATCH (n) WHERE ID(n)=5 RETURN n"))
queries.append((False, "MATCH (n1), (n2) WHERE ID(n1)=0 AND ID(n2)=1 CREATE (n1)-[r:IS]->(n2) RETURN r"))
queries.append((False, "MATCH (n1), (n2) WHERE ID(n1)=0 AND ID(n2)=1 CREATE (n1)-[r:IS {name: \"test\", age: 23}]->(n2) RETURN r"))
queries.append((False, "MATCH (n1), (n2) WHERE ID(n1)=0 AND ID(n2)=1 CREATE (n1)-[r:IS {name: \"test\", age: 23}]->(n2) RETURN r"))
queries.append((True, "MATCH (n1), (n2) WHERE ID(n1)=0 AND ID(n2)=1 CREATE (n1)-[r:IS]->(n2) RETURN r"))
queries.append((True, "MATCH (n1), (n2) WHERE ID(n1)=1 AND ID(n2)=2 CREATE (n1)-[r:IS {name: \"test\", age: 23}]->(n2) RETURN r"))
queries.append((True, "MATCH (n1), (n2) WHERE ID(n1)=2 AND ID(n2)=0 CREATE (n1)-[r:IS {name: \"test\", age: 23}]->(n2) RETURN r"))
queries.append((False, "MATCH ()-[r]-() WHERE ID(r)=0 RETURN r"))
queries.append((False, "MATCH ()-[r]-() WHERE ID(r)=1 RETURN r"))
queries.append((False, "MATCH ()-[r]-() WHERE ID(r)=2 RETURN r"))
queries.append((True, "MATCH ()-[r]-() WHERE ID(r)=0 RETURN r"))
queries.append((True, "MATCH ()-[r]-() WHERE ID(r)=1 RETURN r"))
queries.append((True, "MATCH ()-[r]-() WHERE ID(r)=2 RETURN r"))
queries.append((False, "MATCH (n) WHERE ID(n)=1 SET n.name = \"updated_name\" RETURN n"))
queries.append((False, "MATCH (n) WHERE ID(n)=1 RETURN n"))
queries.append((False, "MATCH ()-[r]-() WHERE ID(r)=1 SET r.name = \"TEST100\" RETURN r"))
queries.append((False, "MATCH ()-[r]-() WHERE ID(r)=1 RETURN r"))
queries.append((True, "MATCH (n) WHERE ID(n)=1 SET n.name = \"updated_name\" RETURN n"))
queries.append((True, "MATCH (n) WHERE ID(n)=1 RETURN n"))
queries.append((True, "MATCH ()-[r]-() WHERE ID(r)=1 SET r.name = \"TEST100\" RETURN r"))
queries.append((True, "MATCH ()-[r]-() WHERE ID(r)=1 RETURN r"))
for active, query in queries:
for i in range(1):
for active, query in queries:
if active:
session.run(query)
for record in session.run(query):
print(record)

View File

@ -11,6 +11,11 @@ void AsyncLog::emit(Record::uptr record)
records.push(std::move(record));
}
std::string AsyncLog::type()
{
return "AsyncLog";
}
void AsyncLog::work()
{
using namespace std::chrono_literals;

View File

@ -5,3 +5,8 @@ void SyncLog::emit(Record::uptr record)
auto guard = this->acquire_unique();
dispatch(*record);
}
std::string SyncLog::type()
{
return "SyncLog";
}

View File

@ -34,9 +34,17 @@ int main(void)
// that are configured below
std::set_terminate(&terminate_handler);
// logger init
#ifdef SYNC_LOGGER
logging::init_sync();
#else
logging::init_async();
#endif
logging::log->pipe(std::make_unique<Stdout>());
// get Main logger
logger = logging::log->logger("Main");
logger.info("{}", logging::log->type());
signal(SIGINT, sigint_handler);
signal(SIGABRT, sigint_handler);
@ -63,7 +71,7 @@ int main(void)
bolt::Server<bolt::Worker> server(std::move(socket));
serverptr = &server;
constexpr size_t N = 1;
auto N = std::thread::hardware_concurrency();
logger.info("Starting {} workers", N);
server.start(N);