Search in sources :

Example 26 with PnfsGetFileAttributes

use of org.dcache.vehicles.PnfsGetFileAttributes in project dcache by dCache.

the class TransferManagerHandler method deletePnfsEntry.

public void deletePnfsEntry() {
    if (state == RECEIVED_PNFS_CHECK_BEFORE_DELETE_STATE) {
        PnfsDeleteEntryMessage pnfsMsg = new PnfsDeleteEntryMessage(pnfsPath);
        setState(WAITING_FOR_PNFS_ENTRY_DELETE);
        manager.persist(this);
        pnfsMsg.setReplyRequired(true);
        CellStub.addCallback(manager.getPnfsManagerStub().send(pnfsMsg), this, executor);
    } else {
        PnfsGetFileAttributes message = new PnfsGetFileAttributes(pnfsPath, EnumSet.noneOf(FileAttribute.class));
        setState(WAITING_FOR_PNFS_CHECK_BEFORE_DELETE_STATE);
        CellStub.addCallback(manager.getPnfsManagerStub().send(message), this, executor);
    }
}
Also used : PnfsGetFileAttributes(org.dcache.vehicles.PnfsGetFileAttributes) PnfsDeleteEntryMessage(diskCacheV111.vehicles.PnfsDeleteEntryMessage) FileAttribute(org.dcache.namespace.FileAttribute)

Example 27 with PnfsGetFileAttributes

use of org.dcache.vehicles.PnfsGetFileAttributes in project dcache by dCache.

the class PnfsHandler method getFileAttributes.

/**
 * Get file attributes. The PnfsManager is free to return fewer attributes than requested. If
 * <code>attr</code> is an empty array, file existence if checked.
 *
 * @param pnfsid
 * @param attr        array of requested attributes.
 * @param mask        Additional AccessMask access rights to check
 * @param updateAtime update file's last access time
 * @return requested attributes
 */
public FileAttributes getFileAttributes(PnfsId pnfsid, Set<FileAttribute> attr, Set<AccessMask> mask, boolean updateAtime) throws CacheException {
    PnfsGetFileAttributes msg = new PnfsGetFileAttributes(pnfsid, attr);
    msg.setAccessMask(mask);
    msg.setUpdateAtime(updateAtime);
    return request(msg).getFileAttributes();
}
Also used : PnfsGetFileAttributes(org.dcache.vehicles.PnfsGetFileAttributes)

Example 28 with PnfsGetFileAttributes

use of org.dcache.vehicles.PnfsGetFileAttributes in project dcache by dCache.

the class HsmRestoreTest method testRestoreNoLocationsAllPoolsCantStage.

