/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.emc.sa.service.linux.tasks; import java.util.List; import org.apache.commons.lang.StringUtils; import com.iwave.ext.linux.command.ListMultiPathEntriesCommand; import com.iwave.ext.linux.model.MultiPathEntry; import com.iwave.ext.linux.model.PathInfo; public class FindMultiPathEntryForDmName extends LinuxExecutionTask<MultiPathEntry> { private String dmName; public FindMultiPathEntryForDmName(String dmName) { this.dmName = dmName; } @Override public MultiPathEntry executeTask() throws Exception { List<MultiPathEntry> entries = executeCommand(new ListMultiPathEntriesCommand(), SHORT_TIMEOUT); MultiPathEntry entry = findMultiPathEntry(dmName, entries); if (entry == null) { throw stateException("FindMultiPathEntryForDmName.illegalState.couldNotFindEntry", dmName); } logInfo("find.multipath.dm.name", entry.toString()); checkStatus(entry); return entry; } protected void checkStatus(MultiPathEntry entry) { for (PathInfo path : entry.getPaths()) { if (path.isFailed()) { logWarn("find.multipath.dm.name.failed", entry.getDmName(), path.getDevice()); } } } protected MultiPathEntry findMultiPathEntry(String dmName, List<MultiPathEntry> multipathEntries) { for (MultiPathEntry entry : multipathEntries) { String entryDmName = entry.getDmName(); logDebug("FindMultiPathEntryForDmName.log.checking", entry.getName(), entry.getDmName(), dmName); if (StringUtils.equalsIgnoreCase(entryDmName, dmName)) { return entry; } } return null; } }