private static LogEntry randomLogEntry(){ byte[] value = new byte[random.nextInt(20) + 1]; long term = random.nextLong(); random.nextBytes(value); return new LogEntry(term, value, LogValueType.fromByte((byte)(random.nextInt(4) + 1))); }
private static LogEntry randomLogEntry(){ byte[] value = new byte[random.nextInt(20) + 1]; long term = random.nextLong(); random.nextBytes(value); return new LogEntry(term, value, LogValueType.fromByte((byte)(random.nextInt(4) + 1))); }
private LogEntry readEntry(int size){ byte[] entryData = new byte[size]; this.read(this.dataFile, entryData); ByteBuffer entryBuffer = ByteBuffer.wrap(entryData); long term = entryBuffer.getLong(); byte valueType = entryBuffer.get(); return new LogEntry(term, Arrays.copyOfRange(entryData, Long.BYTES + 1, entryData.length), LogValueType.fromByte(valueType)); }
private LogEntry readEntry(int size){ byte[] entryData = new byte[size]; this.read(this.dataFile, entryData); ByteBuffer entryBuffer = ByteBuffer.wrap(entryData); long term = entryBuffer.getLong(); byte valueType = entryBuffer.get(); return new LogEntry(term, Arrays.copyOfRange(entryData, Long.BYTES + 1, entryData.length), LogValueType.fromByte(valueType)); }
public static LogEntry[] bytesToLogEntries(byte[] data){ if(data == null || data.length < Long.BYTES + Integer.BYTES){ throw new IllegalArgumentException("invalid log entries data"); } ByteBuffer buffer = ByteBuffer.wrap(data); List<LogEntry> logEntries = new ArrayList<LogEntry>(); while(buffer.hasRemaining()){ long term = buffer.getLong(); byte valueType = buffer.get(); int valueSize = buffer.getInt(); byte[] value = new byte[valueSize]; if(valueSize > 0){ buffer.get(value); } logEntries.add(new LogEntry(term, value, LogValueType.fromByte(valueType))); } return logEntries.toArray(new LogEntry[0]); } }
@Override public LogEntry getLogEntryAt(long index) { if(index < this.startIndex.get()){ throw new IllegalArgumentException("index out of range"); } try{ PreparedStatement ps = this.connection.prepareStatement(SELECT_ENTRY_SQL); ps.setLong(1, index); ResultSet rs = ps.executeQuery(); while(rs.next()){ return new LogEntry(rs.getLong(2), rs.getBytes(4), LogValueType.fromByte(rs.getByte(3))); } rs.close(); return null; }catch(Throwable error){ this.logger.error("failed to retrieve an entry at a specific index", error); throw new RuntimeException("log store error", error); } }
@Override public LogEntry getLogEntryAt(long index) { if(index < this.startIndex.get()){ throw new IllegalArgumentException("index out of range"); } try{ PreparedStatement ps = this.connection.prepareStatement(SELECT_ENTRY_SQL); ps.setLong(1, index); ResultSet rs = ps.executeQuery(); while(rs.next()){ return new LogEntry(rs.getLong(2), rs.getBytes(4), LogValueType.fromByte(rs.getByte(3))); } rs.close(); return null; }catch(Throwable error){ this.logger.error("failed to retrieve an entry at a specific index", error); throw new RuntimeException("log store error", error); } }
public static LogEntry[] bytesToLogEntries(byte[] data){ if(data == null || data.length < Long.BYTES + Integer.BYTES){ throw new IllegalArgumentException("invalid log entries data"); } ByteBuffer buffer = ByteBuffer.wrap(data); List<LogEntry> logEntries = new ArrayList<LogEntry>(); while(buffer.hasRemaining()){ long term = buffer.getLong(); byte valueType = buffer.get(); int valueSize = buffer.getInt(); byte[] value = new byte[valueSize]; if(valueSize > 0){ buffer.get(value); } logEntries.add(new LogEntry(term, value, LogValueType.fromByte(valueType))); } return logEntries.toArray(new LogEntry[0]); } }
@Override public LogEntry[] getLogEntries(long start, long end) { if(start > end || start < this.startIndex.get()){ throw new IllegalArgumentException("index out of range"); } try{ PreparedStatement ps = this.connection.prepareStatement(SELECT_RANGE_SQL); ps.setLong(1, start); ps.setLong(2, end); ResultSet rs = ps.executeQuery(); List<LogEntry> entries = new ArrayList<LogEntry>(); while(rs.next()){ entries.add(new LogEntry(rs.getLong(2), rs.getBytes(4), LogValueType.fromByte(rs.getByte(3)))); } rs.close(); return entries.toArray(new LogEntry[0]); }catch(Throwable error){ this.logger.error("failed to retrieve a range of entries", error); throw new RuntimeException("log store error", error); } }
@Override public LogEntry[] getLogEntries(long start, long end) { if(start > end || start < this.startIndex.get()){ throw new IllegalArgumentException("index out of range"); } try{ PreparedStatement ps = this.connection.prepareStatement(SELECT_RANGE_SQL); ps.setLong(1, start); ps.setLong(2, end); ResultSet rs = ps.executeQuery(); List<LogEntry> entries = new ArrayList<LogEntry>(); while(rs.next()){ entries.add(new LogEntry(rs.getLong(2), rs.getBytes(4), LogValueType.fromByte(rs.getByte(3)))); } rs.close(); return entries.toArray(new LogEntry[0]); }catch(Throwable error){ this.logger.error("failed to retrieve a range of entries", error); throw new RuntimeException("log store error", error); } }
this.lastEntry = new LogEntry(rs.getLong(2), rs.getBytes(4), LogValueType.fromByte(rs.getByte(3))); }else{ this.lastEntry = new LogEntry(0, null, LogValueType.Application);
this.lastEntry = new LogEntry(rs.getLong(2), rs.getBytes(4), LogValueType.fromByte(rs.getByte(3))); }else{ this.lastEntry = new LogEntry(0, null, LogValueType.Application);
rs = this.connection.createStatement().executeQuery("SELECT TOP 1 * FROM LogStore ORDER BY id DESC"); if(rs.next()){ this.lastEntry = new LogEntry(rs.getLong(2), rs.getBytes(4), LogValueType.fromByte(rs.getByte(3)));
rs = this.connection.createStatement().executeQuery("SELECT TOP 1 * FROM LogStore ORDER BY id DESC"); if(rs.next()){ this.lastEntry = new LogEntry(rs.getLong(2), rs.getBytes(4), LogValueType.fromByte(rs.getByte(3)));
ps.setBytes(3, value); ps.execute(); this.lastEntry = new LogEntry(term, value, LogValueType.fromByte(valueType));
ps.setBytes(3, value); ps.execute(); this.lastEntry = new LogEntry(term, value, LogValueType.fromByte(valueType));
byte[] logData = new byte[(int)(endDataPosition - dataPosition)]; this.read(this.dataFile, logData); return new LogEntry(BinaryUtils.bytesToLong(logData, 0), Arrays.copyOfRange(logData, Long.BYTES + 1, logData.length), LogValueType.fromByte(logData[Long.BYTES])); }catch(IOException exception){ this.logger.error("failed to read files to get the specified entry");
byte[] logData = new byte[(int)(endDataPosition - dataPosition)]; this.read(this.dataFile, logData); return new LogEntry(BinaryUtils.bytesToLong(logData, 0), Arrays.copyOfRange(logData, Long.BYTES + 1, logData.length), LogValueType.fromByte(logData[Long.BYTES])); }catch(IOException exception){ this.logger.error("failed to read files to get the specified entry");
this.dataFile.seek(dataStart); this.read(this.dataFile, logData); entries[i] = new LogEntry(BinaryUtils.bytesToLong(logData, 0), Arrays.copyOfRange(logData, Long.BYTES + 1, logData.length), LogValueType.fromByte(logData[Long.BYTES])); dataStart = dataEnd;
this.dataFile.seek(dataStart); this.read(this.dataFile, logData); entries[i] = new LogEntry(BinaryUtils.bytesToLong(logData, 0), Arrays.copyOfRange(logData, Long.BYTES + 1, logData.length), LogValueType.fromByte(logData[Long.BYTES])); dataStart = dataEnd;