Package com.vmware.aurora.vc

Source Code of com.vmware.aurora.vc.VcDatastoreImpl

/***************************************************************************
* Copyright (c) 2012-2013 VMware, Inc. All Rights Reserved.
* Licensed 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 com.vmware.aurora.vc;

import java.util.ArrayList;
import java.util.List;

import com.vmware.aurora.global.Configuration;
import com.vmware.aurora.util.AuAssert;
import com.vmware.vim.binding.vim.Datacenter;
import com.vmware.vim.binding.vim.Datastore;
import com.vmware.vim.binding.vim.Datastore.HostMount;
import com.vmware.vim.binding.vim.Datastore.Summary.MaintenanceModeState;
import com.vmware.vim.binding.vim.StoragePod;
import com.vmware.vim.binding.vim.host.VmfsDatastoreInfo;
import com.vmware.vim.binding.vim.host.VmfsVolume;
import com.vmware.vim.binding.vmodl.ManagedObject;
import com.vmware.vim.binding.vmodl.ManagedObjectReference;

public interface VcDatastore extends VcObject {

   abstract String getName();

   /**
    * @return name already in URL format as returned from VLSI
    */
   abstract String getURLName();

   /**
    * @return the datacenter of this datastore
    */
   abstract VcDatacenter getDatacenter();

   abstract ManagedObjectReference getDatacenterMoRef();

   abstract String getStorageType();

   abstract long getCapacity();

   abstract long getFreeSpace();

   abstract String getUrl();

   abstract boolean isAccessible();

   abstract boolean isInNormalMode();

   abstract boolean isVmfs();

   abstract String getVmfsVolumeVersion();

   abstract boolean isSupported();

   abstract boolean isSameDatastore(String datastoreId);

   abstract boolean isInStoragePod();

   abstract public boolean isSupportedVmfsVersion();

   abstract public boolean isLocal();

   abstract List<VcHost> getHosts();
}

@SuppressWarnings("serial")
class VcDatastoreImpl extends VcObjectImpl implements VcDatastore {
   private Datastore.Summary summary;
   private Datastore.Info info;
   private ManagedObjectReference datacenter;
   private boolean inStoragePod;
   private Datastore.HostMount[] hosts;

   @Override
   protected void update(ManagedObject mo) {
      Datastore ds = (Datastore) mo;
      summary = ds.getSummary();
      info = ds.getInfo();
      datacenter = MoUtil.getAncestorMoRef(ds.getParent(), Datacenter.class);
      inStoragePod = MoUtil.isOfType(ds.getParent(), StoragePod.class);
      hosts = ds.getHost();
   }

   protected VcDatastoreImpl(Datastore ds) throws Exception {
      super(ds);
      update(ds);
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getName()
    */
   @Override
   public String getName() {
      return MoUtil.fromURLString(summary.getName());
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getURLName()
    */
   @Override
   public String getURLName() {
      return summary.getName();
   }

   @Override
   public String toString() {
      return String.format("DS[%s]", getName());
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getDatacenter()
    */
   @Override
   public VcDatacenter getDatacenter() {
      return VcCache.get(datacenter);
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getDatacenterMoRef()
    */
   @Override
   public ManagedObjectReference getDatacenterMoRef() {
      return datacenter;
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getStorageType()
    */
   @Override
   public String getStorageType() {
      return summary.getType();
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getCapacity()
    */
   @Override
   public long getCapacity() {
      return summary.getCapacity();
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getFreeSpace()
    */
   @Override
   public long getFreeSpace() {
      return summary.getFreeSpace();
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getUrl()
    */
   @Override
   public String getUrl() {
      return summary.getUrl();
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#isAccessible()
    */
   @Override
   public boolean isAccessible() {
      return summary.isAccessible();
   }

   @Override
   public boolean isInNormalMode() {
      String strMode = summary.getMaintenanceMode();
      if (strMode != null) {
         MaintenanceModeState mode = MaintenanceModeState.valueOf(strMode);
         if (mode == MaintenanceModeState.normal) {
            return true;
         }
      }
      return false;
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#isVmfs()
    */
   @Override
   public boolean isVmfs() {
      return "VMFS".equals(getStorageType());
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#getVmfsVolumeVersion()
    */
   @Override
   public String getVmfsVolumeVersion() {
      AuAssert.check(isVmfs());
      VmfsDatastoreInfo vmfsInfo = (VmfsDatastoreInfo) info;
      VmfsVolume vmfsVolume = vmfsInfo.getVmfs();
      return vmfsVolume.getVersion();
   }

   private int getVmfsVolumeMajorVersion() {
      AuAssert.check(isVmfs());
      VmfsDatastoreInfo vmfsInfo = (VmfsDatastoreInfo) info;
      return vmfsInfo.getVmfs().getMajorVersion();
   }

   public boolean isSupportedVmfsVersion() {
      AuAssert.check(isVmfs());
      int majorVersion = getVmfsVolumeMajorVersion();
      return majorVersion > 3
            || (majorVersion == 3 && Configuration.getBoolean(
                  "vc.support_vmfs3", false));
   }

   /* (non-Javadoc)
    * @see com.vmware.aurora.vc.VcDatastore#isSupported()
    */
   @Override
   public boolean isSupported() {
      return VcUtil.getIncompatReasonsForDatastore(this).isEmpty();
   }

   @Override
   public boolean isSameDatastore(String datastoreId) {
      return getId().equals(datastoreId);
   }

   @Override
   public boolean isInStoragePod() {
      return inStoragePod;
   }

   @Override
   public boolean isLocal() {
      return (hosts.length == 1);
   }

   @Override
   public List<VcHost> getHosts() {
      List<VcHost> hosts = new ArrayList<VcHost>();
      for (HostMount host : this.hosts) {
         VcHost h = VcCache.get(host.getKey());
         hosts.add(h);
      }
      return hosts;
   }
}
TOP

Related Classes of com.vmware.aurora.vc.VcDatastoreImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.