Search in sources :

Example 1 with ShmId

use of org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.ShmId in project hadoop by apache.

the class ShortCircuitRegistry method registerSlot.

public synchronized void registerSlot(ExtendedBlockId blockId, SlotId slotId, boolean isCached) throws InvalidRequestException {
    if (!enabled) {
        if (LOG.isTraceEnabled()) {
            LOG.trace(this + " can't register a slot because the " + "ShortCircuitRegistry is not enabled.");
        }
        throw new UnsupportedOperationException();
    }
    ShmId shmId = slotId.getShmId();
    RegisteredShm shm = segments.get(shmId);
    if (shm == null) {
        throw new InvalidRequestException("there is no shared memory segment " + "registered with shmId " + shmId);
    }
    Slot slot = shm.registerSlot(slotId.getSlotIdx(), blockId);
    if (isCached) {
        slot.makeAnchorable();
    } else {
        slot.makeUnanchorable();
    }
    boolean added = slots.put(blockId, slot);
    Preconditions.checkState(added);
    if (LOG.isTraceEnabled()) {
        LOG.trace(this + ": registered " + blockId + " with slot " + slotId + " (isCached=" + isCached + ")");
    }
}
Also used : ShmId(org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.ShmId) Slot(org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.Slot) InvalidRequestException(org.apache.hadoop.fs.InvalidRequestException)

Example 2 with ShmId

use of org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.ShmId in project hadoop by apache.

the class ShortCircuitRegistry method unregisterSlot.

public synchronized void unregisterSlot(SlotId slotId) throws InvalidRequestException {
    if (!enabled) {
        if (LOG.isTraceEnabled()) {
            LOG.trace("unregisterSlot: ShortCircuitRegistry is " + "not enabled.");
        }
        throw new UnsupportedOperationException();
    }
    ShmId shmId = slotId.getShmId();
    RegisteredShm shm = segments.get(shmId);
    if (shm == null) {
        throw new InvalidRequestException("there is no shared memory segment " + "registered with shmId " + shmId);
    }
    Slot slot = shm.getSlot(slotId.getSlotIdx());
    slot.makeInvalid();
    shm.unregisterSlot(slotId.getSlotIdx());
    slots.remove(slot.getBlockId(), slot);
}
Also used : ShmId(org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.ShmId) Slot(org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.Slot) InvalidRequestException(org.apache.hadoop.fs.InvalidRequestException)

Example 3 with ShmId

use of org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.ShmId in project hadoop by apache.

the class ShortCircuitRegistry method createNewMemorySegment.

/**
   * Handle a DFSClient request to create a new memory segment.
   *
   * @param clientName    Client name as reported by the client.
   * @param sock          The DomainSocket to associate with this memory
   *                        segment.  When this socket is closed, or the
   *                        other side writes anything to the socket, the
   *                        segment will be closed.  This can happen at any
   *                        time, including right after this function returns.
   * @return              A NewShmInfo object.  The caller must close the
   *                        NewShmInfo object once they are done with it.
   * @throws IOException  If the new memory segment could not be created.
   */
public NewShmInfo createNewMemorySegment(String clientName, DomainSocket sock) throws IOException {
    NewShmInfo info = null;
    RegisteredShm shm = null;
    ShmId shmId = null;
    synchronized (this) {
        if (!enabled) {
            if (LOG.isTraceEnabled()) {
                LOG.trace("createNewMemorySegment: ShortCircuitRegistry is " + "not enabled.");
            }
            throw new UnsupportedOperationException();
        }
        FileInputStream fis = null;
        try {
            do {
                shmId = ShmId.createRandom();
            } while (segments.containsKey(shmId));
            fis = shmFactory.createDescriptor(clientName, SHM_LENGTH);
            shm = new RegisteredShm(clientName, shmId, fis, this);
        } finally {
            if (shm == null) {
                IOUtils.closeQuietly(fis);
            }
        }
        info = new NewShmInfo(shmId, fis);
        segments.put(shmId, shm);
    }
    // Drop the registry lock to prevent deadlock.
    // After this point, RegisteredShm#handle may be called at any time.
    watcher.add(sock, shm);
    if (LOG.isTraceEnabled()) {
        LOG.trace("createNewMemorySegment: created " + info.shmId);
    }
    return info;
}
Also used : ShmId(org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.ShmId) FileInputStream(java.io.FileInputStream)

Aggregations

ShmId (org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.ShmId)3 InvalidRequestException (org.apache.hadoop.fs.InvalidRequestException)2 Slot (org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.Slot)2 FileInputStream (java.io.FileInputStream)1