18 #ifndef FRONTEND_SERVER_CC
19 #define FRONTEND_SERVER_CC
27 #include <sys/types.h>
34 #include "BuiltInObjectTypeIDs.h"
72 HashPartitionedJoinBuildHTJobStage_TYPEID,
77 PDB_COUT <<
"Frontend got a request for HashPartitionedJoinBuildHTJobStage"
80 #ifdef EANBLE_LARGE_GRAPH
87 std::cout <<
"HashPartitionedJoinBuildHTJobStage: print inactive blocks:" << std::endl;
88 std::cout << out << std::endl;
91 if (communicatorToBackend->connectToLocalServer(
92 getFunctionality<PangeaStorageServer>().getLogger(),
93 getFunctionality<PangeaStorageServer>().getPathToBackEndServer(),
95 std::cout << errMsg << std::endl;
96 return std::make_pair(
false, errMsg);
98 PDB_COUT <<
"Frontend connected to backend" << std::endl;
101 deepCopyToCurrentAllocationBlock<HashPartitionedJoinBuildHTJobStage>(request);
102 PDB_COUT <<
"Created HashPartitionedJoinBuildHTJobStage object for forwarding"
108 std::string inDatabaseName = request->getSourceContext()->getDatabase();
109 std::string inSetName = request->getSourceContext()->getSetName();
111 makeObject<SetIdentifier>(inDatabaseName, inSetName);
112 PDB_COUT <<
"Created SetIdentifier object for input" << std::endl;
113 SetPtr inputSet = getFunctionality<PangeaStorageServer>().getSet(
114 std::pair<std::string, std::string>(inDatabaseName, inSetName));
115 if (inputSet ==
nullptr) {
116 PDB_COUT <<
"FrontendQueryTestServer: input set doesn't exist in this machine"
122 result->setNumPages(0);
123 result->setPageSize(0);
124 PDB_COUT <<
"Query is done without data. " << std::endl;
126 if (!sendUsingMe->sendObject(result, errMsg)) {
127 return std::make_pair(
false, errMsg);
129 return std::make_pair(
true, std::string(
"execution complete"));
131 inputSet->unpinBufferPage();
132 getFunctionality<PangeaStorageServer>().
cleanup();
134 sourceContext->setDatabaseId(inputSet->getDbID());
135 sourceContext->setTypeId(inputSet->getTypeID());
136 sourceContext->setSetId(inputSet->getSetID());
137 sourceContext->setPageSize(inputSet->getPageSize());
138 newRequest->setSourceContext(sourceContext);
139 std::cout <<
"HashPartitioned data set size: " << inputSet->getNumPages() <<
" pages"
141 newRequest->setNumPages(inputSet->getNumPages());
142 std::cout <<
"Input is set with setName=" << inSetName
143 <<
", setId=" << inputSet->getSetID() << std::endl;
149 if (inputSet->getNumPages() == 0) {
150 std::cout <<
"WARNING: repartitioned data size is 0" << std::endl;
153 if (!communicatorToBackend->sendObject(newRequest, errMsg)) {
154 std::cout << errMsg << std::endl;
155 errMsg = std::string(
"can't send message to backend: ") + errMsg;
158 PDB_COUT <<
"Frontend sent request to backend" << std::endl;
162 std::cout <<
"Error waiting for backend to finish this job stage. " << errMsg
164 errMsg = std::string(
"backend failure: ") + errMsg;
171 result->setNumPages(inputSet->getNumPages());
172 result->setPageSize(inputSet->getPageSize());
173 if (success ==
true) {
174 PDB_COUT <<
"Stage is done. " << std::endl;
175 errMsg = std::string(
"execution complete");
177 std::cout <<
"Stage failed at server" << std::endl;
180 if (!sendUsingMe->sendObject(result, errMsg)) {
181 return std::make_pair(
false, errMsg);
183 if (success ==
false) {
186 return std::make_pair(success, errMsg);
191 BroadcastJoinBuildHTJobStage_TYPEID,
197 PDB_COUT <<
"Frontend got a request for BroadcastJoinBuildHTJobStage" << std::endl;
199 #ifdef ENABLE_LARGE_GRAPH
206 std::cout <<
"BroadcastJoinBuildHTJobStage: print inactive blocks:" << std::endl;
207 std::cout << out << std::endl;
210 if (communicatorToBackend->connectToLocalServer(
211 getFunctionality<PangeaStorageServer>().getLogger(),
212 getFunctionality<PangeaStorageServer>().getPathToBackEndServer(),
214 std::cout << errMsg << std::endl;
215 return std::make_pair(
false, errMsg);
217 PDB_COUT <<
"Frontend connected to backend" << std::endl;
220 deepCopyToCurrentAllocationBlock<BroadcastJoinBuildHTJobStage>(request);
221 PDB_COUT <<
"Created BroadcastJoinBuildHTJobStage object for forwarding" << std::endl;
226 std::string inDatabaseName = request->getSourceContext()->getDatabase();
227 std::string inSetName = request->getSourceContext()->getSetName();
229 makeObject<SetIdentifier>(inDatabaseName, inSetName);
230 PDB_COUT <<
"Created SetIdentifier object for input" << std::endl;
231 SetPtr inputSet = getFunctionality<PangeaStorageServer>().getSet(
232 std::pair<std::string, std::string>(inDatabaseName, inSetName));
233 if (inputSet ==
nullptr) {
234 PDB_COUT <<
"FrontendQueryTestServer: input set doesn't exist in this machine"
240 result->setNumPages(0);
241 result->setPageSize(0);
242 PDB_COUT <<
"Query is done without data. " << std::endl;
244 if (!sendUsingMe->sendObject(result, errMsg)) {
245 return std::make_pair(
false, errMsg);
247 return std::make_pair(
true, std::string(
"execution complete"));
250 inputSet->unpinBufferPage();
251 getFunctionality<PangeaStorageServer>().
cleanup();
253 sourceContext->setDatabaseId(inputSet->getDbID());
254 sourceContext->setTypeId(inputSet->getTypeID());
255 sourceContext->setSetId(inputSet->getSetID());
256 sourceContext->setPageSize(inputSet->getPageSize());
257 newRequest->setSourceContext(sourceContext);
258 std::cout <<
"Broadcasted data set size: " << inputSet->getNumPages() <<
" pages"
260 newRequest->setNumPages(inputSet->getNumPages());
261 PDB_COUT <<
"Input is set with setName=" << inSetName
262 <<
", setId=" << inputSet->getSetID() << std::endl;
268 if (inputSet->getNumPages() != 0) {
270 if (!communicatorToBackend->sendObject(newRequest, errMsg)) {
271 std::cout << errMsg << std::endl;
272 errMsg = std::string(
"can't send message to backend: ") + errMsg;
275 PDB_COUT <<
"Frontend sent request to backend" << std::endl;
279 std::cout <<
"Error waiting for backend to finish this job stage. "
280 << errMsg << std::endl;
281 errMsg = std::string(
"backend failure: ") + errMsg;
287 errMsg = std::string(
"Error: broadcasted data size is 0");
288 std::cout << errMsg << std::endl;
294 result->setNumPages(inputSet->getNumPages());
295 result->setPageSize(inputSet->getPageSize());
296 if (success ==
true) {
297 PDB_COUT <<
"Stage is done. " << std::endl;
298 errMsg = std::string(
"execution complete");
300 std::cout <<
"Stage failed at server" << std::endl;
303 if (!sendUsingMe->sendObject(result, errMsg)) {
304 return std::make_pair(
false, errMsg);
306 if (success ==
false) {
309 return std::make_pair(success, errMsg);
318 AggregationJobStage_TYPEID,
323 PDB_COUT <<
"Frontend got a request for AggregationJobStage" << std::endl;
325 #ifdef ENABLE_LARGE_GRAPH
332 std::cout <<
"AggregationJobStage: print inactive blocks:" << std::endl;
333 std::cout << out << std::endl;
336 if (communicatorToBackend->connectToLocalServer(
337 getFunctionality<PangeaStorageServer>().getLogger(),
338 getFunctionality<PangeaStorageServer>().getPathToBackEndServer(),
340 std::cout << errMsg << std::endl;
341 return std::make_pair(
false, errMsg);
343 PDB_COUT <<
"Frontend connected to backend" << std::endl;
345 makeObject<AggregationJobStage>(request->getStageId(),
346 request->needsToMaterializeAggOut(),
347 request->getAggComputation(),
348 request->getNumNodePartitions());
349 PDB_COUT <<
"Created AggregationJobStage object for forwarding" << std::endl;
354 std::string inDatabaseName = request->getSourceContext()->getDatabase();
355 std::string inSetName = request->getSourceContext()->getSetName();
357 makeObject<SetIdentifier>(inDatabaseName, inSetName);
358 PDB_COUT <<
"Created SetIdentifier object for input" << std::endl;
359 SetPtr inputSet = getFunctionality<PangeaStorageServer>().getSet(
360 std::pair<std::string, std::string>(inDatabaseName, inSetName));
361 if (inputSet ==
nullptr) {
362 PDB_COUT <<
"FrontendQueryTestServer: input set doesn't exist in this machine"
368 makeObject<SetIdentifier>(request->getSinkContext()->getDatabase(),
369 request->getSinkContext()->getSetName());
370 result->setNumPages(0);
372 getFunctionality<PangeaStorageServer>().getConf()->getPageSize());
373 PDB_COUT <<
"Query is done without data. " << std::endl;
375 if (!sendUsingMe->sendObject(result, errMsg)) {
376 return std::make_pair(
false, errMsg);
378 return std::make_pair(
true, std::string(
"execution complete"));
381 getFunctionality<PangeaStorageServer>().
cleanup(
false);
382 PDB_COUT <<
"input set size=" << inputSet->getNumPages() << std::endl;
384 sourceContext->setDatabaseId(inputSet->getDbID());
385 sourceContext->setTypeId(inputSet->getTypeID());
386 sourceContext->setSetId(inputSet->getSetID());
387 sourceContext->setPageSize(inputSet->getPageSize());
388 newRequest->setSourceContext(sourceContext);
389 PDB_COUT <<
"Input is set with setName=" << inSetName
390 <<
", setId=" << inputSet->getSetID() << std::endl;
394 std::string outDatabaseName = request->getSinkContext()->getDatabase();
395 std::string outSetName = request->getSinkContext()->getSetName();
396 SetType outSetType = request->getSinkContext()->getSetType();
397 bool isAggResult = request->getSinkContext()->isAggregationResult();
401 std::pair<std::string, std::string> outDatabaseAndSet =
402 std::make_pair(outDatabaseName, outSetName);
403 SetPtr outputSet = getFunctionality<PangeaStorageServer>().getSet(outDatabaseAndSet);
405 success = getFunctionality<PangeaStorageServer>().addSet(
406 outDatabaseName, request->getOutputTypeName(), outSetName);
407 outputSet = getFunctionality<PangeaStorageServer>().getSet(outDatabaseAndSet);
408 PDB_COUT <<
"Output set is created in storage" << std::endl;
411 if (success ==
true) {
412 newRequest->setOutputTypeName(request->getOutputTypeName());
414 makeObject<SetIdentifier>(outDatabaseName, outSetName, outSetType, isAggResult);
416 sinkContext->setDatabaseId(outputSet->getDbID());
417 sinkContext->setTypeId(outputSet->getTypeID());
418 sinkContext->setSetId(outputSet->getSetID());
419 sinkContext->setPageSize(outputSet->getPageSize());
421 newRequest->setSinkContext(sinkContext);
424 makeObject<SetIdentifier>(outDatabaseName, outSetName);
425 result->setNumPages(0);
426 result->setPageSize(0);
427 PDB_COUT <<
"Query failed: not able to create output set. " << std::endl;
429 if (!sendUsingMe->sendObject(result, errMsg)) {
430 return std::make_pair(
false, errMsg);
432 return std::make_pair(
true,
433 std::string(
"Query failed: not able to create output set"));
436 newRequest->setJobId(request->getJobId());
437 newRequest->setTotalMemoryOnThisNode(request->getTotalMemoryOnThisNode());
441 if (!communicatorToBackend->sendObject(newRequest, errMsg)) {
442 std::cout << errMsg << std::endl;
443 errMsg = std::string(
"can't send message to backend: ") + errMsg;
446 PDB_COUT <<
"Frontend sent request to backend" << std::endl;
450 std::cout <<
"Error waiting for backend to finish this job stage. " << errMsg
452 errMsg = std::string(
"backend failure: ") + errMsg;
461 result->setNumPages(outputSet->getNumPages());
462 result->setPageSize(outputSet->getPageSize());
466 result->setNumPages(inputSet->getNumPages());
467 result->setPageSize(inputSet->getPageSize());
469 if (success ==
true) {
470 PDB_COUT <<
"Stage is done. " << std::endl;
471 errMsg = std::string(
"execution complete");
473 std::cout <<
"Stage failed at server" << std::endl;
476 if (!sendUsingMe->sendObject(result, errMsg)) {
477 return std::make_pair(
false, errMsg);
479 if (success ==
false) {
482 return std::make_pair(success, errMsg);
489 TupleSetJobStage_TYPEID,
494 PDB_COUT <<
"Frontend got a request for TupleSetJobStage" << std::endl;
496 #ifdef ENABLE_LARGE_GRAPH
503 std::cout <<
"TupleSetJobStage: print inactive blocks:" << std::endl;
504 std::cout << out << std::endl;
507 if (communicatorToBackend->connectToLocalServer(
508 getFunctionality<PangeaStorageServer>().getLogger(),
509 getFunctionality<PangeaStorageServer>().getPathToBackEndServer(),
511 std::cout << errMsg << std::endl;
512 return std::make_pair(
false, errMsg);
514 PDB_COUT <<
"Frontend connected to backend" << std::endl;
516 deepCopyToCurrentAllocationBlock<TupleSetJobStage>(request);
518 PDB_COUT <<
"Created TupleSetJobStage object for forwarding" << std::endl;
519 std::string inDatabaseName = request->getSourceContext()->getDatabase();
520 std::string inSetName = request->getSourceContext()->getSetName();
521 if (request->isInputAggHashOut() ==
false) {
524 makeObject<SetIdentifier>(inDatabaseName, inSetName);
525 PDB_COUT <<
"Created SetIdentifier object for input" << std::endl;
526 SetPtr inputSet = getFunctionality<PangeaStorageServer>().getSet(
527 std::pair<std::string, std::string>(inDatabaseName, inSetName));
528 if (inputSet ==
nullptr) {
529 PDB_COUT <<
"FrontendQueryTestServer: input set doesn't exist in this machine"
535 makeObject<SetIdentifier>(request->getSinkContext()->getDatabase(),
536 request->getSinkContext()->getSetName());
537 result->setNumPages(0);
539 getFunctionality<PangeaStorageServer>().getConf()->getPageSize());
540 PDB_COUT <<
"Stage is done without input. " << std::endl;
542 if (!sendUsingMe->sendObject(result, errMsg)) {
543 return std::make_pair(
false, errMsg);
545 return std::make_pair(
true, std::string(
"execution complete"));
548 inputSet->unpinBufferPage();
549 getFunctionality<PangeaStorageServer>().
cleanup(
false);
551 std::cout <<
"number of pages in set " << inSetName <<
" is "
552 << inputSet->getNumPages() << std::endl;
553 if (inputSet->getNumPages() == 0) {
554 PDB_COUT <<
"FrontendQueryTestServer: input set doesn't have any pages in this machine"
560 makeObject<SetIdentifier>(request->getSinkContext()->getDatabase(),
561 request->getSinkContext()->getSetName());
562 result->setNumPages(0);
564 inputSet->getPageSize());
565 PDB_COUT <<
"Stage is done without data. " << std::endl;
567 if (!sendUsingMe->sendObject(result, errMsg)) {
568 return std::make_pair(
false, errMsg);
570 return std::make_pair(
true, std::string(
"execution complete"));
573 sourceContext->setDatabaseId(inputSet->getDbID());
574 sourceContext->setTypeId(inputSet->getTypeID());
575 sourceContext->setSetId(inputSet->getSetID());
576 sourceContext->setPageSize(inputSet->getPageSize());
577 newRequest->setSourceContext(sourceContext);
578 PDB_COUT <<
"Input is set with setName=" << inSetName
579 <<
", setId=" << inputSet->getSetID() << std::endl;
581 PDB_COUT <<
"Input is hash table output from aggregation" << std::endl;
584 std::string outDatabaseName = request->getSinkContext()->getDatabase();
585 std::string outSetName = request->getSinkContext()->getSetName();
589 std::pair<std::string, std::string> outDatabaseAndSet =
590 std::make_pair(outDatabaseName, outSetName);
591 SetPtr outputSet = getFunctionality<PangeaStorageServer>().getSet(outDatabaseAndSet);
592 if (outputSet ==
nullptr) {
593 success = getFunctionality<PangeaStorageServer>().addSet(
594 outDatabaseName, request->getOutputTypeName(), outSetName);
595 outputSet = getFunctionality<PangeaStorageServer>().getSet(outDatabaseAndSet);
596 PDB_COUT <<
"Output set is created in storage with database=" << outDatabaseName
597 <<
", set=" << outSetName <<
", type=IntermediateData" << std::endl;
600 if (success ==
true) {
602 makeObject<SetIdentifier>(outDatabaseName, outSetName);
603 PDB_COUT <<
"Created SetIdentifier object for output with setName=" << outSetName
604 <<
", setId=" << outputSet->getSetID() << std::endl;
605 sinkContext->setDatabaseId(outputSet->getDbID());
606 sinkContext->setTypeId(outputSet->getTypeID());
607 sinkContext->setSetId(outputSet->getSetID());
608 sinkContext->setPageSize(outputSet->getPageSize());
609 newRequest->setSinkContext(sinkContext);
610 newRequest->setOutputTypeName(request->getOutputTypeName());
614 makeObject<SetIdentifier>(outDatabaseName, outSetName);
615 result->setNumPages(0);
617 getFunctionality<PangeaStorageServer>().getConf()->getPageSize());
618 PDB_COUT <<
"Stage failed: not able to create output set. " << std::endl;
620 if (!sendUsingMe->sendObject(result, errMsg)) {
621 return std::make_pair(
false, errMsg);
623 return std::make_pair(
true,
624 std::string(
"Query failed: not able to create output set"));
627 bool needsRemoveCombinerSet =
false;
628 SetPtr combinerSet =
nullptr;
629 std::string combinerDatabaseName;
630 std::string combinerSetName;
631 if (request->getCombinerContext() !=
nullptr) {
632 combinerDatabaseName = request->getCombinerContext()->getDatabase();
633 combinerSetName = request->getCombinerContext()->getSetName();
637 std::pair<std::string, std::string> combinerDatabaseAndSet =
638 std::make_pair(combinerDatabaseName, combinerSetName);
640 getFunctionality<PangeaStorageServer>().getSet(combinerDatabaseAndSet);
641 if (combinerSet ==
nullptr) {
642 success = getFunctionality<PangeaStorageServer>().addSet(combinerDatabaseName,
645 getFunctionality<PangeaStorageServer>().getSet(combinerDatabaseAndSet);
646 needsRemoveCombinerSet =
true;
647 PDB_COUT <<
"Combiner set is created in storage" << std::endl;
651 if (success ==
true) {
652 if (combinerSet !=
nullptr) {
654 makeObject<SetIdentifier>(combinerDatabaseName, combinerSetName);
655 PDB_COUT <<
"Created SetIdentifier object for combiner with setName="
656 << combinerSetName <<
", setId=" << combinerSet->getSetID()
658 combinerContext->setDatabaseId(combinerSet->getDbID());
659 combinerContext->setTypeId(combinerSet->getTypeID());
660 combinerContext->setSetId(combinerSet->getSetID());
661 combinerContext->setPageSize(combinerSet->getPageSize());
662 newRequest->setCombinerContext(combinerContext);
664 newRequest->setCombinerContext(
nullptr);
669 if (!communicatorToBackend->sendObject(newRequest, errMsg)) {
670 std::cout << errMsg << std::endl;
671 errMsg = std::string(
"can't send message to backend: ") + errMsg;
674 PDB_COUT <<
"Frontend sent request to backend" << std::endl;
678 std::cout <<
"Error waiting for backend to finish this job stage. "
679 << errMsg << std::endl;
680 errMsg = std::string(
"backend failure: ") + errMsg;
685 if (needsRemoveCombinerSet ==
true) {
687 getFunctionality<PangeaStorageServer>().removeSet(combinerDatabaseName,
693 result->setNumPages(outputSet->getNumPages());
694 result->setPageSize(outputSet->getPageSize());
695 if (success ==
true) {
696 PDB_COUT <<
"Stage is done. " << std::endl;
697 errMsg = std::string(
"execution complete");
699 std::cout <<
"Stage failed at server" << std::endl;
702 if (!sendUsingMe->sendObject(result, errMsg)) {
703 return std::make_pair(
false, errMsg);
705 if (success ==
false) {
708 return std::make_pair(success, errMsg);
722 if ((!getFunctionality<CatalogServer>().deleteSet(
723 request->whichDatabase(), request->whichSet(), errMsg)) ||
724 (!getFunctionality<PangeaStorageServer>().removeSet(request->whichDatabase(),
725 request->whichSet()))) {
727 false, std::string(
"error attempting to delete set: " + errMsg));
728 if (!sendUsingMe->sendObject(result, errMsg)) {
729 return std::make_pair(
false, errMsg);
733 true, std::string(
"successfully deleted set"));
734 if (!sendUsingMe->sendObject(result, errMsg)) {
735 return std::make_pair(
false, errMsg);
738 return std::make_pair(
true, std::string(
"delete complete"));
752 std::string whichDatabase = request->getDatabase();
753 std::string whichSet = request->getSetName();
754 PDB_COUT <<
"we are now iterating set:" << whichSet << std::endl;
756 SetPtr loopingSet = getFunctionality<PangeaStorageServer>().getSet(
757 std::make_pair(whichDatabase, whichSet));
758 if (loopingSet ==
nullptr) {
759 errMsg =
"FATAL ERROR in handling SetScan request: set doesn't exist";
760 std::cout << errMsg << std::endl;
761 return std::make_pair(
false, errMsg);
763 std::cout <<
"To scan set " << whichDatabase <<
":" << whichSet <<
764 " with " << loopingSet->getNumPages() <<
" pages." << std::endl;
766 loopingSet->setPinned(
true);
767 vector<PageIteratorPtr> *pageIters = loopingSet->getIterators();
769 int numIterators = pageIters->size();
770 for (
int i = 0; i < numIterators; i++) {
772 while (iter->hasNext()) {
775 if (nextPage !=
nullptr) {
779 if (inputVec ==
nullptr) {
780 std::cout <<
"no vector in this page" << std::endl;
782 PageCachePtr cache = getFunctionality<PangeaStorageServer>().getCache();
784 key.
dbId = nextPage->getDbID();
785 key.
typeId = nextPage->getTypeID();
786 key.
setId = nextPage->getSetID();
787 key.
pageId = nextPage->getPageID();
788 cache->decPageRefCount(key);
789 #ifndef REMOVE_SET_WITH_EVICTION
790 cache->evictPage(key);
797 int vecSize = inputVec->size();
800 #ifdef ENABLE_COMPRESSION
801 char *newRecord = (
char *) calloc(nextPage->getSize(), 1);
802 myRec =
getRecord(inputVec, newRecord, nextPage->getSize());
803 char *compressedBytes =
804 new char[snappy::MaxCompressedLength(myRec->
numBytes())];
805 size_t compressedSize;
806 snappy::RawCompress((
char *) (myRec),
810 std::cout <<
"Frontend=>Client: size before compression is "
811 << myRec->
numBytes() <<
" and size after compression is "
812 << compressedSize << std::endl;
813 sendUsingMe->sendBytes(compressedBytes, compressedSize, errMsg);
815 delete[] compressedBytes;
818 if (!sendUsingMe->sendBytes(
819 nextPage->getBytes(), nextPage->getSize(), errMsg)) {
820 return std::make_pair(
false, errMsg);
825 if (sendUsingMe->getObjectTypeID() != DoneWithResult_TYPEID) {
827 sendUsingMe->getNextObject<
KeepGoing>(success, errMsg);
828 PDB_COUT <<
"Keep going" << std::endl;
830 return std::make_pair(
false, errMsg);
836 return std::make_pair(
false, errMsg);
838 return std::make_pair(
true, std::string(
"everything OK!"));
842 PageCachePtr cache = getFunctionality<PangeaStorageServer>().getCache();
844 key.
dbId = nextPage->getDbID();
845 key.
typeId = nextPage->getTypeID();
846 key.
setId = nextPage->getSetID();
847 key.
pageId = nextPage->getPageID();
848 cache->decPageRefCount(key);
849 #ifndef REMOVE_SET_WITH_EVICTION
850 cache->evictPage(key);
854 PDB_COUT <<
"We've got a null page!!!" << std::endl;
858 loopingSet->setPinned(
false);
863 if (!sendUsingMe->sendObject(temp, errMsg)) {
864 return std::make_pair(
false,
"could not send done message: " + errMsg);
867 std::cout <<
"We have finished scanning this set" << std::endl;
868 return std::make_pair(
true, std::string(
"query completed!!"));
shared_ptr< PDBPage > PDBPagePtr
Handle< ObjType > getRootObject()
shared_ptr< PageCache > PageCachePtr
FrontendQueryTestServer()
shared_ptr< PageIteratorInterface > PageIteratorPtr
Allocator & getAllocator()
Record< ObjType > * getRecord(Handle< ObjType > &forMe)
std::shared_ptr< PDBCommunicator > PDBCommunicatorPtr
void registerHandlers(PDBServer &forMe) override
void registerHandler(int16_t typeID, PDBCommWorkPtr handledBy)
shared_ptr< UserSet > SetPtr
~FrontendQueryTestServer()
void makeObjectAllocatorBlock(size_t numBytesIn, bool throwExceptionOnFail)
std::string printInactiveBlocks()