/** * 写data */ public DataAppendResult append(StoreTxLogPosition txLog, byte[] dataBytes) throws IOException { int length = dataBytes.length; DataAppendResult result = new DataAppendResult(); synchronized (this) { if (length > maxDataEntrySize) { throw new DBException("Value size can not great than " + maxDataEntrySize); } if (fileHeader.getFileLength() + length >= fileSize) { fileHeader.markFull(); throw new CapacityNotEnoughException(); } ReadableByteChannel src = Channels.newChannel(new UnsafeByteArrayInputStream(dataBytes)); long position = fileHeader.getFileLength(); fileChannel.transferFrom(src, position, length); result.setFileId(fileId); result.setFromIndex(position); result.setLength(length); fileHeader.setFileLength(fileHeader.getFileLength() + length); fileHeader.getTotalNum().incrementAndGet(); fileHeader.getAliveNum().incrementAndGet(); this.lastTxLogPosition = txLog; } return result; }
/** * 写data */ public DataAppendResult append(StoreTxLogPosition txLog, byte[] dataBytes) throws IOException { int length = dataBytes.length; DataAppendResult result = new DataAppendResult(); synchronized (this) { if (length > maxDataEntrySize) { throw new DBException("Value size can not great than " + maxDataEntrySize); } if (fileHeader.getFileLength() + length >= fileSize) { fileHeader.markFull(); throw new CapacityNotEnoughException(); } ReadableByteChannel src = Channels.newChannel(new UnsafeByteArrayInputStream(dataBytes)); long position = fileHeader.getFileLength(); fileChannel.transferFrom(src, position, length); result.setFileId(fileId); result.setFromIndex(position); result.setLength(length); fileHeader.setFileLength(fileHeader.getFileLength() + length); fileHeader.getTotalNum().incrementAndGet(); fileHeader.getAliveNum().incrementAndGet(); this.lastTxLogPosition = txLog; } return result; }
/** * 写data */ public DataAppendResult append(StoreTxLogPosition txLog, byte[] dataBytes) throws IOException { int length = dataBytes.length; DataAppendResult result = new DataAppendResult(); synchronized (this) { if (length > maxDataEntrySize) { throw new DBException("Value size can not great than " + maxDataEntrySize); } if (fileHeader.getFileLength() + length >= fileSize) { fileHeader.markFull(); throw new CapacityNotEnoughException(); } ReadableByteChannel src = Channels.newChannel(new UnsafeByteArrayInputStream(dataBytes)); long position = fileHeader.getFileLength(); fileChannel.transferFrom(src, position, length); result.setFileId(fileId); result.setFromIndex(position); result.setLength(length); fileHeader.setFileLength(fileHeader.getFileLength() + length); fileHeader.getTotalNum().incrementAndGet(); fileHeader.getAliveNum().incrementAndGet(); this.lastTxLogPosition = txLog; } return result; }