diff --git a/arangod/Pregel/ResultWriter.cpp b/arangod/Pregel/ResultWriter.cpp index f4e9b1240d..4b6aa48fd9 100644 --- a/arangod/Pregel/ResultWriter.cpp +++ b/arangod/Pregel/ResultWriter.cpp @@ -23,5 +23,56 @@ #include "ResultWriter.h" #include "GraphStore.h" +#include "Utils/OperationCursor.h" +#include "Utils/SingleCollectionTransaction.h" +#include "Utils/StandaloneTransactionContext.h" +#include "Utils/Transaction.h" +#include "VocBase/ticks.h" +#include "VocBase/vocbase.h" + +#include +#include + +using namespace arangodb; using namespace arangodb::pregel; -using namespace arangodb::pregel::algos; + +template +void ResultWriter::writeResults(TRI_vocbase_t *vocbase, GraphStore *store) { + SingleCollectionTransaction + trx(StandaloneTransactionContext::Create(vocbase), + _vertexCollection, TRI_TRANSACTION_WRITE); + int res = trx.begin(); + + if (res != TRI_ERROR_NO_ERROR) { + LOG(ERR) << "cannot start transaction to load authentication"; + return; + }*/ + /* + OperationResult result; + OperationOptions options; + options.waitForSync = false; + options.mergeObjects = true; + for (auto const &pair : _vertices) { + //TransactionBuilderLeaser b(&trx); + VPackBuilder b; + b.openObject(); + b.add(StaticStrings::KeyString, + pair.second->_data.get(StaticStrings::KeyString)); + b.add("value", VPackValue(pair.second->_vertexState)); + b.close(); + LOG(INFO) << b.toJson(); + result = trx.update(_vertexCollection, b->slice(), options); + if (!result.successful()) { + THROW_ARANGO_EXCEPTION_FORMAT(result.code, "while looking up graph + '%s'", + _vertexCollection.c_str()); + } + }*/ + // Commit or abort. + /*res = trx.finish(result.code); + + if (res != TRI_ERROR_NO_ERROR) { + THROW_ARANGO_EXCEPTION_FORMAT(res, "while looking up graph '%s'", + _vertexCollection.c_str()); + } +} diff --git a/arangod/Pregel/ResultWriter.h b/arangod/Pregel/ResultWriter.h index 00a9d74dbd..775879c756 100644 --- a/arangod/Pregel/ResultWriter.h +++ b/arangod/Pregel/ResultWriter.h @@ -24,25 +24,24 @@ #define ARANGODB_PREGEL_ALGO_SSSP_H 1 #include "Algorithm.h" + +struct TRI_vocbase_t; namespace arangodb { namespace pregel { -namespace algos { -/// Single Source Shortest Path. Uses integer attribute 'value', the source -/// should have -/// the value == 0, all others -1 or an undefined value -struct SSSPAlgorithm : public Algorithm { +template class GraphStore; + +template +class ResultWriter { + std::string _resultVertexCollection; + std::string _resultEdgeCollection; + bool _writeInSameCollections = true; + bool resultField; + public: - SSSPAlgorithm() : Algorithm("SSSP") {} - - size_t estimatedVertexSize() const override; - std::shared_ptr> inputFormat() const override; - std::shared_ptr> messageFormat() const override; - std::shared_ptr> messageCombiner() const override; - std::shared_ptr> - createComputation() const override; + ResultWriter(VPackSlice params) {} + void writeResults(TRI_vocbase_t *vocbase, GraphStore *store); }; } } -} #endif diff --git a/arangod/Pregel/Worker.cpp b/arangod/Pregel/Worker.cpp index 3b3c953685..3778daa154 100644 --- a/arangod/Pregel/Worker.cpp +++ b/arangod/Pregel/Worker.cpp @@ -182,43 +182,7 @@ void Worker::workerJobIsDone(bool allDone) { template void Worker::writeResults() { - /*SingleCollectionTransaction - trx(StandaloneTransactionContext::Create(_vocbaseGuard.vocbase()), - _vertexCollection, TRI_TRANSACTION_WRITE); - int res = trx.begin(); - - if (res != TRI_ERROR_NO_ERROR) { - LOG(ERR) << "cannot start transaction to load authentication"; - return; - }*/ - /* - OperationResult result; - OperationOptions options; - options.waitForSync = false; - options.mergeObjects = true; - for (auto const &pair : _vertices) { - //TransactionBuilderLeaser b(&trx); - VPackBuilder b; - b.openObject(); - b.add(StaticStrings::KeyString, - pair.second->_data.get(StaticStrings::KeyString)); - b.add("value", VPackValue(pair.second->_vertexState)); - b.close(); - LOG(INFO) << b.toJson(); - result = trx.update(_vertexCollection, b->slice(), options); - if (!result.successful()) { - THROW_ARANGO_EXCEPTION_FORMAT(result.code, "while looking up graph - '%s'", - _vertexCollection.c_str()); - } - }*/ - // Commit or abort. - /*res = trx.finish(result.code); - - if (res != TRI_ERROR_NO_ERROR) { - THROW_ARANGO_EXCEPTION_FORMAT(res, "while looking up graph '%s'", - _vertexCollection.c_str()); - }*/ + /**/ VPackBuilder b; b.openArray(); auto it = _graphStore->vertexIterator();