| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| package org.apache.cloudstack.storage.resource; |
| |
| import java.net.URI; |
| import java.util.concurrent.Executors; |
| |
| import org.apache.log4j.Logger; |
| import org.springframework.stereotype.Component; |
| |
| import org.apache.cloudstack.storage.template.DownloadManagerImpl; |
| |
| import com.cloud.agent.api.Answer; |
| import com.cloud.agent.api.Command; |
| import com.cloud.storage.JavaStorageLayer; |
| import com.cloud.utils.exception.CloudRuntimeException; |
| import com.cloud.utils.script.Script; |
| |
| @Component |
| public class LocalNfsSecondaryStorageResource extends NfsSecondaryStorageResource { |
| |
| private static final Logger s_logger = Logger.getLogger(LocalNfsSecondaryStorageResource.class); |
| |
| public LocalNfsSecondaryStorageResource() { |
| this._dlMgr = new DownloadManagerImpl(); |
| ((DownloadManagerImpl)_dlMgr).setThreadPool(Executors.newFixedThreadPool(10)); |
| _storage = new JavaStorageLayer(); |
| this._inSystemVM = false; |
| } |
| |
| @Override |
| public void setParentPath(String path) { |
| this._parent = path; |
| } |
| |
| @Override |
| public Answer executeRequest(Command cmd) { |
| return super.executeRequest(cmd); |
| } |
| |
| @Override |
| synchronized public String getRootDir(String secUrl, Integer nfsVersion) { |
| try { |
| URI uri = new URI(secUrl); |
| String dir = mountUri(uri, nfsVersion); |
| return _parent + "/" + dir; |
| } catch (Exception e) { |
| String msg = "GetRootDir for " + secUrl + " failed due to " + e.toString(); |
| s_logger.error(msg, e); |
| throw new CloudRuntimeException(msg); |
| } |
| } |
| |
| @Override |
| protected void mount(String localRootPath, String remoteDevice, URI uri, Integer nfsVersion) { |
| ensureLocalRootPathExists(localRootPath, uri); |
| |
| if (mountExists(localRootPath, uri)) { |
| return; |
| } |
| |
| attemptMount(localRootPath, remoteDevice, uri, nfsVersion); |
| |
| // Change permissions for the mountpoint - seems to bypass authentication |
| Script script = new Script(true, "chmod", _timeout, s_logger); |
| script.add("777", localRootPath); |
| String result = script.execute(); |
| if (result != null) { |
| String errMsg = "Unable to set permissions for " + localRootPath + " due to " + result; |
| s_logger.error(errMsg); |
| throw new CloudRuntimeException(errMsg); |
| } |
| s_logger.debug("Successfully set 777 permission for " + localRootPath); |
| |
| // XXX: Adding the check for creation of snapshots dir here. Might have |
| // to move it somewhere more logical later. |
| checkForSnapshotsDir(localRootPath); |
| checkForVolumesDir(localRootPath); |
| } |
| |
| } |