Esempio n. 1
0
 private void writeRecordHeaderToMappedBuffer(RecordHeader header) {
   mappedDataBuffer.position(header.getPosition());
   mappedDataBuffer.putInt(header.getDataSize());
   mappedDataBuffer.put(header.getFragmented());
   if (header.isFragmented()) {
     mappedDataBuffer.putInt(header.getNextPos());
   }
 }
Esempio n. 2
0
 /* (non-Javadoc)
  * @see com.ongraphdb.store.DiskSore1#writeData(byte[], int)
  */
 public int writeData(byte[] data, int blockSize) throws IOException {
   RecordHeader header = new RecordHeader().setDataSize(data.length).setFragmented(false);
   int recordSize = getRecordSize(blockSize, header);
   header.setPosition(getNextPosition(recordSize));
   try {
     writeRecordHeader(header);
     writeRecordData(header, data);
   } catch (IOException e) {
     // write to hole
     throw e;
   }
   return header.getPosition();
 }
Esempio n. 3
0
  /* (non-Javadoc)
   * @see com.ongraphdb.store.DiskSore1#readData(int)
   */
  public byte[] readData(int pos) throws IOException {
    RecordHeader header = readRecordHeader(pos);
    byte[] data = readRecordData(header);

    if (header.isFragmented()) {
      byte[] result, tailData;
      tailData = readData(header.getNextPos());
      result = new byte[data.length + tailData.length];
      System.arraycopy(data, 0, result, 0, data.length);
      System.arraycopy(tailData, 0, result, data.length, tailData.length);
      return result;
    }
    return data;
  }
Esempio n. 4
0
 private void writeRecordHeaderToChannel(RecordHeader header) throws IOException {
   ByteBuffer buffer = ByteBuffer.allocate(header.getSize());
   buffer.putInt(header.getDataSize());
   buffer.put(header.getFragmented());
   if (header.isFragmented()) {
     buffer.putInt(header.getNextPos());
   }
   buffer.flip();
   dataChannel.position(header.getPosition());
   dataChannel.write(buffer);
 }
Esempio n. 5
0
 private RecordHeader readRecordHeaderFromMappedBuffer(int pos) {
   RecordHeader header = new RecordHeader();
   mappedDataBuffer.position(pos);
   header.setPosition(pos);
   header.setDataSize(mappedDataBuffer.getInt());
   header.setFragmented(mappedDataBuffer.get());
   if (header.isFragmented()) {
     header.setNextPos(mappedDataBuffer.getInt());
   }
   return header;
 }
Esempio n. 6
0
 private RecordHeader readRecordHeaderFromChannel(int pos) throws IOException {
   RecordHeader header = new RecordHeader();
   header.setPosition(pos);
   ByteBuffer buffer = ByteBuffer.allocate(RecordHeader.HEADER_BYTES);
   dataChannel.position(pos);
   dataChannel.read(buffer);
   buffer.flip();
   header.setDataSize(buffer.getInt());
   header.setFragmented(buffer.get());
   if (header.isFragmented()) {
     header.setNextPos(buffer.getInt());
   }
   return header;
 }
Esempio n. 7
0
 private void writeRecordDataToMappedBuffer(RecordHeader header, byte[] data) {
   mappedDataBuffer.position(header.getPosition() + header.getSize());
   mappedDataBuffer.put(data);
 }
Esempio n. 8
0
 private void writeRecordDataToChannel(RecordHeader header, byte[] data) throws IOException {
   ByteBuffer buffer = ByteBuffer.wrap(data);
   dataChannel.position(header.getPosition() + header.getSize());
   dataChannel.write(buffer);
   dataChannel.force(false);
 }
Esempio n. 9
0
 private byte[] readRecordDataFromMappedBuffer(RecordHeader header) {
   byte[] data = new byte[header.getDataSize()];
   mappedDataBuffer.position(header.getPosition() + header.getSize());
   mappedDataBuffer.get(data);
   return data;
 }
Esempio n. 10
0
 private byte[] readRecordDataFromChannel(RecordHeader header) throws IOException {
   ByteBuffer buffer = ByteBuffer.allocate(header.getDataSize());
   dataChannel.position(header.getPosition() + header.getSize());
   dataChannel.read(buffer);
   return buffer.array();
 }
Esempio n. 11
0
 private boolean isMapped(RecordHeader header) {
   return dataMappedMemorySize > (header.getPosition() + header.getSize() + header.getDataSize());
 }
Esempio n. 12
0
 protected int getRecordSize(int blockSize, RecordHeader header) {
   return ((header.getSize() + header.getDataSize() + blockSize - 1) / blockSize) * blockSize;
 }
Esempio n. 13
0
 /* (non-Javadoc)
  * @see com.ongraphdb.store.DiskSore1#updateData(int, byte[], int)
  */
 public void updateData(int pos, byte[] data, int blockSize) throws IOException {
   RecordHeader oldHeader = readRecordHeader(pos);
   RecordHeader newHeader =
       new RecordHeader().setPosition(pos).setDataSize(data.length).setFragmented(false);
   int oldRecordSize = getRecordSize(blockSize, oldHeader);
   int newRecordSize = getRecordSize(blockSize, newHeader);
   if (oldRecordSize >= newRecordSize) {
     if (oldHeader.isFragmented() || (oldRecordSize - newRecordSize > blockSize)) {
       // write tail to hole
       // write rest blocks to hole
     }
     writeRecordHeader(newHeader);
     writeRecordData(newHeader, data);
   } else {
     newHeader.setFragmented(true);
     newHeader.setDataSize(oldRecordSize - newHeader.getSize());
     byte[] headData = new byte[newHeader.getDataSize()];
     byte[] tailData = new byte[data.length - newHeader.getDataSize()];
     System.arraycopy(data, 0, headData, 0, newHeader.getDataSize());
     System.arraycopy(data, headData.length, tailData, 0, tailData.length);
     RecordHeader newTailHeader =
         new RecordHeader().setDataSize(tailData.length).setFragmented(false);
     int newRecordTailSize = getRecordSize(blockSize, newTailHeader);
     if (oldHeader.isFragmented()) {
       RecordHeader oldHeaderTail = readRecordHeader(oldHeader.getNextPos());
       int oldRecordTailSize = getRecordSize(blockSize, oldHeaderTail);
       if (oldRecordTailSize >= newRecordSize) {
         newTailHeader.setPosition(oldHeaderTail.getPosition());
         // write rest blocks to hole
       } else {
         // write tail to hole
         newTailHeader.setPosition(getNextPosition(newRecordTailSize));
       }
     } else {
       newTailHeader.setPosition(getNextPosition(newRecordTailSize));
     }
     newHeader.setNextPos(newTailHeader.getPosition());
     writeRecordHeader(newHeader);
     writeRecordData(newHeader, headData);
     writeRecordHeader(newTailHeader);
     writeRecordData(newTailHeader, tailData);
   }
 }