You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
MCOL-3251
Moved the new logic into we_fileop to maintain existing encapsulation.
This commit is contained in:
@ -1356,69 +1356,16 @@ ioManager::ioManager(FileBufferMgr& fbm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fThreadCount = thrCount;
|
fThreadCount = thrCount;
|
||||||
lastConfigMTime = 0;
|
|
||||||
loadDBRootCache();
|
|
||||||
go();
|
go();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ioManager::loadDBRootCache()
|
|
||||||
{
|
|
||||||
if (fConfig->getLastMTime() == lastConfigMTime)
|
|
||||||
return;
|
|
||||||
|
|
||||||
char buf[100];
|
|
||||||
dbRootCache.clear();
|
|
||||||
|
|
||||||
// this will grab all of the dbroots on the cluster, not just the ones on this node
|
|
||||||
// for simplicity.
|
|
||||||
oam::Oam OAM;
|
|
||||||
oam::DBRootConfigList dbRoots;
|
|
||||||
OAM.getSystemDbrootConfig(dbRoots);
|
|
||||||
for (auto _dbroot : dbRoots)
|
|
||||||
{
|
|
||||||
sprintf(buf, "DBRoot%d", _dbroot);
|
|
||||||
string location = fConfig->getConfig("SystemConfig", buf);
|
|
||||||
dbRootCache[_dbroot] = location;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ioManager::buildOidFileName(const BRM::OID_t oid, uint16_t dbRoot, const uint16_t partNum, const uint32_t segNum, char* file_name)
|
void ioManager::buildOidFileName(const BRM::OID_t oid, uint16_t dbRoot, const uint16_t partNum, const uint32_t segNum, char* file_name)
|
||||||
{
|
{
|
||||||
// when it's a request for the version buffer, the dbroot comes in as 0 for legacy reasons
|
// when it's a request for the version buffer, the dbroot comes in as 0 for legacy reasons
|
||||||
if (dbRoot == 0 && oid < 1000)
|
if (dbRoot == 0 && oid < 1000)
|
||||||
dbRoot = fdbrm.getDBRootOfVBOID(oid);
|
dbRoot = fdbrm.getDBRootOfVBOID(oid);
|
||||||
|
|
||||||
boost::unique_lock<boost::mutex> lock(dbRootCacheLock);
|
fFileOp.getFileNameForPrimProc(oid, file_name, dbRoot, partNum, segNum);
|
||||||
loadDBRootCache();
|
|
||||||
string dbRootPath;
|
|
||||||
auto it = dbRootCache.find(dbRoot);
|
|
||||||
if (it == dbRootCache.end())
|
|
||||||
{
|
|
||||||
ostringstream oss;
|
|
||||||
oss << "(dbroot " << dbRoot << " offline)";
|
|
||||||
dbRootPath = oss.str();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
dbRootPath = it->second;
|
|
||||||
lock.unlock();
|
|
||||||
|
|
||||||
// different filenames for the version buffer files
|
|
||||||
if (oid < 1000)
|
|
||||||
snprintf(file_name, WriteEngine::FILE_NAME_SIZE, "%s/versionbuffer.cdf", dbRootPath.c_str());
|
|
||||||
else
|
|
||||||
snprintf(file_name, WriteEngine::FILE_NAME_SIZE, "%s/%03u.dir/%03u.dir/%03u.dir/%03u.dir/%03u.dir/FILE%03d.cdf",
|
|
||||||
dbRootPath.c_str(), oid >> 24, (oid & 0x00ff0000) >> 16, (oid & 0x0000ff00) >> 8,
|
|
||||||
oid & 0x000000ff, partNum, segNum);
|
|
||||||
|
|
||||||
|
|
||||||
/* old version
|
|
||||||
if (fFileOp.getFileName(oid, file_name, dbRoot, partNum, segNum) != WriteEngine::NO_ERROR)
|
|
||||||
{
|
|
||||||
file_name[0] = 0;
|
|
||||||
throw std::runtime_error("fileOp.getFileName failed");
|
|
||||||
}
|
|
||||||
//cout << "Oid2Filename o: " << oid << " n: " << file_name << endl;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const int ioManager::localLbidLookup(BRM::LBID_t lbid,
|
const int ioManager::localLbidLookup(BRM::LBID_t lbid,
|
||||||
|
@ -153,12 +153,6 @@ private:
|
|||||||
uint32_t fDecreaseOpenFilesCount;
|
uint32_t fDecreaseOpenFilesCount;
|
||||||
bool fFDCacheTrace;
|
bool fFDCacheTrace;
|
||||||
std::ofstream fFDTraceFile;
|
std::ofstream fFDTraceFile;
|
||||||
|
|
||||||
std::map<int, std::string> dbRootCache;
|
|
||||||
boost::mutex dbRootCacheLock;
|
|
||||||
void loadDBRootCache();
|
|
||||||
time_t lastConfigMTime;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// @bug2631, for remount filesystem by loadBlock() in primitiveserver
|
// @bug2631, for remount filesystem by loadBlock() in primitiveserver
|
||||||
|
@ -2412,6 +2412,29 @@ int FileOp::oid2FileName( FID fid,
|
|||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FileOp::getFileNameForPrimProc(FID fid,
|
||||||
|
char* fullFileName,
|
||||||
|
uint16_t dbRoot,
|
||||||
|
uint32_t partition,
|
||||||
|
uint16_t segment) const
|
||||||
|
{
|
||||||
|
string dbRootPath = Config::getDBRootByNum(dbRoot);
|
||||||
|
if (dbRootPath.empty())
|
||||||
|
{
|
||||||
|
ostringstream oss;
|
||||||
|
oss << "(dbroot " << dbRoot << " offline)";
|
||||||
|
dbRootPath = oss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
// different filenames for the version buffer files
|
||||||
|
if (fid < 1000)
|
||||||
|
snprintf(fullFileName, FILE_NAME_SIZE, "%s/versionbuffer.cdf", dbRootPath.c_str());
|
||||||
|
else
|
||||||
|
snprintf(fullFileName, FILE_NAME_SIZE, "%s/%03u.dir/%03u.dir/%03u.dir/%03u.dir/%03u.dir/FILE%03d.cdf",
|
||||||
|
dbRootPath.c_str(), fid >> 24, (fid & 0x00ff0000) >> 16, (fid & 0x0000ff00) >> 8,
|
||||||
|
fid & 0x000000ff, partition, segment);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************
|
/***********************************************************
|
||||||
* DESCRIPTION:
|
* DESCRIPTION:
|
||||||
* Search for directory path associated with specified OID.
|
* Search for directory path associated with specified OID.
|
||||||
|
@ -310,6 +310,12 @@ public:
|
|||||||
uint32_t partition,
|
uint32_t partition,
|
||||||
uint16_t segment ) const;
|
uint16_t segment ) const;
|
||||||
|
|
||||||
|
/* Added for MCOL-3251 */
|
||||||
|
void getFileNameForPrimProc(FID fid, char* fileName,
|
||||||
|
uint16_t dbRoot,
|
||||||
|
uint32_t partition,
|
||||||
|
uint16_t segment ) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Construct directory path for the specified fid (OID), DBRoot, and
|
* @brief Construct directory path for the specified fid (OID), DBRoot, and
|
||||||
* partition number. Directory does not have to exist, nor is it created.
|
* partition number. Directory does not have to exist, nor is it created.
|
||||||
|
Reference in New Issue
Block a user