diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Drop.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Drop.java index 121e5f30a..1f5ebf4df 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Drop.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Drop.java @@ -6,7 +6,6 @@ import java.io.File; import java.io.PrintStream; import java.nio.file.Files; -import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Created by Дмитрий on 07.10.14. @@ -24,54 +23,48 @@ public boolean exec(Welcome dbConnector, String[] args, PrintStream out, PrintS } boolean inProvider = true; - ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - lock.readLock().lock(); - try { - StoreableTable map = dbConnector.getActiveTableProvider().getTables().get(args[0]); - if (map == null) { - map = dbConnector.getTables().get(args[0]); - inProvider = false; + StoreableTable map = dbConnector.getActiveTableProvider().getTables().get(args[0]); + if (map == null) { + map = dbConnector.getTables().get(args[0]); + inProvider = false; + } + if (map == null) { + err.println(args[0] + " not exists"); + if (batchModeInInteractive) { + return false; } - if (map == null) { - err.println(args[0] + " not exists"); - if (batchModeInInteractive) { - return false; - } - if (batchMode) { - System.exit(-1); - } - return true; + if (batchMode) { + System.exit(-1); + } + return true; + } + if (dbConnector.getActiveTable() == map) { + if (inProvider) { + dbConnector.getActiveTableProvider().getTables().remove(args[0]); + } else { + dbConnector.getTables().remove(args[0]); } - if (dbConnector.getActiveTable() == map) { + dbConnector.setActiveTable(null); + } + try { + if (dbConnector != null) { if (inProvider) { dbConnector.getActiveTableProvider().getTables().remove(args[0]); } else { dbConnector.getTables().remove(args[0]); } - dbConnector.setActiveTable(null); } - try { - if (dbConnector != null) { - if (inProvider) { - dbConnector.getActiveTableProvider().getTables().remove(args[0]); - } else { - dbConnector.getTables().remove(args[0]); - } - } - if (dbConnector.getActiveTable() == null) { - map.deleteFiles("", true); - Files.delete(new File(map.dbPath + File.separator + "signature.tsv").toPath()); - } else { - map.deleteFiles(dbConnector.getActiveTable().getName(), true); - } - Files.delete(map.dbPath); - } catch (Exception e) { - err.println("Exception in drop: can't delete " + map.dbPath.toString() - + " because " + e.getLocalizedMessage()); - System.exit(-1); + if (dbConnector.getActiveTable() == null) { + map.deleteFiles("", true); + Files.delete(new File(map.dbPath + File.separator + "signature.tsv").toPath()); + } else { + map.deleteFiles(dbConnector.getActiveTable().getName(), true); } - } finally { - lock.readLock().unlock(); + Files.delete(map.dbPath); + } catch (Exception e) { + err.println("Exception in drop: can't delete " + map.dbPath.toString() + + " because " + e.getLocalizedMessage()); + System.exit(-1); } out.println("dropped"); return true; diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/List.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/List.java index 819003e19..b6c8b91f0 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/List.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/List.java @@ -3,6 +3,7 @@ import ru.fizteh.fivt.students.Kudriavtsev_Dmitry.Proxy.Welcome; import java.io.PrintStream; +import java.util.StringJoiner; /** * Created by Дмитрий on 04.10.14. @@ -26,15 +27,11 @@ public boolean exec(Welcome dbConnector, String[] args, PrintStream out, PrintSt return true; } java.util.List keySet = dbConnector.getActiveTable().list(); - int count = 0; + StringJoiner strJoin = new StringJoiner(" ,"); for (String key : keySet) { - out.print(key); - if (count != keySet.size() - 1) { - out.print(", "); - ++count; - } + strJoin.add(key); } - out.println(); + out.println(strJoin.toString()); return true; } } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Put.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Put.java index 0749a4b1d..f7deaa296 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Put.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Put.java @@ -7,7 +7,6 @@ import java.io.File; import java.io.PrintStream; import java.text.ParseException; -import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Created by Дмитрий on 04.10.14. @@ -41,37 +40,31 @@ public boolean exec(Welcome dbConnector, String[] args, PrintStream out, PrintSt return true; } Storeable value; - ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - lock.readLock().lock(); try { - try { - value = dbConnector.getActiveTable().put(args[0], - dbConnector.getActiveTableProvider().deserialize(dbConnector.getActiveTable(), args[1])); - } catch (ParseException e) { - err.println("Parse Exception in deserialize"); - return !batchModeInInteractive; - } - if (value != null) { - out.println("overwrite"); - for (Object val : ((CurrentStoreable) value).getValues()) { - out.println(val.toString()); - } - } else { - out.println("new"); + value = dbConnector.getActiveTable().put(args[0], + dbConnector.getActiveTableProvider().deserialize(dbConnector.getActiveTable(), args[1])); + } catch (ParseException e) { + err.println("Parse Exception in deserialize"); + return !batchModeInInteractive; + } + if (value != null) { + out.println("overwrite"); + for (Object val : ((CurrentStoreable) value).getValues()) { + out.println(val.toString()); } - String newPath = dbConnector.getActiveTable().whereToSave("", args[0]).getKey(); - if (new File(newPath).exists() || dbConnector.getActiveTable().getChangedFiles().containsKey(newPath)) { - Integer collisionCount = dbConnector.getActiveTable().getChangedFiles().get(newPath); - if (collisionCount == null) { - collisionCount = dbConnector.getActiveTable().countOfCollisionsInFile(new File(newPath).toPath()); - } - ++collisionCount; - dbConnector.getActiveTable().getChangedFiles().put(newPath, collisionCount); - } else { - dbConnector.getActiveTable().getChangedFiles().put(newPath, 0); + } else { + out.println("new"); + } + String newPath = dbConnector.getActiveTable().whereToSave("", args[0]).path; + if (new File(newPath).exists() || dbConnector.getActiveTable().getChangedFiles().containsKey(newPath)) { + Integer collisionCount = dbConnector.getActiveTable().getChangedFiles().get(newPath); + if (collisionCount == null) { + collisionCount = dbConnector.getActiveTable().countOfCollisionsInFile(new File(newPath).toPath()); } - } finally { - lock.readLock().unlock(); + ++collisionCount; + dbConnector.getActiveTable().getChangedFiles().put(newPath, collisionCount); + } else { + dbConnector.getActiveTable().getChangedFiles().put(newPath, 0); } return true; } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Remove.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Remove.java index 3635e34c6..4438d42bf 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Remove.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Remove.java @@ -3,7 +3,6 @@ import ru.fizteh.fivt.students.Kudriavtsev_Dmitry.Proxy.Welcome; import java.io.PrintStream; -import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Created by Дмитрий on 04.10.14. @@ -26,21 +25,15 @@ public boolean exec(Welcome dbConnector, String[] args, PrintStream out, PrintSt noTable(err); return true; } - ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - lock.readLock().lock(); - try { - if (dbConnector.getActiveTable().remove(args[0]) != null) { - out.println("removed"); - dbConnector.getActiveTable().getChangedFiles().put( - dbConnector.getActiveTable().whereToSave("", args[0]).getKey(), 0); - } else { - err.println("not found"); - if (batchModeInInteractive) { - return false; - } + if (dbConnector.getActiveTable().remove(args[0]) != null) { + out.println("removed"); + dbConnector.getActiveTable().getChangedFiles().put( + dbConnector.getActiveTable().whereToSave("", args[0]).path, 0); + } else { + err.println("not found"); + if (batchModeInInteractive) { + return false; } - } finally { - lock.readLock().unlock(); } return true; } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Show.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Show.java index 2e42272c7..3b79cff70 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Show.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Show.java @@ -5,7 +5,6 @@ import java.io.PrintStream; import java.util.Map; -import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Created by Дмитрий on 07.10.14. @@ -38,18 +37,12 @@ public boolean exec(Welcome dbConnector, String[] args, PrintStream out, PrintSt return checkForArgs(err); } - ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - lock.readLock().lock(); - try { - if (dbConnector.getTables().isEmpty() && dbConnector.getActiveTableProvider().getTables().isEmpty()) { - return true; - } - - for (Map.Entry a : dbConnector.getActiveTableProvider().getTables().entrySet()) { - out.println(a.getKey() + " " + a.getValue().size()); - } - } finally { - lock.readLock().unlock(); + if (dbConnector.getTables().isEmpty() && dbConnector.getActiveTableProvider().getTables().isEmpty()) { + return true; + } + + for (Map.Entry a : dbConnector.getActiveTableProvider().getTables().entrySet()) { + out.println(a.getKey() + " " + a.getValue().size()); } return true; } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Size.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Size.java index d9f44b566..7e23374d5 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Size.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Size.java @@ -3,7 +3,6 @@ import ru.fizteh.fivt.students.Kudriavtsev_Dmitry.Proxy.Welcome; import java.io.PrintStream; -import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Created by Дмитрий on 31.10.2014. @@ -19,17 +18,11 @@ public boolean exec(Welcome dbConnector, String[] args, PrintStream out, PrintSt return !batchModeInInteractive; } int size = 0; - ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - lock.readLock().lock(); - try { - for (String s : dbConnector.getTables().keySet()) { - size += dbConnector.getTables().get(s).size(); - } - for (String s : dbConnector.getActiveTableProvider().getTables().keySet()) { - size += dbConnector.getActiveTableProvider().getTables().get(s).size(); - } - } finally { - lock.readLock().unlock(); + for (String s : dbConnector.getTables().keySet()) { + size += dbConnector.getTables().get(s).size(); + } + for (String s : dbConnector.getActiveTableProvider().getTables().keySet()) { + size += dbConnector.getActiveTableProvider().getTables().get(s).size(); } out.println(size); return true; diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Use.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Use.java index c8a83740a..749bce4cf 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Use.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Commands/Use.java @@ -4,7 +4,6 @@ import ru.fizteh.fivt.students.Kudriavtsev_Dmitry.Proxy.Welcome; import java.io.PrintStream; -import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Created by Дмитрий on 07.10.14. @@ -20,49 +19,43 @@ public boolean exec(Welcome dbConnector, String[] args, PrintStream out, PrintSt if (!checkArguments(args.length, err)) { return !batchModeInInteractive; } - ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - lock.readLock().lock(); - try { - if (dbConnector.getActiveTable() != null) { - if (!dbConnector.getActiveTable().getRemoved().isEmpty() - || !dbConnector.getActiveTable().getNewKey().isEmpty()) { - int count = 0; - for (String s : dbConnector.getActiveTable().getRemoved().keySet()) { - if (dbConnector.getActiveTable().getActiveTable().containsKey(s)) { - ++count; - } + if (dbConnector.getActiveTable() != null) { + if (!dbConnector.getActiveTable().getRemoved().isEmpty() + || !dbConnector.getActiveTable().getNewKey().isEmpty()) { + int count = 0; + for (String s : dbConnector.getActiveTable().getRemoved().keySet()) { + if (dbConnector.getActiveTable().getActiveTable().containsKey(s)) { + ++count; } - count += dbConnector.getActiveTable().getNewKey().size(); - out.println(count + " unsaved changes"); - return true; } + count += dbConnector.getActiveTable().getNewKey().size(); + out.println(count + " unsaved changes"); + return true; } - StoreableTable map = dbConnector.getActiveTableProvider().getTables().get(args[0]); - if (map == null) { - map = dbConnector.getTables().get(args[0]); + } + StoreableTable map = dbConnector.getActiveTableProvider().getTables().get(args[0]); + if (map == null) { + map = dbConnector.getTables().get(args[0]); + } + if (map == null) { + err.println(args[0] + " not exists"); + if (batchModeInInteractive) { + return false; } - if (map == null) { - err.println(args[0] + " not exists"); - if (batchModeInInteractive) { - return false; - } - if (batchMode) { - System.exit(-1); - } - return true; + if (batchMode) { + System.exit(-1); } - if (dbConnector.getActiveTable() != null) { - dbConnector.getActiveTable().unload( - dbConnector.getActiveTable(), dbConnector.getActiveTable().getName()); - if (dbConnector.getActiveTable().dbPath.getFileName().toString().equals(args[0])) { - out.println("using " + args[0]); - return true; - } + return true; + } + if (dbConnector.getActiveTable() != null) { + dbConnector.getActiveTable().unload( + dbConnector.getActiveTable(), dbConnector.getActiveTable().getName()); + if (dbConnector.getActiveTable().dbPath.getFileName().toString().equals(args[0])) { + out.println("using " + args[0]); + return true; } - dbConnector.setActiveTable(map); - } finally { - lock.readLock().unlock(); } + dbConnector.setActiveTable(map); out.println("using " + args[0]); return true; } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Interpreter.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Interpreter.java index 3888dede4..877e24789 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Interpreter.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Interpreter.java @@ -3,6 +3,7 @@ import java.io.InputStream; import java.io.PrintStream; import java.util.Scanner; +import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Created by ВАНЯ on 19.12.2014. @@ -12,6 +13,7 @@ public class Interpreter { private final InputStream in; private final PrintStream out; private final PrintStream err; + private ReentrantReadWriteLock lock; public Interpreter(Welcome mainClass, InputStream in, PrintStream out, PrintStream err) { if (in == null || out == null || err == null) { @@ -21,6 +23,7 @@ public Interpreter(Welcome mainClass, InputStream in, PrintStream out, PrintStre this.in = in; this.out = out; this.err = err; + lock = new ReentrantReadWriteLock(); } private boolean exitWarning() { @@ -140,11 +143,10 @@ public boolean run(String name, String[] args, boolean batchMode, boolean batchM Command command = mainClass.commands.get(name); command.batchMode = batchMode; command.batchModeInInteractive = batchModeInInteractive; - if (command != null) { - if (!command.exec(mainClass, args, out, err)) { - return false; - } - } else if (!args[0].equals("")) { + if (!command.exec(mainClass, args, out, err)) { + return false; + } + else if (!args[0].equals("")) { err.println(args[0] + " : command not found"); return false; } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Main.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Main.java index 2d1a050cb..a3f4c1c6b 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Main.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Main.java @@ -7,6 +7,7 @@ /** * Created by ВАНЯ on 19.12.2014. */ + public class Main { public static void main(String[] args) { Path dbPath; diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/MyLoggingProxy.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/MyLoggingProxy.java index 28e615534..198e1407c 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/MyLoggingProxy.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/MyLoggingProxy.java @@ -95,7 +95,7 @@ private void putReturnValue(JSONObject jsonObj, Method method, Object res) jsonObj.put("returnValue", arr); } else { if (res == null) { - jsonObj.put("returnValue", JSONObject.NULL); + jsonObj.put("returnValue", "void"); } else { jsonObj.put("returnValue", res); } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/StoreableTable.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/StoreableTable.java index b33ed1970..29527b9aa 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/StoreableTable.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/StoreableTable.java @@ -100,7 +100,12 @@ public StoreableTable(final StoreableTableProvider newProvider, final String dbN signature = newSignature; provider = newProvider; types = provider.getRevClassNames(); - readDb(); + lock.readLock().lock(); + try { + readDb(); + } finally { + lock.readLock().unlock(); + } } public void readDb() { @@ -292,7 +297,7 @@ public List list() { @Override public int commit() { checkClosed(); - lock.readLock().lock(); + lock.writeLock().lock(); try { removed.get().keySet().forEach(activeTable.get()::remove); for (Map.Entry entry : newKey.get().entrySet()) { @@ -301,7 +306,7 @@ public int commit() { unload(this, getName()); return remindChanges(true); } finally { - lock.readLock().unlock(); + lock.writeLock().unlock(); } } @@ -354,14 +359,11 @@ private Path nameOfPath(String nameOfTable, int directory) { return dbPath.resolve(nameOfTable + File.separator + directory + FORMATOFDIRECTORY + File.separator); } - public AbstractMap.SimpleEntry> - whereToSave(final String nameOfTable, final String value) { + public Triple whereToSave(final String nameOfTable, final String value) { int hashCode = value.hashCode(); - int d = hashCode % DIRECTORIES_COUNT; - int f = hashCode / DIRECTORIES_COUNT % FILES_COUNT; - return new AbstractMap.SimpleEntry<>( - nameOfPath(nameOfTable, d, f).toString(), - new AbstractMap.SimpleEntry<>(d, f)); + int directory = hashCode % DIRECTORIES_COUNT; + int file = hashCode / DIRECTORIES_COUNT % FILES_COUNT; + return new Triple<>(nameOfPath(nameOfTable, directory, file).toString(), directory, file); } public void deleteFiles(final String nameOfTable, final boolean all) @@ -400,11 +402,10 @@ public void unload(final StoreableTable currentTable, final String nameOfTable) Files.createDirectory(dbPath); } for (Map.Entry entry : currentTable.activeTable.get().entrySet()) { - AbstractMap.SimpleEntry> pathOfFile = - whereToSave("", entry.getKey()); - if (changedFiles.get().containsKey(pathOfFile.getKey())) { - int d = pathOfFile.getValue().getKey(); - int f = pathOfFile.getValue().getValue(); + Triple pathOfFile = whereToSave("", entry.getKey()); + if (changedFiles.get().containsKey(pathOfFile.path)) { + int d = pathOfFile.directory; + int f = pathOfFile.file; if (streams[d][f] == null) { if (!dir[d]) { if (!Files.exists(nameOfPath("", d))) { @@ -416,12 +417,12 @@ public void unload(final StoreableTable currentTable, final String nameOfTable) nameOfPath("", d, f))); } writeToFile(streams[d][f], entry.getKey(), entry.getValue()); - Integer collisionCount = changedFiles.get().get(pathOfFile.getKey()); + Integer collisionCount = changedFiles.get().get(pathOfFile.path); if (collisionCount > 0) { --collisionCount; - changedFiles.get().put(pathOfFile.getKey(), collisionCount); + changedFiles.get().put(pathOfFile.path, collisionCount); } else { - changedFiles.get().remove(pathOfFile.getKey()); + changedFiles.get().remove(pathOfFile.path); } } } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/StoreableTableProvider.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/StoreableTableProvider.java index 2a6552fef..b92569f12 100644 --- a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/StoreableTableProvider.java +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/StoreableTableProvider.java @@ -125,7 +125,12 @@ public StoreableTable getTable(final String name) throws IllegalArgumentException { checkClosed(); checkTableName(name); - return tables.get(name); + lock.readLock().lock(); + try { + return tables.get(name); + } finally { + lock.readLock().unlock(); + } } @Override @@ -137,7 +142,7 @@ public StoreableTable createTable(final String name, final List> column throw new IllegalArgumentException("Type can't be null"); } - lock.readLock().lock(); + lock.writeLock().lock(); try { try { new CurrentStoreable(columnTypes); @@ -163,7 +168,7 @@ public StoreableTable createTable(final String name, final List> column tables.put(name, table); return table; } finally { - lock.readLock().unlock(); + lock.writeLock().unlock(); } } @@ -174,7 +179,7 @@ public void removeTable(final String name) checkTableName(name); String directory = dbDirectory + File.separator + name; File tableDirectory = new File(directory); - lock.readLock().lock(); + lock.writeLock().lock(); try { if (!tableDirectory.exists() || !tables.containsKey(name)) { throw new IllegalArgumentException("table doesn't exist"); @@ -182,7 +187,7 @@ public void removeTable(final String name) StoreableTable table = tables.remove(name); table.deleteFiles(name, true); } finally { - lock.readLock().unlock(); + lock.writeLock().unlock(); } } diff --git a/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Triple.java b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Triple.java new file mode 100644 index 000000000..36fb08abf --- /dev/null +++ b/src/ru/fizteh/fivt/students/Kudriavtsev_Dmitry/Proxy/Triple.java @@ -0,0 +1,15 @@ +package ru.fizteh.fivt.students.Kudriavtsev_Dmitry.Proxy; + +/** + * Created by Дмитрий on 25.12.2014. + */ +public class Triple { + public T1 path; + public T2 directory; + public T3 file; + public Triple(T1 path, T2 directory, T3 file) { + this.path = path; + this.directory = directory; + this.file = file; + } +}