@Test
public void testRestoreNoLocationsAllPoolsCantStage() throws Exception {
    PnfsId pnfsId = new PnfsId("000000000000000000000000000000000001");
    /*
         * pre-configure pool selection unit
         */
    List<String> pools = new ArrayList<>(3);
    pools.add("pool1");
    pools.add("pool2");
    PoolMonitorHelper.prepareSelectionUnit(_selectionUnit, _access, pools);
    /*
         * prepare reply for GetStorageInfo
         */
    _storageInfo.addLocation(new URI("osm://osm?"));
    _storageInfo.setIsNew(false);
    PnfsGetFileAttributes fileAttributesMessage = new PnfsGetFileAttributes(pnfsId, EnumSet.noneOf(FileAttribute.class));
    FileAttributes attributes = new FileAttributes();
    StorageInfos.injectInto(_storageInfo, attributes);
    attributes.setPnfsId(pnfsId);
    attributes.setLocations(Collections.<String>emptyList());
    attributes.setSize(5);
    attributes.setAccessLatency(StorageInfo.DEFAULT_ACCESS_LATENCY);
    attributes.setRetentionPolicy(StorageInfo.DEFAULT_RETENTION_POLICY);
    attributes.setChecksums(Collections.emptySet());
    fileAttributesMessage.setFileAttributes(attributes);
    _cell.prepareMessage(new CellPath("PnfsManager"), fileAttributesMessage, true);
    /*
         * make pools know to 'PoolManager'
         */
    long serialId = System.currentTimeMillis();
    PoolV2Mode poolMode = new PoolV2Mode(PoolV2Mode.ENABLED);
    Set<String> connectedHSM = new HashSet<>(1);
    connectedHSM.add("osm");
    for (String pool : pools) {
        PoolCostInfo poolCostInfo = new PoolCostInfo(pool, IoQueueManager.DEFAULT_QUEUE);
        poolCostInfo.setSpaceUsage(100, 20, 30, 50);
        poolCostInfo.setQueueSizes(0, 10, 0, 0, 10, 0);
        poolCostInfo.addExtendedMoverQueueSizes(IoQueueManager.DEFAULT_QUEUE, 0, 10, 0, 0, 0);
        CellMessage envelope = new CellMessage(new CellAddressCore("PoolManager"), null);
        envelope.addSourceAddress(new CellAddressCore(pool));
        PoolManagerPoolUpMessage poolUpMessage = new PoolManagerPoolUpMessage(pool, serialId, poolMode, poolCostInfo);
        prepareSelectionUnit(pool, poolMode, connectedHSM);
        _costModule.messageArrived(envelope, poolUpMessage);
    }
    final AtomicInteger stageRequests1 = new AtomicInteger(0);
    final AtomicInteger stageRequests2 = new AtomicInteger(0);
    final AtomicInteger replyRequest = new AtomicInteger(0);
    MessageAction messageAction1 = new StageMessageAction(stageRequests1);
    MessageAction messageAction2 = new StageMessageAction(stageRequests2);
    MessageAction messageAction3 = new StageMessageAction(replyRequest);
    _cell.registerAction("pool1", PoolFetchFileMessage.class, messageAction1);
    _cell.registerAction("pool2", PoolFetchFileMessage.class, messageAction2);
    _cell.registerAction("door", PoolMgrSelectReadPoolMsg.class, messageAction3);
    PoolMgrSelectReadPoolMsg selectReadPool = new PoolMgrSelectReadPoolMsg(attributes, _protocolInfo, null);
    CellMessage cellMessage = new CellMessage(new CellAddressCore("PoolManager"), selectReadPool);
    cellMessage.getSourcePath().add(new CellAddressCore("door", "local"));
    _rc.messageArrived(cellMessage, selectReadPool);
    // first pool replies with an error
    CellMessage m = __messages.remove(0);
    PoolFetchFileMessage ff = (PoolFetchFileMessage) m.getMessageObject();
    ff.setFailed(17, "pech");
    _rc.messageArrived(m, m.getMessageObject());
    // pool manager bounces request back to door
    m = __messages.remove(0);
    selectReadPool = (PoolMgrSelectReadPoolMsg) m.getMessageObject();
    assertEquals("Unexpected reply from pool manager", 17, selectReadPool.getReturnCode());
    // resubmit request
    PoolMgrSelectReadPoolMsg selectReadPool2 = new PoolMgrSelectReadPoolMsg(attributes, _protocolInfo, selectReadPool.getContext());
    CellMessage cellMessage2 = new CellMessage(new CellAddressCore("PoolManager"), selectReadPool2);
    cellMessage2.getSourcePath().add(new CellAddressCore("door", "local"));
    _rc.messageArrived(cellMessage2, selectReadPool2);
    // second pool replies with an error
    m = __messages.remove(0);
    ff = (PoolFetchFileMessage) m.getMessageObject();
    ff.setFailed(17, "pech");
    _rc.messageArrived(m, m.getMessageObject());
    // pool manager bounces request back to door
    m = __messages.remove(0);
    selectReadPool2 = (PoolMgrSelectReadPoolMsg) m.getMessageObject();
    assertEquals("Unexpected reply from pool manager", 17, selectReadPool.getReturnCode());
    // resubmit request
    PoolMgrSelectReadPoolMsg selectReadPool3 = new PoolMgrSelectReadPoolMsg(attributes, _protocolInfo, selectReadPool2.getContext());
    CellMessage cellMessage3 = new CellMessage(new CellAddressCore("PoolManager"), selectReadPool2);
    _rc.messageArrived(cellMessage3, selectReadPool3);
    assertEquals("Three stage requests where expected", 3, stageRequests1.get() + stageRequests2.get());
    assertTrue("No stage requests sent to pool1", stageRequests1.get() != 0);
    assertTrue("No stage requests sent to pool2", stageRequests2.get() != 0);
}
Also used : CellPath(dmg.cells.nucleus.CellPath) PoolMgrSelectReadPoolMsg(diskCacheV111.vehicles.PoolMgrSelectReadPoolMsg) CellAddressCore(dmg.cells.nucleus.CellAddressCore) PoolFetchFileMessage(diskCacheV111.vehicles.PoolFetchFileMessage) PnfsId(diskCacheV111.util.PnfsId) ArrayList(java.util.ArrayList) URI(java.net.URI) CellMessage(dmg.cells.nucleus.CellMessage) PoolManagerPoolUpMessage(diskCacheV111.vehicles.PoolManagerPoolUpMessage) PoolV2Mode(diskCacheV111.pools.PoolV2Mode) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MessageAction(org.dcache.tests.cells.MockCellEndpoint.MessageAction) PnfsGetFileAttributes(org.dcache.vehicles.PnfsGetFileAttributes) FileAttributes(org.dcache.vehicles.FileAttributes) PnfsGetFileAttributes(org.dcache.vehicles.PnfsGetFileAttributes) PoolCostInfo(diskCacheV111.pools.PoolCostInfo) FileAttribute(org.dcache.namespace.FileAttribute) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 29 with PnfsGetFileAttributes

