Package com.caucho.db.lock

Examples of com.caucho.db.lock.Lock


    }

    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getLock();
      lock.lockRead(_blockLockTimeout);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);

        byte []blockBuffer = block.getBuffer();

        System.arraycopy(blockBuffer, blockOffset + fragmentOffset,
                         buffer, offset, length);

        return length;
      } finally {
        lock.unlockRead();
      }
    } finally {
      block.free();
    }
  }
View Full Code Here


    }

    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getLock();
      lock.lockRead(_blockLockTimeout);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);
        blockOffset += fragmentOffset;

        byte []blockBuffer = block.getBuffer();

        for (int i = 0; i < length; i++) {
          int ch1 = blockBuffer[blockOffset] & 0xff;
          int ch2 = blockBuffer[blockOffset + 1] & 0xff;

          buffer[offset + i] = (char) ((ch1 << 8) + ch2);

          blockOffset += 2;
        }

        return length;
      } finally {
        lock.unlockRead();
      }
    } finally {
      block.free();
    }
  }
View Full Code Here

    throws IOException
  {
    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getLock();
      lock.lockRead(_blockLockTimeout);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);

        byte []blockBuffer = block.getBuffer();

        return readLong(blockBuffer, blockOffset + fragmentOffset);
      } finally {
        lock.unlockRead();
      }
    } finally {
      block.free();
    }
  }
View Full Code Here

      try {
        byte []blockBuffer = block.getBuffer();
        int freeOffset = -1;

        Lock lock = block.getLock();
        lock.lockReadAndWrite(_blockLockTimeout);

        try {
          for (int i = 0; i < MINI_FRAG_PER_BLOCK; i++) {
            int offset = i / 8 + MINI_FRAG_ALLOC_OFFSET;
            int mask = 1 << (i % 8);

            if ((blockBuffer[offset] & mask) == 0) {
              fragOffset = i;
              blockBuffer[offset] |= mask;
              block.setDirty(offset, offset + 1);
              break;
            }
          }

          // fragment allocated underneath us
          if (fragOffset < 0)
            continue;

          for (int i = 0; i < MINI_FRAG_PER_BLOCK; i++) {
            int offset = i / 8 + MINI_FRAG_ALLOC_OFFSET;
            int mask = 1 << (i % 8);

            if ((blockBuffer[offset] & mask) == 0) {
              freeOffset =
                (int) (ALLOC_BYTES_PER_BLOCK * (blockAddr / BLOCK_SIZE));
              break;
            }
          }
        } finally {
          lock.unlockReadAndWrite();
        }

        if (freeOffset >= 0) {
          synchronized (_allocationLock) {
            _allocationTable[freeOffset + 1] = 0;
View Full Code Here

    throws IOException
  {
    Block block = readBlock(fragmentAddress);

    try {
      Lock lock = block.getLock();
      lock.lockReadAndWrite(_blockLockTimeout);

      try {
        int fragIndex = (int) (fragmentAddress & BLOCK_OFFSET_MASK);
        int offset = fragIndex / 8 + MINI_FRAG_ALLOC_OFFSET;
        int mask = 1 << (fragIndex % 8);
        byte []blockBuffer = block.getBuffer();

        blockBuffer[offset] &= ~mask;
        block.setDirty(offset, offset + 1);

        int i = (int) (ALLOC_BYTES_PER_BLOCK * (fragmentAddress / BLOCK_SIZE));
        // int j = (int) (fragmentAddress & 0xff);

        synchronized (_allocationLock) {
          int fragMask = _allocationTable[i + 1] & 0xff;
          //System.out.println((fragmentAddress / BLOCK_SIZE) + ":" + j + " DELETE");

          if (_allocationTable[i] != ALLOC_MINI_FRAG)
            System.out.println("BAD ENTRY: " + fragMask);

          _allocationTable[i + 1] = 0;

          _miniFragmentUseCount--;

          setAllocDirty(i + 1, i + 2);
        }
      } finally {
        lock.unlockReadAndWrite();
      }
    } finally {
      block.free();
    }
  }
View Full Code Here

                                             fragmentOffset, length));

    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getLock();
      lock.lockReadAndWrite(_blockLockTimeout);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);

        byte []blockBuffer = block.getBuffer();

        blockOffset += fragmentOffset;

        System.arraycopy(buffer, offset,
                         blockBuffer, blockOffset,
                         length);

        block.setDirty(blockOffset, blockOffset + length);
       
        return block;
      } finally {
        lock.unlockReadAndWrite();
      }
    } finally {
      block.free();
    }
  }
