config manager: throttle config saves to file
When the default config is applied it queues a lot of saves to disk that are unnecessary
This commit is contained in:
@@ -99,6 +99,9 @@ public class ConfigManager
|
|||||||
|
|
||||||
public final void switchSession(AccountSession session)
|
public final void switchSession(AccountSession session)
|
||||||
{
|
{
|
||||||
|
// Ensure existing config is saved
|
||||||
|
sendConfig();
|
||||||
|
|
||||||
if (session == null)
|
if (session == null)
|
||||||
{
|
{
|
||||||
this.session = null;
|
this.session = null;
|
||||||
@@ -315,7 +318,7 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void saveToFile(final File propertiesFile) throws IOException
|
private void saveToFile(final File propertiesFile) throws IOException
|
||||||
{
|
{
|
||||||
propertiesFile.getParentFile().mkdirs();
|
propertiesFile.getParentFile().mkdirs();
|
||||||
|
|
||||||
@@ -392,19 +395,6 @@ public class ConfigManager
|
|||||||
pendingChanges.put(groupName + "." + key, value);
|
pendingChanges.put(groupName + "." + key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Runnable task = () ->
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
saveToFile(propertiesFile);
|
|
||||||
}
|
|
||||||
catch (IOException ex)
|
|
||||||
{
|
|
||||||
log.warn("unable to save configuration file", ex);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
executor.execute(task);
|
|
||||||
|
|
||||||
ConfigChanged configChanged = new ConfigChanged();
|
ConfigChanged configChanged = new ConfigChanged();
|
||||||
configChanged.setGroup(groupName);
|
configChanged.setGroup(groupName);
|
||||||
configChanged.setKey(key);
|
configChanged.setKey(key);
|
||||||
@@ -435,19 +425,6 @@ public class ConfigManager
|
|||||||
pendingChanges.put(groupName + "." + key, null);
|
pendingChanges.put(groupName + "." + key, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
Runnable task = () ->
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
saveToFile(propertiesFile);
|
|
||||||
}
|
|
||||||
catch (IOException ex)
|
|
||||||
{
|
|
||||||
log.warn("unable to save configuration file", ex);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
executor.execute(task);
|
|
||||||
|
|
||||||
ConfigChanged configChanged = new ConfigChanged();
|
ConfigChanged configChanged = new ConfigChanged();
|
||||||
configChanged.setGroup(groupName);
|
configChanged.setGroup(groupName);
|
||||||
configChanged.setKey(key);
|
configChanged.setKey(key);
|
||||||
@@ -653,6 +630,7 @@ public class ConfigManager
|
|||||||
|
|
||||||
public void sendConfig()
|
public void sendConfig()
|
||||||
{
|
{
|
||||||
|
boolean changed;
|
||||||
synchronized (pendingChanges)
|
synchronized (pendingChanges)
|
||||||
{
|
{
|
||||||
if (client != null)
|
if (client != null)
|
||||||
@@ -672,7 +650,20 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
changed = !pendingChanges.isEmpty();
|
||||||
pendingChanges.clear();
|
pendingChanges.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
saveToFile(propertiesFile);
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
log.warn("unable to save configuration file", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user