use of org.dcache.vehicles.PnfsGetFileAttributes in project dcache by dCache.

the class HsmRestoreTest method testRestoreNoLocationsSinglePool.

@Test
public void testRestoreNoLocationsSinglePool() throws Exception {
    PnfsId pnfsId = new PnfsId("000000000000000000000000000000000001");
    /*
         * pre-configure pool selection unit
         */
    List<String> pools = new ArrayList<>(3);
    pools.add("pool1");
    PoolMonitorHelper.prepareSelectionUnit(_selectionUnit, _access, pools);
    /*
         * prepare reply for GetStorageInfo
         */
    _storageInfo.addLocation(new URI("osm://osm?"));
    _storageInfo.setIsNew(false);
    PnfsGetFileAttributes fileAttributesMessage = new PnfsGetFileAttributes(pnfsId, EnumSet.noneOf(FileAttribute.class));
    FileAttributes attributes = new FileAttributes();
    StorageInfos.injectInto(_storageInfo, attributes);
    attributes.setPnfsId(pnfsId);
    attributes.setLocations(Collections.<String>emptyList());
    attributes.setSize(5);
    attributes.setAccessLatency(StorageInfo.DEFAULT_ACCESS_LATENCY);
    attributes.setRetentionPolicy(StorageInfo.DEFAULT_RETENTION_POLICY);
    attributes.setChecksums(Collections.emptySet());
    fileAttributesMessage.setFileAttributes(attributes);
    _cell.prepareMessage(new CellPath("PnfsManager"), fileAttributesMessage, true);
    /*
         * make pools know to 'PoolManager'
         */
    long serialId = System.currentTimeMillis();
    PoolV2Mode poolMode = new PoolV2Mode(PoolV2Mode.ENABLED);
    Set<String> connectedHSM = new HashSet<>(1);
    connectedHSM.add("osm");
    for (String pool : pools) {
        PoolCostInfo poolCostInfo = new PoolCostInfo(pool, IoQueueManager.DEFAULT_QUEUE);
        poolCostInfo.setSpaceUsage(100, 20, 30, 50);
        poolCostInfo.setQueueSizes(0, 10, 0, 0, 10, 0);
        poolCostInfo.addExtendedMoverQueueSizes(IoQueueManager.DEFAULT_QUEUE, 0, 10, 0, 0, 0);
        CellMessage envelope = new CellMessage(new CellAddressCore("PoolManager"), null);
        envelope.addSourceAddress(new CellAddressCore(pool));
        PoolManagerPoolUpMessage poolUpMessage = new PoolManagerPoolUpMessage(pool, serialId, poolMode, poolCostInfo);
        prepareSelectionUnit(pool, poolMode, connectedHSM);
        _costModule.messageArrived(envelope, poolUpMessage);
    }
    final AtomicInteger stageRequests1 = new AtomicInteger(0);
    final AtomicInteger replyRequest = new AtomicInteger(0);
    MessageAction messageAction1 = new StageMessageAction(stageRequests1);
    MessageAction messageAction2 = new StageMessageAction(replyRequest);
    _cell.registerAction("pool1", PoolFetchFileMessage.class, messageAction1);
    _cell.registerAction("door", PoolMgrSelectReadPoolMsg.class, messageAction2);
    PoolMgrSelectReadPoolMsg selectReadPool = new PoolMgrSelectReadPoolMsg(attributes, _protocolInfo, null);
    CellMessage cellMessage = new CellMessage(new CellAddressCore("PoolManager"), selectReadPool);
    cellMessage.getSourcePath().add(new CellAddressCore("door", "local"));
    _rc.messageArrived(cellMessage, selectReadPool);
    // pool replies with an error
    CellMessage m = __messages.remove(0);
    PoolFetchFileMessage ff = (PoolFetchFileMessage) m.getMessageObject();
    ff.setFailed(17, "pech");
    _rc.messageArrived(m, m.getMessageObject());
    // pool manager bounces request back to door
    m = __messages.remove(0);
    selectReadPool = (PoolMgrSelectReadPoolMsg) m.getMessageObject();
    assertEquals("Unexpected reply from pool manager", 17, selectReadPool.getReturnCode());
    // resubmit request
    PoolMgrSelectReadPoolMsg selectReadPool2 = new PoolMgrSelectReadPoolMsg(attributes, _protocolInfo, selectReadPool.getContext());
    CellMessage cellMessage2 = new CellMessage(new CellAddressCore("PoolManager"), selectReadPool2);
    _rc.messageArrived(cellMessage2, selectReadPool2);
    assertEquals("Single Pool excluded on second shot", 2, stageRequests1.get());
}
Also used : CellPath(dmg.cells.nucleus.CellPath) PoolMgrSelectReadPoolMsg(diskCacheV111.vehicles.PoolMgrSelectReadPoolMsg) CellAddressCore(dmg.cells.nucleus.CellAddressCore) PoolFetchFileMessage(diskCacheV111.vehicles.PoolFetchFileMessage) PnfsId(diskCacheV111.util.PnfsId) ArrayList(java.util.ArrayList) URI(java.net.URI) CellMessage(dmg.cells.nucleus.CellMessage) PoolManagerPoolUpMessage(diskCacheV111.vehicles.PoolManagerPoolUpMessage) PoolV2Mode(diskCacheV111.pools.PoolV2Mode) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MessageAction(org.dcache.tests.cells.MockCellEndpoint.MessageAction) PnfsGetFileAttributes(org.dcache.vehicles.PnfsGetFileAttributes) FileAttributes(org.dcache.vehicles.FileAttributes) PnfsGetFileAttributes(org.dcache.vehicles.PnfsGetFileAttributes) PoolCostInfo(diskCacheV111.pools.PoolCostInfo) FileAttribute(org.dcache.namespace.FileAttribute) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 30 with PnfsGetFileAttributes

