diff --git a/src/main/java/ru/andrey/kvstorage/resp/RespReader.java b/src/main/java/ru/andrey/kvstorage/resp/RespReader.java index f36fe54..d1f8206 100644 --- a/src/main/java/ru/andrey/kvstorage/resp/RespReader.java +++ b/src/main/java/ru/andrey/kvstorage/resp/RespReader.java @@ -22,10 +22,22 @@ public class RespReader { private final InputStream is; + /** + * Возвращает {@code true} - если в InputStream есть RespArray, {@code false} - в ином случае. + * + * @return {@code true} - если в InputStream есть RespArray, {@code false} - в ином случае + * @throws IOException если произошла ошибка ввода-вывода + */ public boolean hasArray() throws IOException { return is.read() == RespArray.CODE; } + /** + * Считывает и возвращает считанный {@code RespObject}. + * + * @return считанный {@code RespObject} + * @throws IOException если произошла ошибка ввода-вывода или данные не соответствуют формату RESP + */ public RespObject readObject() throws IOException { final int code = is.read(); if (code == -1) { @@ -46,14 +58,32 @@ public RespObject readObject() throws IOException { } } + /** + * Принудительно пытается считать {@code RespSimpleString} при условии, что первый байт уже был считан. + * + * @return считанная {@code RespSimpleString} + * @throws IOException если произошла ошибка ввода-вывода или данные не соответствуют формату RESP + */ public RespSimpleString readSimpleString() throws IOException { return new RespSimpleString(readString()); } + /** + * Принудительно пытается считать {@code RespError} при условии, что первый байт уже был считан. + * + * @return считанный {@code RespError} + * @throws IOException если произошла ошибка ввода-вывода или данные не соответствуют формату RESP + */ public RespError readError() throws IOException { return new RespError(readString()); } + /** + * Принудительно пытается считать {@code RespBulkString} при условии, что первый байт уже был считан. + * + * @return считанная {@code RespBulkString} + * @throws IOException если произошла ошибка ввода-вывода или данные не соответствуют формату RESP + */ public RespBulkString readBulkString() throws IOException { final int size = readInt(); @@ -87,6 +117,12 @@ public RespBulkString readBulkString() throws IOException { return new RespBulkString(data); } + /** + * Принудительно пытается считать {@code RespArray} при условии, что первый байт уже был считан. + * + * @return считанный {@code RespArray} + * @throws IOException если произошла ошибка ввода-вывода или данные не соответствуют формату RESP + */ public RespArray readArray() throws IOException { final int size = readInt(); diff --git a/src/main/java/ru/andrey/kvstorage/resp/RespUtil.java b/src/main/java/ru/andrey/kvstorage/resp/RespUtil.java index 66223a2..e830e76 100644 --- a/src/main/java/ru/andrey/kvstorage/resp/RespUtil.java +++ b/src/main/java/ru/andrey/kvstorage/resp/RespUtil.java @@ -6,6 +6,13 @@ public class RespUtil { + /** + * Записывает число в {@code os} в символьно-цифровом представлении. + * + * @param os входной поток, куда нужно записать число + * @param number число, которое нужно записать + * @throws IOException если произошла ошибка ввода-вывода + */ public static void writeInt(OutputStream os, int number) throws IOException { os.write(Integer.toString(number).getBytes(StandardCharsets.US_ASCII)); } diff --git a/src/main/java/ru/andrey/kvstorage/resp/RespWriter.java b/src/main/java/ru/andrey/kvstorage/resp/RespWriter.java index 7ae009e..1ed9f2b 100644 --- a/src/main/java/ru/andrey/kvstorage/resp/RespWriter.java +++ b/src/main/java/ru/andrey/kvstorage/resp/RespWriter.java @@ -11,6 +11,12 @@ public class RespWriter { private final OutputStream os; + /** + * Записывает {@code object} в выходной поток. + * + * @param object объект, который нужно записать + * @throws IOException если произошла ошибка ввода-вывода + */ public void write(RespObject object) throws IOException { object.write(os); os.flush(); diff --git a/src/main/java/ru/andrey/kvstorage/resp/object/RespObject.java b/src/main/java/ru/andrey/kvstorage/resp/object/RespObject.java index bda1de4..619d816 100644 --- a/src/main/java/ru/andrey/kvstorage/resp/object/RespObject.java +++ b/src/main/java/ru/andrey/kvstorage/resp/object/RespObject.java @@ -10,12 +10,33 @@ public interface RespObject { byte[] CRLF = "\r\n".getBytes(StandardCharsets.US_ASCII); byte[] MINUS_ONE = "-1".getBytes(StandardCharsets.US_ASCII); + /** + * Возвращает {@code true} - если данный объект является ошибкой, {@code false} - в ином случае. + * + * @return {@code true} - если данный объект является ошибкой, {@code false} - в ином случае + */ boolean isError(); + /** + * Возвращает строковое представление данного объекта. + * + * @return строковое представление данного объекта + */ String asString(); + /** + * Сериализует данный объект в байты и записывает его в OutputStream. + * + * @param os - выходной поток, куда будут записываться данные + * @throws IOException если произошла ошибка ввода-вывода + */ void write(OutputStream os) throws IOException; + /** + * Возвращает байтовое представление данного объекта. + * + * @return байтовое представление данного объекта + */ default byte[] getBytes() { final ByteArrayOutputStream os = new ByteArrayOutputStream(); diff --git a/src/main/java/ru/andrey/kvstorage/server/console/DatabaseApiSerializable.java b/src/main/java/ru/andrey/kvstorage/server/console/DatabaseApiSerializable.java index 1d66dd5..c61c243 100644 --- a/src/main/java/ru/andrey/kvstorage/server/console/DatabaseApiSerializable.java +++ b/src/main/java/ru/andrey/kvstorage/server/console/DatabaseApiSerializable.java @@ -3,5 +3,11 @@ import ru.andrey.kvstorage.resp.object.RespObject; public interface DatabaseApiSerializable { + + /** + * Возвращает представление данного объекта в RESP протоколе. + * + * @return представление данного объекта в RESP протоколе + */ RespObject serialize(); } diff --git a/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommand.java b/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommand.java index 0a3f6a4..901962f 100644 --- a/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommand.java +++ b/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommand.java @@ -3,5 +3,12 @@ import ru.andrey.kvstorage.server.exception.DatabaseException; public interface DatabaseCommand { + + /** + * Запуск данной команды. + * + * @return результат выполнение команды + * @throws DatabaseException если произошла ошибка СУБД + */ DatabaseCommandResult execute() throws DatabaseException; } diff --git a/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommandResult.java b/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommandResult.java index 5b64684..5e3e1aa 100644 --- a/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommandResult.java +++ b/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommandResult.java @@ -11,16 +11,34 @@ public interface DatabaseCommandResult extends DatabaseApiSerializable { + /** + * Формирует успешный результат выполнения команды из значения результата. + * + * @param result значение результата + * @return успешный результат выполнения команды, который был сформирован + */ static DatabaseCommandResult success(String result) { Objects.requireNonNull(result); return new DatabaseCommandResultImpl(result, null, DatabaseCommandStatus.SUCCESS); } + /** + * Формирует результат команды, при выполнении которой произошла ошибка. + * + * @param message сообщение об ошибке + * @return результат команды, при выполнении которой произошла ошибка + */ static DatabaseCommandResult error(String message) { Objects.requireNonNull(message); return new DatabaseCommandResultImpl(null, message, DatabaseCommandStatus.FAILED); } + /** + * Формирует результат команды, при выполнении которой произошла ошибка, из исключения. + * + * @param exception исключение, из которого нужно сформировать результат выполнения команды + * @return результат команды, при выполнении которой произошла ошибка + */ static DatabaseCommandResult error(Exception exception) { Objects.requireNonNull(exception); String message = exception.getMessage() != null @@ -29,14 +47,37 @@ static DatabaseCommandResult error(Exception exception) { return DatabaseCommandResult.error(message); } + /** + * Возвращает значение результата выполнения команды в виде {@code Optional}. + * + * @return значение результата выполнения команды в виде {@code Optional} + */ Optional getResult(); + /** + * Возвращает статус выполнения команды. + * + * @return статус выполнения команды + */ DatabaseCommandStatus getStatus(); + /** + * Возвращает {@code true} - если команда выполнилась успешно (status == DatabaseCommandStatus.SUCCESS), {@code false} - в ином случае. + * + * @return {@code true} - если команда выполнилась успешно (status == DatabaseCommandStatus.SUCCESS), {@code false} - в ином случае + */ boolean isSuccess(); + /** + * Возвращает сообщение об ошибке, которая произошла при выполнении команды. + * + * @return сообщение об ошибке, которая произошла при выполнении команды + */ String getErrorMessage(); + /** + * Перечисление, описывающее возможные варианты статуса выполнения команды. + */ enum DatabaseCommandStatus { SUCCESS, FAILED } diff --git a/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommands.java b/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommands.java index f9fa604..587556b 100644 --- a/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommands.java +++ b/src/main/java/ru/andrey/kvstorage/server/console/DatabaseCommands.java @@ -33,6 +33,12 @@ public DatabaseCommand getCommand(ExecutionEnvironment env, String... args) { } }; - + /** + * Формирование команды СУБД из входных аргументов. + * + * @param env текущее окружение + * @param args аргументы + * @return сформированная команда СУБД + */ public abstract DatabaseCommand getCommand(ExecutionEnvironment env, String... args); } diff --git a/src/main/java/ru/andrey/kvstorage/server/console/ExecutionEnvironment.java b/src/main/java/ru/andrey/kvstorage/server/console/ExecutionEnvironment.java index dcbe4d5..4821aa3 100644 --- a/src/main/java/ru/andrey/kvstorage/server/console/ExecutionEnvironment.java +++ b/src/main/java/ru/andrey/kvstorage/server/console/ExecutionEnvironment.java @@ -6,9 +6,26 @@ import java.util.Optional; public interface ExecutionEnvironment { + + /** + * Возвращает путь до папки, где находятся базы данных. + * + * @return путь до папки, где находятся базы данных + */ Path getWorkingPath(); + /** + * Возвращает {@code Optional}. + * + * @param name имя базы данных + * @return {@code Optional} + */ Optional getDatabase(String name); + /** + * Добавляет базу данных в текущее окружение. + * + * @param db база данных, которую нужно добавить + */ void addDatabase(Database db); } diff --git a/src/main/java/ru/andrey/kvstorage/server/index/DatabaseIndex.java b/src/main/java/ru/andrey/kvstorage/server/index/DatabaseIndex.java index 97931ae..13a0400 100644 --- a/src/main/java/ru/andrey/kvstorage/server/index/DatabaseIndex.java +++ b/src/main/java/ru/andrey/kvstorage/server/index/DatabaseIndex.java @@ -3,7 +3,20 @@ import java.util.Optional; public interface DatabaseIndex { + + /** + * Оповещает индекс об обновлении значения по определенному ключу. + * + * @param key ключ, который обновился + * @param value новое значение + */ void onIndexedEntityUpdated(K key, V value); + /** + * Ищет значение в индексе по указанному ключу. + * + * @param key ключ, по которому нужно провести поиск значение + * @return {@code Optional} + */ Optional searchForKey(K key); } diff --git a/src/main/java/ru/andrey/kvstorage/server/index/SegmentIndexInfo.java b/src/main/java/ru/andrey/kvstorage/server/index/SegmentIndexInfo.java index 15a8226..6c1870c 100644 --- a/src/main/java/ru/andrey/kvstorage/server/index/SegmentIndexInfo.java +++ b/src/main/java/ru/andrey/kvstorage/server/index/SegmentIndexInfo.java @@ -1,5 +1,11 @@ package ru.andrey.kvstorage.server.index; public interface SegmentIndexInfo { + + /** + * Возвращает смещение определенной записи в файле сегмента. + * + * @return смещение определенной записи в файле сегмента + */ long getOffset(); } diff --git a/src/main/java/ru/andrey/kvstorage/server/initialization/DatabaseInitializationContext.java b/src/main/java/ru/andrey/kvstorage/server/initialization/DatabaseInitializationContext.java index fb292ba..18cb65e 100644 --- a/src/main/java/ru/andrey/kvstorage/server/initialization/DatabaseInitializationContext.java +++ b/src/main/java/ru/andrey/kvstorage/server/initialization/DatabaseInitializationContext.java @@ -6,12 +6,33 @@ import java.util.Map; public interface DatabaseInitializationContext { + + /** + * Возвращает имя инициализируемой базы данных. + * + * @return имя инициализируемой базы данных + */ String getDbName(); + /** + * Возвращает путь до директории инициализируемой базы данных. + * + * @return путь до директории инициализируемой базы данных + */ Path getDatabasePath(); + /** + * Возвращает ассоциативный массив таблиц, который накопился на данном этапе инициализации. + * + * @return массив таблиц, который накопился на данном этапе инициализации + */ Map getTables(); + /** + * Добавляет таблицу в ассоциативный массив накопленных таблиц. + * + * @param table таблица, которую нужно добавить + */ void addTable(Table table); } diff --git a/src/main/java/ru/andrey/kvstorage/server/initialization/InitializationContext.java b/src/main/java/ru/andrey/kvstorage/server/initialization/InitializationContext.java index e98ebda..47edb8d 100644 --- a/src/main/java/ru/andrey/kvstorage/server/initialization/InitializationContext.java +++ b/src/main/java/ru/andrey/kvstorage/server/initialization/InitializationContext.java @@ -3,11 +3,32 @@ import ru.andrey.kvstorage.server.console.ExecutionEnvironment; public interface InitializationContext { + + /** + * Возвращает текущее окружение. + * + * @return текущее окружение + */ ExecutionEnvironment executionEnvironment(); + /** + * Возвращает контекст инициализации для базы данных. + * + * @return контекст инициализации для базы данных + */ DatabaseInitializationContext currentDbContext(); + /** + * Возвращает контекст инициализации для таблицы. + * + * @return контекст инициализации для таблицы + */ TableInitializationContext currentTableContext(); + /** + * Возвращает контекст инициализации для сегмента. + * + * @return контекст инициализации для сегмента + */ SegmentInitializationContext currentSegmentContext(); } diff --git a/src/main/java/ru/andrey/kvstorage/server/initialization/Initializer.java b/src/main/java/ru/andrey/kvstorage/server/initialization/Initializer.java index b165fe3..7c72d68 100644 --- a/src/main/java/ru/andrey/kvstorage/server/initialization/Initializer.java +++ b/src/main/java/ru/andrey/kvstorage/server/initialization/Initializer.java @@ -3,5 +3,12 @@ import ru.andrey.kvstorage.server.exception.DatabaseException; public interface Initializer { + + /** + * Выполняет инициализацию какой-либо сущности с переданным контекстом. + * + * @param context контекст, с которым нужно провести инициализацию + * @throws DatabaseException если произошла ошибка инициализации сущности + */ void perform(InitializationContext context) throws DatabaseException; } diff --git a/src/main/java/ru/andrey/kvstorage/server/initialization/SegmentInitializationContext.java b/src/main/java/ru/andrey/kvstorage/server/initialization/SegmentInitializationContext.java index 2a0477d..db3432f 100644 --- a/src/main/java/ru/andrey/kvstorage/server/initialization/SegmentInitializationContext.java +++ b/src/main/java/ru/andrey/kvstorage/server/initialization/SegmentInitializationContext.java @@ -6,11 +6,32 @@ import java.nio.file.Path; public interface SegmentInitializationContext { + + /** + * Возвращает имя инициализируемого сегмента. + * + * @return имя инициализируемого сегмента + */ String getSegmentName(); + /** + * Возвращает путь до файла сегмента. + * + * @return путь до файла сегмента + */ Path getSegmentPath(); + /** + * Возвращает индекс инициализируемого сегмента. + * + * @return индекс инициализируемого сегмента + */ SegmentIndex getIndex(); + /** + * Возвращает текущий размер инициализируемого сегмента. + * + * @return текущий размер инициализируемого сегмента + */ int getCurrentSize(); // todo sukhoa should be long } diff --git a/src/main/java/ru/andrey/kvstorage/server/initialization/TableInitializationContext.java b/src/main/java/ru/andrey/kvstorage/server/initialization/TableInitializationContext.java index d4bfe38..8c82bc1 100644 --- a/src/main/java/ru/andrey/kvstorage/server/initialization/TableInitializationContext.java +++ b/src/main/java/ru/andrey/kvstorage/server/initialization/TableInitializationContext.java @@ -6,13 +6,39 @@ import java.nio.file.Path; public interface TableInitializationContext { + + /** + * Возвращает имя инициализируемой таблицы. + * + * @return имя инициализируемой таблицы + */ String getTableName(); + /** + * Возвращает путь до директории таблицы. + * + * @return путь до директории таблицы + */ Path getTablePath(); + /** + * Возвращает индекс инициализируемой таблицы. + * + * @return индекс инициализируемой таблицы + */ TableIndex getTableIndex(); + /** + * Возвращает текущий активный сегмент для инициализируемой таблицы. + * + * @return текущий активный сегмент для инициализируемой таблицы + */ Segment getCurrentSegment(); + /** + * Обновляет текущий активный сегмент. + * + * @param segment новый сегмент + */ void updateCurrentSegment(Segment segment); // todo sukhoa refactor? } diff --git a/src/main/java/ru/andrey/kvstorage/server/logic/Database.java b/src/main/java/ru/andrey/kvstorage/server/logic/Database.java index b5882a2..8aaa959 100644 --- a/src/main/java/ru/andrey/kvstorage/server/logic/Database.java +++ b/src/main/java/ru/andrey/kvstorage/server/logic/Database.java @@ -3,13 +3,41 @@ import ru.andrey.kvstorage.server.exception.DatabaseException; public interface Database { + + /** + * Возвращает имя базы данных. + * + * @return имя базы данных + */ String getName(); + /** + * Создает таблицу с указанным именем, если это имя еще не занято. + * + * @param tableName имя таблицы + * @throws DatabaseException если таблица с данным именем уже существует или если произошла ошибка ввода-вывода + */ void createTableIfNotExists(String tableName) throws DatabaseException; void createTableIfNotExists(String tableName, int segmentSizeInBytes) throws DatabaseException; + /** + * Записывает значение в указанную таблицу по переданному ключу. + * + * @param tableName таблица, в которую нужно записать значение + * @param objectKey ключ, по которому нужно записать значение + * @param objectValue значение, которое нужно записать + * @throws DatabaseException если указанная таблица не была найдена или если произошла ошибка ввода-вывода + */ void write(String tableName, String objectKey, String objectValue) throws DatabaseException; + /** + * Считывает значение из указанной таблицы по заданному ключу. + * + * @param tableName таблица, из которой нужно считать значение + * @param objectKey ключ, по которому нужно получить значение + * @return значение, которое находится по ключу + * @throws DatabaseException если не была найдена указанная таблица, или если не была найдена запись по данному ключу, или произошла ошибка ввода-вывода + */ String read(String tableName, String objectKey) throws DatabaseException; } \ No newline at end of file diff --git a/src/main/java/ru/andrey/kvstorage/server/logic/DatabaseFactory.java b/src/main/java/ru/andrey/kvstorage/server/logic/DatabaseFactory.java index 491fc40..c51cc8a 100644 --- a/src/main/java/ru/andrey/kvstorage/server/logic/DatabaseFactory.java +++ b/src/main/java/ru/andrey/kvstorage/server/logic/DatabaseFactory.java @@ -6,5 +6,14 @@ @FunctionalInterface public interface DatabaseFactory { + + /** + * Создает базу данных с указанным именем, если это имя еще не занято. + * + * @param dbName имя базы данных + * @param dbRoot путь до директории, в которой будет создана база данных + * @return объект созданной таблицы + * @throws DatabaseException если база данных с данным именем уже существует или если произошла ошибка ввода-вывода + */ Database createNonExistent(String dbName, Path dbRoot) throws DatabaseException; } diff --git a/src/main/java/ru/andrey/kvstorage/server/logic/Segment.java b/src/main/java/ru/andrey/kvstorage/server/logic/Segment.java index 334504e..faff7b3 100644 --- a/src/main/java/ru/andrey/kvstorage/server/logic/Segment.java +++ b/src/main/java/ru/andrey/kvstorage/server/logic/Segment.java @@ -6,14 +6,40 @@ public interface Segment { + /** + * Возвращает имя сегмента. + * + * @return имя сегмента + */ String getName(); + /** + * Записывает значение по указанному ключу в сегмент. + * + * @param objectKey ключ, по которому нужно записать значение + * @param objectValue значение, которое нужно записать + * @return {@code true} - если значение записалось, {@code false} - если нет + * @throws IOException если произошла ошибка ввода-вывода. + * @throws DatabaseException + */ // todo sukhoa in future may return something like SegmentWriteResult .. with report and error details? // for new returns false if cannot allocate requested capacity // exception is questionable boolean write(String objectKey, String objectValue) throws IOException, DatabaseException; + /** + * Считывает значение из сегмента по переданному ключу. + * + * @param objectKey ключ, по которому нужно получить значение + * @return значение, которое находится по ключу + * @throws IOException если произошла ошибка ввода-вывода + */ String read(String objectKey) throws IOException; + /** + * Возвращает {@code true} - если данный сегмент открыт только на чтение, {@code false} - если данный сегмент открыт на чтение и запись. + * + * @return {@code true} - если данный сегмент открыт только на чтение, {@code false} - если данный сегмент открыт на чтение и запись + */ boolean isReadOnly(); } \ No newline at end of file diff --git a/src/main/java/ru/andrey/kvstorage/server/logic/Table.java b/src/main/java/ru/andrey/kvstorage/server/logic/Table.java index ade7b70..77b872e 100644 --- a/src/main/java/ru/andrey/kvstorage/server/logic/Table.java +++ b/src/main/java/ru/andrey/kvstorage/server/logic/Table.java @@ -12,10 +12,30 @@ * и хранящую файлы-сегменты данной таблицы */ public interface Table { + + /** + * Возвращает имя таблицы. + * + * @return имя таблицы + */ String getName(); + /** + * Записывает в таблицу переданное значение по указанному ключу. + * + * @param objectKey ключ, по которому нужно записать значение + * @param objectValue значение, которое нужно записать + * @throws DatabaseException если произошла ошибка ввода-вывода + */ void write(String objectKey, String objectValue) throws DatabaseException; + /** + * Считывает значение из таблицы по заданному ключу. + * + * @param objectKey ключ, по которому нужно получить значение + * @return значение, которое находится по ключу + * @throws DatabaseException если не была найдена запись по данному ключу или произошла ошибка ввода-вывода + */ String read(String objectKey) throws DatabaseException; } diff --git a/src/main/java/ru/andrey/kvstorage/server/logic/impl/CachingTable.java b/src/main/java/ru/andrey/kvstorage/server/logic/impl/CachingTable.java index fffaff7..0afc148 100644 --- a/src/main/java/ru/andrey/kvstorage/server/logic/impl/CachingTable.java +++ b/src/main/java/ru/andrey/kvstorage/server/logic/impl/CachingTable.java @@ -4,6 +4,9 @@ import ru.andrey.kvstorage.server.exception.DatabaseException; import ru.andrey.kvstorage.server.logic.Table; +/** + * Декоратор над таблицей, поддерживающий кэширование. + */ public class CachingTable implements Table { private final Table table; private final DatabaseCache cache; diff --git a/src/main/java/ru/andrey/kvstorage/server/logic/impl/DatabaseInputStream.java b/src/main/java/ru/andrey/kvstorage/server/logic/impl/DatabaseInputStream.java index e14cd46..7769ff4 100644 --- a/src/main/java/ru/andrey/kvstorage/server/logic/impl/DatabaseInputStream.java +++ b/src/main/java/ru/andrey/kvstorage/server/logic/impl/DatabaseInputStream.java @@ -11,6 +11,12 @@ public DatabaseInputStream(InputStream inputStream) { super(inputStream); } + /** + * Считывает из входного потока {@code DatabaseStorageUnit} и возвращает его в виде {@code Optional}. + * + * @return {@code Optional} + * @throws IOException если произошла ошибка ввода-вывода. + */ public Optional readDbUnit() throws IOException { try { int keySize = readInt(); diff --git a/src/main/java/ru/andrey/kvstorage/server/logic/impl/DatabaseStoringUnit.java b/src/main/java/ru/andrey/kvstorage/server/logic/impl/DatabaseStoringUnit.java index 84c955e..30f64f7 100644 --- a/src/main/java/ru/andrey/kvstorage/server/logic/impl/DatabaseStoringUnit.java +++ b/src/main/java/ru/andrey/kvstorage/server/logic/impl/DatabaseStoringUnit.java @@ -1,5 +1,9 @@ package ru.andrey.kvstorage.server.logic.impl; +/** + * Низкоуровневая и атомарная структура, описывающая запись в сегменте в виде ключ-значение. + * Ключ и значение в нем хранятся в виде массива байтов. + */ public class DatabaseStoringUnit { private final byte[] key; private final int keySize; diff --git a/src/main/java/ru/andrey/kvstorage/server/resp/CommandReader.java b/src/main/java/ru/andrey/kvstorage/server/resp/CommandReader.java index a1888b1..ca3ec1a 100644 --- a/src/main/java/ru/andrey/kvstorage/server/resp/CommandReader.java +++ b/src/main/java/ru/andrey/kvstorage/server/resp/CommandReader.java @@ -16,10 +16,22 @@ public class CommandReader { private final RespReader reader; private final ExecutionEnvironment env; + /** + * Возвращает {@code true} - если во входном потоке есть команда, {@code false} - в ином случае. + * + * @return {@code true} - если во входном потоке есть команда, {@code false} - в ином случае + * @throws IOException если произошла ошибка ввода-вывода. + */ public boolean hasNextCommand() throws IOException { return reader.hasArray(); } + /** + * Принудительно пытается считать {@code DatabaseCommand} при условии, что первый байт уже был считан. + * + * @return считанная {@code DatabaseCommand} + * @throws IOException если произошла ошибка ввода-вывода или данные не соответствуют формату RESP + */ public DatabaseCommand readCommand() throws IOException { final RespObject[] objects = reader.readArray().getObjects(); if (objects.length < 1) {