24 #include <sys/types.h>
44 if ((page = flushBuffer->popPageFromHead()) !=
nullptr) {
47 PDB_COUT <<
"Got a page with PageID " << page->getPageID()
49 PDB_COUT <<
"page dbId=" << page->getDbID() <<
"\n";
50 PDB_COUT <<
"page typeId=" << page->getTypeID() <<
"\n";
51 PDB_COUT <<
"page setId=" << page->getSetID() <<
"\n";
52 bool isTempSet =
false;
53 if ((page->getDbID() == 0) && (page->getTypeID() == 0)) {
57 set = this->
server->
getSet(page->getDbID(), page->getTypeID(), page->getSetID());
61 key.
dbId = page->getDbID();
62 key.
typeId = page->getTypeID();
63 key.
setId = page->getSetID();
64 key.
pageId = page->getPageID();
66 if ((set !=
nullptr) && (page->getRawBytes() !=
nullptr)) {
69 int ret = set->getFile()->appendPage(this->
partitionId, page);
71 PDB_COUT <<
"Can't write page with below info:\n";
72 PDB_COUT <<
"Got a page with PageID " << page->getPageID()
74 PDB_COUT <<
"page dbId=" << page->getDbID() <<
"\n";
75 PDB_COUT <<
"page typeId=" << page->getTypeID() <<
"\n";
76 PDB_COUT <<
"page setId=" << page->getSetID() <<
"\n";
78 set->lockDirtyPageSet();
79 if (isTempSet ==
false) {
80 PDB_COUT <<
"to write meta" << std::endl;
81 set->getFile()->writeMeta();
83 set->removePageFromDirtyPageSet(page->getPageID(), this->
partitionId, ret);
84 set->unlockDirtyPageSet();
85 PDB_COUT <<
"page with PageID " << page->getPageID()
86 <<
" appended to partition with PartitionID " << this->
partitionId <<
"\n";
88 #ifndef UNPIN_FOR_NON_ZERO_REF_COUNT
89 if ((page->getRawBytes() !=
nullptr) && (page->getRefCount() == 0) &&
90 (page->isInEviction() ==
true)) {
92 if ((page->getRawBytes() !=
nullptr) && (page->isInEviction() ==
true)) {
98 page->getSize() + 512);
99 PDB_COUT <<
"internalOffset=" << page->getInternalOffset() <<
"\n";
101 page->setRawBytes(
nullptr);
104 #ifndef UNPIN_FOR_NON_ZERO_REF_COUNT
105 if ((page->getRefCount() == 0) && (page->isInEviction() ==
true)) {
107 if (page->isInEviction() ==
true) {
111 page->setInFlush(
false);
112 page->setDirty(
false);
114 PDB_COUT <<
"PDBFlushConsumerWork: page freed from cache" << std::endl;
117 "PDBFlushConsumerWork: unlocked for flushUnlock()...");
shared_ptr< PDBPage > PDBPagePtr
FilePartitionID partitionId
PDBFlushConsumerWork(FilePartitionID partitionId, pdb::PangeaStorageServer *server)
TempSetPtr getTempSet(SetID setId)
pdb::PangeaStorageServer * server
SharedMemPtr getSharedMem()
void execute(PDBBuzzerPtr callerBuzzer) override
shared_ptr< PDBBuzzer > PDBBuzzerPtr
SetPtr getSet(std::pair< std::string, std::string > databaseAndSet)
PageCircularBufferPtr getFlushBuffer()
shared_ptr< UserSet > SetPtr
shared_ptr< PageCircularBuffer > PageCircularBufferPtr
unsigned int FilePartitionID