Examples of OFile


Examples of com.orientechnologies.orient.core.storage.fs.OFile

      return null;

    acquireSharedLock();
    try {
      final long[] pos = getRelativePosition(iPosition);
      final OFile file = files[(int) pos[0]];

      final int recordSize = file.readInt(pos[1]);
      if (recordSize <= 0)
        // RECORD DELETED
        return null;

      byte[] content = new byte[recordSize];
      file.read(pos[1] + RECORD_FIX_SIZE, content, recordSize);
      return content;

    } finally {
      releaseSharedLock();
    }
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

   */
  public int getRecordSize(final long iPosition) throws IOException {
    acquireSharedLock();
    try {
      final long[] pos = getRelativePosition(iPosition);
      final OFile file = files[(int) pos[0]];

      return file.readInt(pos[1]);

    } finally {
      releaseSharedLock();
    }
  }
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

   */
  public long setRecord(final long iPosition, final ORecordId iRid, final byte[] iContent) throws IOException {
    acquireExclusiveLock();
    try {
      long[] pos = getRelativePosition(iPosition);
      final OFile file = files[(int) pos[0]];

      final int recordSize = file.readInt(pos[1]);
      // if (recordSize <= 0)
      // OLogManager.instance().error(this, "Error while writing to data file. The record size was invalid", OIOException.class);

      if (iContent.length == recordSize) {
        // USE THE OLD SPACE SINCE SIZE IT ISN'T CHANGED
        file.write(pos[1] + RECORD_FIX_SIZE, iContent);

        OProfiler.getInstance().updateCounter(PROFILER_UPDATE_REUSED_ALL, +1);
        return iPosition;
      } else if (recordSize - iContent.length > RECORD_FIX_SIZE + 50) {
        // USE THE OLD SPACE BUT UPDATE THE CURRENT SIZE. IT'S PREFEREABLE TO USE THE SAME INSTEAD FINDING A BEST SUITED FOR IT TO
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

  public int deleteRecord(final long iPosition) throws IOException {
    acquireExclusiveLock();
    try {
      final long[] pos = getRelativePosition(iPosition);
      final OFile file = files[(int) pos[0]];

      final int recordSize = file.readInt(pos[1]);
      createHole(iPosition, recordSize);
      return recordSize;

    } finally {
      releaseExclusiveLock();
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

      int holeSize = iRecordSize + RECORD_FIX_SIZE;

      final long timer = OProfiler.getInstance().startChrono();

      long[] pos = getRelativePosition(iRecordOffset);
      final OFile file = files[(int) pos[0]];

      final ODataHoleInfo closestHole = getCloserHole(iRecordOffset, iRecordSize, file, pos);

      OProfiler.getInstance().stopChrono(PROFILER_HOLE_FIND_CLOSER, timer);

      if (closestHole == null)
        // CREATE A NEW ONE
        holeSegment.createHole(iRecordOffset, holeSize);
      else if (closestHole.dataOffset + closestHole.size == iRecordOffset) {
        // IT'S CONSECUTIVE TO ANOTHER HOLE AT THE LEFT: UPDATE LAST ONE
        holeSize += closestHole.size;
        holeSegment.updateHole(closestHole, closestHole.dataOffset, holeSize);

      } else if (holePositionOffset + holeSize == closestHole.dataOffset) {
        // IT'S CONSECUTIVE TO ANOTHER HOLE AT THE RIGHT: UPDATE LAST ONE
        holeSize += closestHole.size;
        holeSegment.updateHole(closestHole, holePositionOffset, holeSize);

      } else {
        // QUITE CLOSE, AUTO-DEFRAG!
        long closestHoleOffset;
        if (iRecordOffset > closestHole.dataOffset)
          closestHoleOffset = (closestHole.dataOffset + closestHole.size) - iRecordOffset;
        else
          closestHoleOffset = closestHole.dataOffset - (iRecordOffset + iRecordSize);

        if (closestHoleOffset < 0) {
          // MOVE THE DATA ON THE RIGHT AND USE ONE HOLE FOR BOTH
          closestHoleOffset *= -1;

          // SEARCH LAST SEGMENT
          long moveFrom = closestHole.dataOffset + closestHole.size;
          int recordSize;

          final long offsetLimit = iRecordOffset;

          final List<long[]> segmentPositions = new ArrayList<long[]>();

          while (moveFrom < offsetLimit) {
            pos = getRelativePosition(moveFrom);

            if (pos[1] >= file.getFilledUpTo())
              // END OF FILE
              break;

            recordSize = file.readInt(pos[1]) + RECORD_FIX_SIZE;

            // SAVE DATA IN ARRAY
            segmentPositions.add(0, new long[] { moveFrom, recordSize });

            moveFrom += recordSize;
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

  }

  private int moveRecord(long iSourcePosition, long iDestinationPosition) throws IOException {
    // GET RECORD TO MOVE
    final long[] pos = getRelativePosition(iSourcePosition);
    final OFile file = files[(int) pos[0]];

    final int recordSize = file.readInt(pos[1]);

    if (recordSize < 0)
      // FOUND HOLE
      return -1;

    final long timer = OProfiler.getInstance().startChrono();

    final short clusterId = file.readShort(pos[1] + OConstants.SIZE_INT);
    final long clusterPosition = file.readLong(pos[1] + OConstants.SIZE_INT + OConstants.SIZE_SHORT);

    final byte[] content = new byte[recordSize];
    file.read(pos[1] + RECORD_FIX_SIZE, content, recordSize);

    if (clusterId > -1) {
      // CHANGE THE POINTMENT OF CLUSTER TO THE NEW POSITION
      final OCluster cluster = storage.getClusterById(clusterId);
      final OPhysicalPosition ppos = cluster.getPhysicalPosition(clusterPosition, new OPhysicalPosition());
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

    return recordSize + RECORD_FIX_SIZE;
  }

  protected void writeRecord(final long[] iFilePosition, final int iClusterSegment, final long iClusterPosition,
      final byte[] iContent) throws IOException {
    final OFile file = files[(int) iFilePosition[0]];

    file.writeInt(iFilePosition[1], iContent.length);
    file.writeShort(iFilePosition[1] + OConstants.SIZE_INT, (short) iClusterSegment);
    file.writeLong(iFilePosition[1] + OConstants.SIZE_INT + OConstants.SIZE_SHORT, iClusterPosition);

    file.write(iFilePosition[1] + RECORD_FIX_SIZE, iContent);
  }
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

    acquireSharedLock();
    try {

      final long[] pos = getRelativePosition(iPosition);

      final OFile file = files[(int) pos[0]];
      long p = pos[1];

      iPPosition.dataSegment = file.readShort(p);
      iPPosition.dataPosition = file.readLong(p += OConstants.SIZE_SHORT);
      iPPosition.type = file.readByte(p += OConstants.SIZE_LONG);
      iPPosition.version = file.readInt(p += OConstants.SIZE_BYTE);
      return iPPosition;

    } finally {
      releaseSharedLock();
    }
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

    acquireExclusiveLock();
    try {

      final long[] pos = getRelativePosition(iPosition);

      final OFile file = files[(int) pos[0]];
      long p = pos[1];

      file.writeShort(p, (short) iDataId);
      file.writeLong(p += OConstants.SIZE_SHORT, iDataPosition);
      file.writeByte(p += OConstants.SIZE_LONG, iRecordType);

    } finally {
      releaseExclusiveLock();
    }
  }
View Full Code Here

Examples of com.orientechnologies.orient.core.storage.fs.OFile

    acquireExclusiveLock();
    try {

      final long[] pos = getRelativePosition(iPosition);

      final OFile file = files[(int) pos[0]];
      long p = pos[1];

      file.writeLong(p += OConstants.SIZE_SHORT, iDataPosition);

    } finally {
      releaseExclusiveLock();
    }
  }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.