mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-14 23:33:38 +00:00
Added db size threshold option
This commit is contained in:
@@ -3459,6 +3459,11 @@ void MeshServer_ConnectEx(MeshAgentHostContainer *agent)
|
|||||||
}
|
}
|
||||||
free(host);
|
free(host);
|
||||||
}
|
}
|
||||||
|
void MeshServer_DbWarning(ILibSimpleDataStore db, uint64_t size, void *user)
|
||||||
|
{
|
||||||
|
MeshAgentHostContainer *agent = (MeshAgentHostContainer*)user;
|
||||||
|
MeshAgent_sendConsoleText(agent->meshCoreCtx, "Database Size Warning: [%u bytes]", size);
|
||||||
|
}
|
||||||
void MeshServer_Connect(MeshAgentHostContainer *agent)
|
void MeshServer_Connect(MeshAgentHostContainer *agent)
|
||||||
{
|
{
|
||||||
unsigned int timeout;
|
unsigned int timeout;
|
||||||
@@ -3469,6 +3474,7 @@ void MeshServer_Connect(MeshAgentHostContainer *agent)
|
|||||||
util_random(sizeof(int), (char*)&timeout);
|
util_random(sizeof(int), (char*)&timeout);
|
||||||
gRemoteMouseRenderDefault = ILibSimpleDataStore_Get(agent->masterDb, "remoteMouseRender", NULL, 0);
|
gRemoteMouseRenderDefault = ILibSimpleDataStore_Get(agent->masterDb, "remoteMouseRender", NULL, 0);
|
||||||
ILibSimpleDataStore_ConfigCompact(agent->masterDb, ILibSimpleDataStore_GetInt(agent->masterDb, "compactDirtyMinimum", 0));
|
ILibSimpleDataStore_ConfigCompact(agent->masterDb, ILibSimpleDataStore_GetInt(agent->masterDb, "compactDirtyMinimum", 0));
|
||||||
|
ILibSimpleDataStore_ConfigSizeLimit(agent->masterDb, ILibSimpleDataStore_GetInt(agent->masterDb, "dbWarningSizeThreshold", 0), MeshServer_DbWarning, agent);
|
||||||
agent->disableUpdate = ILibSimpleDataStore_Get(agent->masterDb, "disableUpdate", NULL, 0);
|
agent->disableUpdate = ILibSimpleDataStore_Get(agent->masterDb, "disableUpdate", NULL, 0);
|
||||||
agent->forceUpdate = ILibSimpleDataStore_Get(agent->masterDb, "forceUpdate", NULL, 0);
|
agent->forceUpdate = ILibSimpleDataStore_Get(agent->masterDb, "forceUpdate", NULL, 0);
|
||||||
agent->logUpdate = ILibSimpleDataStore_Get(agent->masterDb, "logUpdate", NULL, 0);
|
agent->logUpdate = ILibSimpleDataStore_Get(agent->masterDb, "logUpdate", NULL, 0);
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ typedef struct ILibSimpleDataStore_Root
|
|||||||
uint64_t fileSize;
|
uint64_t fileSize;
|
||||||
uint64_t dirtySize;
|
uint64_t dirtySize;
|
||||||
uint64_t minimumDirtySize;
|
uint64_t minimumDirtySize;
|
||||||
|
uint64_t warningSize;
|
||||||
|
ILibSimpleDataStore_SizeWarningHandler warningSink;
|
||||||
|
void* warningSinkUser;
|
||||||
int error;
|
int error;
|
||||||
} ILibSimpleDataStore_Root;
|
} ILibSimpleDataStore_Root;
|
||||||
|
|
||||||
@@ -602,6 +605,7 @@ __EXPORT_TYPE void ILibSimpleDataStore_Close(ILibSimpleDataStore dataStore)
|
|||||||
// Store a key/value pair in the data store
|
// Store a key/value pair in the data store
|
||||||
__EXPORT_TYPE int ILibSimpleDataStore_PutEx(ILibSimpleDataStore dataStore, char* key, int keyLen, char* value, int valueLen)
|
__EXPORT_TYPE int ILibSimpleDataStore_PutEx(ILibSimpleDataStore dataStore, char* key, int keyLen, char* value, int valueLen)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
char hash[SHA384HASHSIZE];
|
char hash[SHA384HASHSIZE];
|
||||||
ILibSimpleDataStore_Root *root = (ILibSimpleDataStore_Root*)dataStore;
|
ILibSimpleDataStore_Root *root = (ILibSimpleDataStore_Root*)dataStore;
|
||||||
ILibSimpleDataStore_TableEntry *entry;
|
ILibSimpleDataStore_TableEntry *entry;
|
||||||
@@ -628,7 +632,12 @@ __EXPORT_TYPE int ILibSimpleDataStore_PutEx(ILibSimpleDataStore dataStore, char*
|
|||||||
root->fileSize = ILibSimpleDataStore_GetPosition(root->dataFile); // Update the size of the data store;
|
root->fileSize = ILibSimpleDataStore_GetPosition(root->dataFile); // Update the size of the data store;
|
||||||
|
|
||||||
// Add the record to the data store
|
// Add the record to the data store
|
||||||
return ILibHashtable_Put(root->keyTable, NULL, key, keyLen, entry) == NULL ? 0 : 1;
|
ret = ILibHashtable_Put(root->keyTable, NULL, key, keyLen, entry) == NULL ? 0 : 1;
|
||||||
|
if (root->warningSize > 0 && root->fileSize > root->warningSize && root->warningSink != NULL)
|
||||||
|
{
|
||||||
|
root->warningSink(root, root->fileSize, root->warningSinkUser);
|
||||||
|
}
|
||||||
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
__EXPORT_TYPE int ILibSimpleDataStore_GetInt(ILibSimpleDataStore dataStore, char* key, int defaultValue)
|
__EXPORT_TYPE int ILibSimpleDataStore_GetInt(ILibSimpleDataStore dataStore, char* key, int defaultValue)
|
||||||
@@ -800,6 +809,13 @@ __EXPORT_TYPE void ILibSimpleDataStore_EnumerateKeys(ILibSimpleDataStore dataSto
|
|||||||
|
|
||||||
if (handler != NULL) { ILibHashtable_Enumerate(root->keyTable, ILibSimpleDataStore_EnumerateKeysSink, users); }
|
if (handler != NULL) { ILibHashtable_Enumerate(root->keyTable, ILibSimpleDataStore_EnumerateKeysSink, users); }
|
||||||
}
|
}
|
||||||
|
__EXPORT_TYPE void ILibSimpleDataStore_ConfigSizeLimit(ILibSimpleDataStore dataStore, uint64_t sizeLimit, ILibSimpleDataStore_SizeWarningHandler handler, void *user)
|
||||||
|
{
|
||||||
|
ILibSimpleDataStore_Root *root = (ILibSimpleDataStore_Root*)dataStore;
|
||||||
|
root->warningSize = sizeLimit;
|
||||||
|
root->warningSink = sizeLimit > 0 ? handler : NULL;
|
||||||
|
root->warningSinkUser = sizeLimit > 0 ? user : NULL;
|
||||||
|
}
|
||||||
__EXPORT_TYPE void ILibSimpleDataStore_ConfigCompact(ILibSimpleDataStore dataStore, uint64_t minimumDirtySize)
|
__EXPORT_TYPE void ILibSimpleDataStore_ConfigCompact(ILibSimpleDataStore dataStore, uint64_t minimumDirtySize)
|
||||||
{
|
{
|
||||||
ILibSimpleDataStore_Root *root = (ILibSimpleDataStore_Root*)dataStore;
|
ILibSimpleDataStore_Root *root = (ILibSimpleDataStore_Root*)dataStore;
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ typedef void* ILibSimpleDataStore;
|
|||||||
const extern int ILibMemory_SimpleDataStore_CONTAINERSIZE;
|
const extern int ILibMemory_SimpleDataStore_CONTAINERSIZE;
|
||||||
|
|
||||||
typedef void(*ILibSimpleDataStore_KeyEnumerationHandler)(ILibSimpleDataStore sender, char* Key, int KeyLen, void *user);
|
typedef void(*ILibSimpleDataStore_KeyEnumerationHandler)(ILibSimpleDataStore sender, char* Key, int KeyLen, void *user);
|
||||||
|
typedef void(*ILibSimpleDataStore_SizeWarningHandler)(ILibSimpleDataStore sender, uint64_t size, void *user);
|
||||||
|
|
||||||
// Create the data store.
|
// Create the data store.
|
||||||
__EXPORT_TYPE ILibSimpleDataStore ILibSimpleDataStore_CreateEx2(char* filePath, int userExtraMemorySize, int readonly);
|
__EXPORT_TYPE ILibSimpleDataStore ILibSimpleDataStore_CreateEx2(char* filePath, int userExtraMemorySize, int readonly);
|
||||||
@@ -55,6 +56,7 @@ __EXPORT_TYPE void ILibSimpleDataStore_Cached(ILibSimpleDataStore dataStore, cha
|
|||||||
__EXPORT_TYPE int ILibSimpleDataStore_Cached_GetJSON(ILibSimpleDataStore dataStore, char *buffer, int bufferLen);
|
__EXPORT_TYPE int ILibSimpleDataStore_Cached_GetJSON(ILibSimpleDataStore dataStore, char *buffer, int bufferLen);
|
||||||
__EXPORT_TYPE int ILibSimpleDataStore_Cached_GetJSONEx(ILibSimpleDataStore dataStore, char *buffer, int bufferLen);
|
__EXPORT_TYPE int ILibSimpleDataStore_Cached_GetJSONEx(ILibSimpleDataStore dataStore, char *buffer, int bufferLen);
|
||||||
__EXPORT_TYPE void ILibSimpleDataStore_ConfigCompact(ILibSimpleDataStore dataStore, uint64_t minimumDirtySize);
|
__EXPORT_TYPE void ILibSimpleDataStore_ConfigCompact(ILibSimpleDataStore dataStore, uint64_t minimumDirtySize);
|
||||||
|
__EXPORT_TYPE void ILibSimpleDataStore_ConfigSizeLimit(ILibSimpleDataStore dataStore, uint64_t sizeLimit, ILibSimpleDataStore_SizeWarningHandler handler, void *user);
|
||||||
|
|
||||||
__EXPORT_TYPE int ILibSimpleDataStore_PutEx(ILibSimpleDataStore dataStore, char* key, int keyLen, char* value, int valueLen);
|
__EXPORT_TYPE int ILibSimpleDataStore_PutEx(ILibSimpleDataStore dataStore, char* key, int keyLen, char* value, int valueLen);
|
||||||
#define ILibSimpleDataStore_Put(dataStore, key, value) ILibSimpleDataStore_PutEx(dataStore, key, (int)strnlen_s(key, ILibSimpleDataStore_MaxKeyLength), value, (int)strnlen_s(value, ILibSimpleDataStore_MaxUnspecifiedValueLen))
|
#define ILibSimpleDataStore_Put(dataStore, key, value) ILibSimpleDataStore_PutEx(dataStore, key, (int)strnlen_s(key, ILibSimpleDataStore_MaxKeyLength), value, (int)strnlen_s(value, ILibSimpleDataStore_MaxUnspecifiedValueLen))
|
||||||
|
|||||||
Reference in New Issue
Block a user