View Full Code Here

                                             fragmentOffset, length));

    Block block = readBlock(addressToBlockId(fragmentAddress));

    try {
      Lock lock = block.getLock();
      lock.lockReadAndWrite(_blockLockTimeout);

      try {
        int blockOffset = getMiniFragmentOffset(fragmentAddress);

        byte []blockBuffer = block.getBuffer();

        blockOffset += fragmentOffset;

        int blockTail = blockOffset;

        for (int i = 0; i < length; i++) {
          char ch = buffer[offset + i];

          blockBuffer[blockTail] = (byte) (ch >> 8);
          blockBuffer[blockTail + 1] = (byte) (ch);

          blockTail += 2;
        }

        block.setDirty(blockOffset, blockTail);
       
        return block;
      } finally {
        lock.unlockReadAndWrite();
      }
    } finally {
      block.free();
    }
  }
View Full Code Here

    }
    else
      block = _store.loadBlock(blockId);

    try {
      Lock blockLock = block.getLock();
     
      blockLock.lockRead(_timeout);

      try {
        validateIndex(block);
       
        block.read();
       
  byte []buffer = block.getBuffer();

  boolean isLeaf = isLeaf(buffer, block);
     
  long value = lookupTuple(blockId, buffer,
         keyBuffer, keyOffset, keyLength,
         isLeaf);

  if (isLeaf || value == FAIL)
    return value;
  else
    return lookup(keyBuffer, keyOffset, keyLength, value);
      } finally {
        blockLock.unlockRead();
      }
    } finally {
      block.free();
    }
  }
View Full Code Here

                                  long value,
                                  boolean isOverride,
                                  Block block)
    throws IOException, SQLException
  {
    Lock blockLock = block.getLock();
    blockLock.lockRead(_timeout);
     
    try {
      validateIndex(block);
       
      block.read();
     
      long blockId = block.getBlockId();
      byte []buffer = block.getBuffer();

      int length = getLength(buffer);

      if (length == _n) {
        // return false if the block needs to be split
        return false;
      }
 
      if (isLeaf(buffer, block)) {
        return false;
      }

      long childBlockId = lookupTuple(blockId, buffer,
                                      keyBuffer, keyOffset, keyLength,
                                      false);

      return insert(keyBuffer, keyOffset, keyLength,
                    value, isOverride, true,
                    childBlockId);
    } finally {
      blockLock.unlockRead();
    }
  }
View Full Code Here

                                   long value,
                                   boolean isOverride,
                                   Block block)
    throws IOException, SQLException
  {
    Lock blockLock = block.getLock();
    blockLock.lockReadAndWrite(_timeout);
     
    try {
      block.read();
     
      validate(block);
     
      long blockId = block.getBlockId();
      byte []buffer = block.getBuffer();

      int length = getLength(buffer);

      if (length == _n) {
        // return false if the block needs to be split
        return false;
      }
 
      if (isLeaf(buffer, block)) {
        insertValue(keyBuffer, keyOffset, keyLength,
                    value, isOverride, block);

        validate(block);

        return true;
      }

      long childBlockId = lookupTuple(blockId, buffer,
                                      keyBuffer, keyOffset, keyLength,
                                      false);

      while (! insert(keyBuffer, keyOffset, keyLength,
                      value, isOverride, true,
                      childBlockId)) {
        split(block, childBlockId);

        childBlockId = lookupTuple(blockId, buffer,
                                   keyBuffer, keyOffset, keyLength,
                                   false);
      }
     
      validate(block);

      return true;
    } finally {
      blockLock.unlockReadAndWrite();
    }
  }
View Full Code Here

TOP

Related Classes of com.caucho.db.lock.Lock

Copyright © 2018 www.massapicom. 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.