use of org.dcache.vehicles.PnfsGetFileAttributes in project dcache by dCache.

the class PnfsManagerTest method testStorageInfoNoTags.

@Test
public void testStorageInfoNoTags() throws Exception {
    FsInode dir = _fs.mkdir("/notags");
    FsInode inode = _fs.createFile(dir, "afile");
    PnfsGetFileAttributes message = new PnfsGetFileAttributes(new PnfsId(inode.statCache().getId()), SOME_ATTRIBUTES);
    _pnfsManager.getFileAttributes(message);
    assertEquals("failed to get storageInfo for a directory without tags", 0, message.getReturnCode());
}
Also used : FsInode(org.dcache.chimera.FsInode) PnfsId(diskCacheV111.util.PnfsId) PnfsGetFileAttributes(org.dcache.vehicles.PnfsGetFileAttributes) Test(org.junit.Test)

Aggregations

PnfsGetFileAttributes (org.dcache.vehicles.PnfsGetFileAttributes)35 PnfsId (diskCacheV111.util.PnfsId)23 Test (org.junit.Test)18 FileAttribute (org.dcache.namespace.FileAttribute)15 FileAttributes (org.dcache.vehicles.FileAttributes)12 CacheException (diskCacheV111.util.CacheException)11 PnfsCreateEntryMessage (diskCacheV111.vehicles.PnfsCreateEntryMessage)9 CellMessage (dmg.cells.nucleus.CellMessage)8 CellPath (dmg.cells.nucleus.CellPath)8 SerializationException (dmg.cells.nucleus.SerializationException)8 TimeoutCacheException (diskCacheV111.util.TimeoutCacheException)7 PnfsFlagMessage (diskCacheV111.vehicles.PnfsFlagMessage)6 NoRouteToCellException (dmg.cells.nucleus.NoRouteToCellException)6 URI (java.net.URI)6 PnfsSetFileAttributes (org.dcache.vehicles.PnfsSetFileAttributes)6 PnfsDeleteEntryMessage (diskCacheV111.vehicles.PnfsDeleteEntryMessage)5 PnfsGetCacheLocationsMessage (diskCacheV111.vehicles.PnfsGetCacheLocationsMessage)5 ArrayList (java.util.ArrayList)5 PoolCostInfo (diskCacheV111.pools.PoolCostInfo)4 PoolV2Mode (diskCacheV111.pools.PoolV2Mode)4