1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-09 08:06:54 +02:00

Prevent reading and writing the usermap at the same time.

This commit is contained in:
KHobbits
2014-05-17 01:50:41 +01:00
parent 868088e2b2
commit 7a2414a43e
2 changed files with 46 additions and 32 deletions

View File

@@ -45,45 +45,56 @@ public class UUIDMap
userList.createNewFile();
}
final BufferedReader reader = new BufferedReader(new FileReader(userList));
try
synchronized (pendingDiskWrites)
{
while (true)
if (ess.getSettings().isDebug())
{
final String line = reader.readLine();
if (line == null)
ess.getLogger().log(Level.INFO, "Reading usermap from disk");
}
names.clear();
history.clear();
final BufferedReader reader = new BufferedReader(new FileReader(userList));
try
{
while (true)
{
break;
}
else
{
final String[] values = splitPattern.split(line);
if (values.length == 2)
final String line = reader.readLine();
if (line == null)
{
final String name = values[0];
final UUID uuid = UUID.fromString(values[1]);
names.put(name, uuid);
if (!history.containsKey(uuid))
break;
}
else
{
final String[] values = splitPattern.split(line);
if (values.length == 2)
{
final ArrayList<String> list = new ArrayList<String>();
list.add(name);
history.put(uuid, list);
}
else
{
final ArrayList<String> list = history.get(uuid);
if (!list.contains(name))
final String name = values[0];
final UUID uuid = UUID.fromString(values[1]);
names.put(name, uuid);
if (!history.containsKey(uuid))
{
final ArrayList<String> list = new ArrayList<String>();
list.add(name);
history.put(uuid, list);
}
else
{
final ArrayList<String> list = history.get(uuid);
if (!list.contains(name))
{
list.add(name);
}
}
}
}
}
}
}
finally
{
reader.close();
finally
{
reader.close();
}
}
}
catch (IOException ex)
@@ -99,6 +110,10 @@ public class UUIDMap
public void forceWriteUUIDMap()
{
if (ess.getSettings().isDebug())
{
ess.getLogger().log(Level.INFO, "Forcing usermap write to disk");
}
try
{
Future<?> future = _writeUUIDMap();;
@@ -119,7 +134,7 @@ public class UUIDMap
public Future<?> _writeUUIDMap()
{
final ConcurrentSkipListMap<String, UUID> names = ess.getUserMap().getNames().clone();
final ConcurrentSkipListMap<String, UUID> names = ess.getUserMap().getNames();
if (names.size() < 1)
{
return null;

View File

@@ -51,7 +51,6 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
return;
}
keys.clear();
names.clear();
users.invalidateAll();
for (String string : userdir.list())
{
@@ -200,7 +199,7 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
public Set<UUID> getAllUniqueUsers()
{
return Collections.unmodifiableSet(keys);
return Collections.unmodifiableSet(keys.clone());
}
public int getUniqueUsers()
@@ -208,12 +207,12 @@ public class UserMap extends CacheLoader<UUID, User> implements IConf
return keys.size();
}
public ConcurrentSkipListMap<String, UUID> getNames()
protected ConcurrentSkipListMap<String, UUID> getNames()
{
return names;
}
public ConcurrentSkipListMap<UUID, ArrayList<String>> getHistory()
protected ConcurrentSkipListMap<UUID, ArrayList<String>> getHistory()
{
return history;
}