mirror of
https://github.com/privacore/open-source-search-engine.git
synced 2025-07-14 02:36:06 -04:00
Don't preallocate m_pendingDocIds when we're not going to use it
This commit is contained in:
@ -228,7 +228,7 @@ bool RdbBase::init(const char *dir,
|
||||
if (m_useIndexFile) {
|
||||
char indexName[64];
|
||||
sprintf(indexName, "%s-saved.idx", m_dbname);
|
||||
m_treeIndex.set(m_collectionDirName, indexName, m_fixedDataSize, m_useHalfKeys, m_ks, m_rdb->getRdbId());
|
||||
m_treeIndex.set(m_collectionDirName, indexName, m_fixedDataSize, m_useHalfKeys, m_ks, m_rdb->getRdbId(), false);
|
||||
|
||||
// only attempt to read/generate when we have tree/bucket
|
||||
if ((m_tree && m_tree->getNumUsedNodes() > 0) || (m_buckets && m_buckets->getNumKeys() > 0)) {
|
||||
@ -1004,7 +1004,7 @@ int32_t RdbBase::addFile ( bool isNew, int32_t fileId, int32_t fileId2, int32_t
|
||||
|
||||
// set the index file's filename
|
||||
generateIndexFilename(indexName,sizeof(indexName),fileId,fileId2,0,-1);
|
||||
in->set(dirName, indexName, m_fixedDataSize, m_useHalfKeys, m_ks, m_rdb->getRdbId());
|
||||
in->set(dirName, indexName, m_fixedDataSize, m_useHalfKeys, m_ks, m_rdb->getRdbId(), !isNew);
|
||||
if (!isNew && !(in->readIndex() && in->verifyIndex())) {
|
||||
// if out of memory, do not try to regen for that
|
||||
if (g_errno == ENOMEM) {
|
||||
|
27
RdbIndex.cpp
27
RdbIndex.cpp
@ -59,14 +59,16 @@ RdbIndex::~RdbIndex() {
|
||||
}
|
||||
}
|
||||
|
||||
void RdbIndex::reset() {
|
||||
void RdbIndex::reset(bool isStatic) {
|
||||
m_file.reset();
|
||||
|
||||
/// @todo ALC do we need to lock here?
|
||||
m_docIds.reset(new docids_t);
|
||||
|
||||
m_pendingDocIds.reset(new docids_t);
|
||||
m_pendingDocIds->reserve(m_generatingIndex ? s_generateReserveSize : s_defaultReserveSize);
|
||||
if (!isStatic) {
|
||||
m_pendingDocIds->reserve(m_generatingIndex ? s_generateReserveSize : s_defaultReserveSize);
|
||||
}
|
||||
|
||||
m_prevPendingDocId = MAX_DOCID + 1;
|
||||
m_lastMergeTime = gettimeofdayInMilliseconds();
|
||||
@ -111,11 +113,11 @@ void RdbIndex::mergePendingDocIds(void *state) {
|
||||
}
|
||||
|
||||
/// @todo ALC collapse RdbIndex::set into constructor
|
||||
void RdbIndex::set(const char *dir, const char *indexFilename, int32_t fixedDataSize , bool useHalfKeys ,
|
||||
char keySize, rdbid_t rdbId) {
|
||||
void RdbIndex::set(const char *dir, const char *indexFilename, int32_t fixedDataSize, bool useHalfKeys,
|
||||
char keySize, rdbid_t rdbId, bool isStatic) {
|
||||
logTrace(g_conf.m_logTraceRdbIndex, "BEGIN. dir [%s], indexFilename [%s]", dir, indexFilename);
|
||||
|
||||
reset();
|
||||
reset(isStatic);
|
||||
|
||||
m_fixedDataSize = fixedDataSize;
|
||||
m_file.set(dir, indexFilename);
|
||||
@ -123,9 +125,10 @@ void RdbIndex::set(const char *dir, const char *indexFilename, int32_t fixedData
|
||||
m_ks = keySize;
|
||||
m_rdbId = rdbId;
|
||||
|
||||
/// @todo ALC should we only register a sleep callback when we need it?
|
||||
/// if we're not merging/adding record we don't need to merge
|
||||
m_registeredCallback = g_loop.registerSleepCallback(1000, this, &timedMerge);
|
||||
if (!isStatic) {
|
||||
/// if we're not merging/adding record we don't need to merge
|
||||
m_registeredCallback = g_loop.registerSleepCallback(1000, this, &timedMerge);
|
||||
}
|
||||
}
|
||||
|
||||
bool RdbIndex::close(bool urgent) {
|
||||
@ -136,7 +139,7 @@ bool RdbIndex::close(bool urgent) {
|
||||
|
||||
// clears and frees everything
|
||||
if (!urgent) {
|
||||
reset();
|
||||
reset(true);
|
||||
}
|
||||
|
||||
if (m_registeredCallback) {
|
||||
@ -441,7 +444,7 @@ void RdbIndex::addList(RdbList *list) {
|
||||
}
|
||||
|
||||
bool RdbIndex::generateIndex(collnum_t collnum, const RdbTree *tree) {
|
||||
reset();
|
||||
reset(false);
|
||||
|
||||
if (g_conf.m_readOnlyMode) {
|
||||
return false;
|
||||
@ -475,7 +478,7 @@ bool RdbIndex::generateIndex(collnum_t collnum, const RdbTree *tree) {
|
||||
}
|
||||
|
||||
bool RdbIndex::generateIndex(collnum_t collnum, const RdbBuckets *buckets) {
|
||||
reset();
|
||||
reset(false);
|
||||
|
||||
if (g_conf.m_readOnlyMode) {
|
||||
return false;
|
||||
@ -511,7 +514,7 @@ bool RdbIndex::generateIndex(collnum_t collnum, const RdbBuckets *buckets) {
|
||||
// . attempts to auto-generate from data file, f
|
||||
// . returns false and sets g_errno on error
|
||||
bool RdbIndex::generateIndex(BigFile *f) {
|
||||
reset();
|
||||
reset(false);
|
||||
|
||||
if (g_conf.m_readOnlyMode) {
|
||||
return false;
|
||||
|
@ -27,10 +27,11 @@ public:
|
||||
|
||||
// . does not write data to disk
|
||||
// . frees all
|
||||
void reset();
|
||||
void reset(bool isStatic);
|
||||
|
||||
// set the filename, and if it's fixed data size or not
|
||||
void set(const char *dir, const char *indexFilename, int32_t fixedDataSize, bool useHalfKeys, char keySize, rdbid_t rdbId);
|
||||
void set(const char *dir, const char *indexFilename, int32_t fixedDataSize, bool useHalfKeys, char keySize,
|
||||
rdbid_t rdbId, bool isStatic);
|
||||
|
||||
bool rename(const char *newIndexFilename) {
|
||||
return m_file.rename(newIndexFilename, NULL);
|
||||
|
Reference in New Issue
Block a user