19 #ifndef PARTITIONER_CC
20 #define PARTITIONER_CC
26 template<
class KeyClass,
class ValueClass>
28 std::pair<std::string, std::string> outputDatabaseAndSet) {
30 this->inputDatabaseAndSet = inputDatabaseAndSet;
31 this->outputDatabaseAndSet = outputDatabaseAndSet;
34 template<
class KeyClass,
class ValueClass>
36 std::shared_ptr<pdb::QueryClient> queryClient,
44 if (partitionComp ==
nullptr) {
45 errMsg =
"Error: null partitionComp";
50 if (queryClient ==
nullptr) {
51 errMsg =
"Error: null queryClient";
59 = deepCopyToCurrentAllocationBlock<PartitionComp<KeyClass, ValueClass>>(partitionComp);
61 curPartitionComp->setOutput(outputDatabaseAndSet.first, outputDatabaseAndSet.second);
65 = makeObject<ScanUserSet<ValueClass>> (inputDatabaseAndSet.first, inputDatabaseAndSet.second);
68 curPartitionComp->setInput(scanner);
71 queryClient->setQueryGraph(curPartitionComp);
72 std::vector<Handle<Computation>> computations;
73 std::string tcapString = queryClient->getTCAP(computations);
74 std::cout <<
"number of computations is " << computations.size() << std::endl;
76 queryClient->registerReplica(inputDatabaseAndSet,
78 curPartitionComp->getNumPartitions(),
79 curPartitionComp->getNumNodes(),
84 return queryClient->executeComputations(errMsg, tcapString, computations);
88 template<
class KeyClass,
class ValueClass>
90 std::shared_ptr<pdb::QueryClient> queryClient,
98 if (partitionComp ==
nullptr) {
99 errMsg =
"Error: null partitionComp";
104 if (queryClient ==
nullptr) {
105 errMsg =
"Error: null queryClient";
113 = deepCopyToCurrentAllocationBlock<PartitionTransformationComp<KeyClass, ValueClass>>(partitionComp);
117 = makeObject<ScanUserSet<ValueClass>> (inputDatabaseAndSet.first, inputDatabaseAndSet.second);
121 = makeObject<WriteUserSet<KeyClass>> (outputDatabaseAndSet.first, outputDatabaseAndSet.second);
124 curPartitionComp->setInput(scanner);
125 writer->setInput(curPartitionComp);
128 queryClient->setQueryGraph(writer);
129 std::vector<Handle<Computation>> computations;
130 std::string tcapString = queryClient->getTCAP(computations);
133 queryClient->registerReplica(inputDatabaseAndSet,
134 outputDatabaseAndSet,
135 curPartitionComp->getNumPartitions(),
136 curPartitionComp->getNumNodes(),
142 return queryClient->executeComputations(errMsg, tcapString, computations);
Partitioner(std::pair< std::string, std::string > inputDatabaseAndSet, std::pair< std::string, std::string > outputDatabaseAndSet)
bool partitionWithTransformation(std::string &errMsg, std::shared_ptr< pdb::QueryClient > queryClient, Handle< PartitionTransformationComp< KeyClass, ValueClass >> partitionComp)
bool partition(std::string &errMsg, std::shared_ptr< pdb::QueryClient > queryClient, Handle< PartitionComp< KeyClass, ValueClass >> partitionComp)