| // 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; |
| |
| import java.io.File; |
| import java.util.concurrent.Executors; |
| import java.util.concurrent.ScheduledExecutorService; |
| import java.util.concurrent.TimeUnit; |
| |
| import javax.inject.Inject; |
| |
| import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; |
| import org.apache.cloudstack.framework.async.AsyncCompletionCallback; |
| import org.apache.cloudstack.framework.config.dao.ConfigurationDao; |
| import org.apache.cloudstack.managed.context.ManagedContextRunnable; |
| import org.apache.cloudstack.storage.command.CopyCommand; |
| import org.apache.cloudstack.storage.command.DownloadCommand; |
| import org.apache.cloudstack.storage.resource.LocalNfsSecondaryStorageResource; |
| |
| import com.cloud.agent.api.Answer; |
| import com.cloud.agent.api.Command; |
| import com.cloud.configuration.Config; |
| import com.cloud.resource.ServerResource; |
| import com.cloud.utils.component.ComponentContext; |
| import com.cloud.utils.net.NetUtils; |
| |
| public class LocalHostEndpoint implements EndPoint { |
| private ScheduledExecutorService executor; |
| protected ServerResource resource; |
| @Inject |
| ConfigurationDao configDao; |
| |
| public LocalHostEndpoint() { |
| |
| } |
| |
| private void configure() { |
| // get mount parent folder configured in global setting, if set, this will overwrite _parent in NfsSecondaryStorageResource to work |
| // around permission issue for default /mnt folder |
| String mountParent = configDao.getValue(Config.MountParent.key()); |
| |
| String path = mountParent + File.separator + "secStorage"; |
| |
| LocalNfsSecondaryStorageResource localResource = new LocalNfsSecondaryStorageResource(); |
| localResource.setParentPath(path); |
| resource = localResource; |
| executor = Executors.newScheduledThreadPool(10); |
| } |
| |
| public static EndPoint getEndpoint() { |
| LocalHostEndpoint endpoint = ComponentContext.inject(LocalHostEndpoint.class); |
| endpoint.configure(); |
| return endpoint; |
| } |
| |
| @Override |
| public long getId() { |
| // TODO Auto-generated method stub |
| return 0; |
| } |
| |
| @Override |
| public String getHostAddr() { |
| return "127.0.0.0"; |
| } |
| |
| @Override |
| public String getPublicAddr() { |
| String hostIp = NetUtils.getDefaultHostIp(); |
| if (hostIp != null) |
| return hostIp; |
| else |
| return "127.0.0.0"; |
| } |
| |
| @Override |
| public Answer sendMessage(Command cmd) { |
| if ((cmd instanceof CopyCommand) || (cmd instanceof DownloadCommand)) { |
| return resource.executeRequest(cmd); |
| } |
| // TODO Auto-generated method stub |
| return new Answer(cmd, false, "unsupported command:" + cmd.toString()); |
| } |
| |
| private class CmdRunner extends ManagedContextRunnable { |
| final Command cmd; |
| final AsyncCompletionCallback<Answer> callback; |
| |
| public CmdRunner(Command cmd, AsyncCompletionCallback<Answer> callback) { |
| this.cmd = cmd; |
| this.callback = callback; |
| } |
| |
| @Override |
| protected void runInContext() { |
| Answer answer = sendMessage(cmd); |
| callback.complete(answer); |
| } |
| } |
| |
| @Override |
| public void sendMessageAsync(Command cmd, AsyncCompletionCallback<Answer> callback) { |
| executor.schedule(new CmdRunner(cmd, callback), 10, TimeUnit.SECONDS); |
| } |
| |
| public ServerResource getResource() { |
| return resource; |
| } |
| |
| public void setResource(ServerResource resource) { |
| this.resource = resource; |
| } |
| |
| } |