Skip to end of metadata
Go to start of metadata


High Level Functional Overview and Design Specifications

Problem Statement

As per the existing support for IBM XIV storage, the SMI-S interface is being used to communicate with the storage. Cluster provisioning is not supported through IBM XIV's SMI-S interface and hence REST API used only for cluster provisioning. So, there exists a dual approach to manage XIV, one by being managed by SMIS interface and the other by REST interface using Hyper-Scale Manager. The Existing implementation is built to figure out which path to choose, whether SMI-S or REST for Cluster provisioning requests. This intelligence has been built by figuring out whether the host has been already present on the array.

 This feature is aimed to provide the south bound SDK based driver support using the unified REST API interface for all storage functionalities and use cases (including cluster provisioning) 

.

Design Approach / High Level Implementation Details


                               Fig 1: High Level Architecture

  • SDK supports static linking of the driver, so IBM XIV driver will be part of the complete CoprHD build.
  • The driver can also be uploaded dynamically using the feature of loading the driver from UI.
  • REST interface is being introduced using IBM Hyper-Scale Manager.
  • XIV will not use any interface outside of what is exposed by the SDK, any direct access to Cassandra and Zookeeper will not be made through the driver.
  • Existing implementation (SMIS) will be moved to the new implementation (REST).

Hyper-Scale Manager
The Hyper-Scale Manager server is used to communicate with the XIV Storage System using REST APIs and CoprHD should be aware of hyper scale manager base URL, username and password. The Hyper-Scale Manager  server is used to communicate with the XIV Storage System Software, which in turn interacts with the XIV Storage System hardware.During discovery the existence of the Hyper-Scale manager will be validated by sending GET REST query, successful response confirms  the availability of the system. Discovery is failed if any of these fields are given incorrectly.

                                        Fig 2: Hyper scale manager details

IBM Hyper-Scale Manager is used with XIV Storage System for moving volumes between storage containers transparently, with no disruption to host applications.

IBM Hyper-Scale Manager is integrated with, the XIV graphical user interface (GUI) and spans multiple XIV systems.

Exclusions and Limitations

  • REST API for restoring snapshot operation is not available and hence not included.

Future Work and Related Projects

Possible future work includes,

  • Remote replication

Implementation Strategy

Implementation Procedures

The driver involves writing a set of following functions as defined by the new Southbound SDK for CoprHD. In this section, we list the design for each one of them.

Establish Connectivity to IBM XIV Storage System

Objective

Establish Connectivity to IBM XIV Storage System

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • IBM XIV Provider URL
  • IBM XIV Username
  • IBM XIV Password

Process Flow

  • Establish secure Apache HTTP Client Connectivity to array

Output

Returns XIVRestClient

Class

com.emc.storageos.driver.ibmXIVdriver.impl.IBMXIVStorageDriver
com.emc.storageos.xiv.connection.IBMXIVApiFactory


Discover Storage System

Objective

Discover IBM XIV Storage System

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • StorageSystem
  • IBM XIV Array IP Address
  • IBM XIV Array Port Number
  • IBM XIV Array System Name

Process Flow

  • Create DriverTask type of "discover-storage-system"
  • Get Rest API Client
  • Get Storage Array information using Rest API
  • Get the following properties from the output
      • SerialNumber
      • MajorVersion
      • MinorVersion
      • Protocols
      • FirmwareVersion
      • Model
      • Device Label
      • Display Name
  • Set storageSystem properties including
      • Set Provisioning Type to THIN_AND_THICK
      • Set Access Status to READ WRITE
      • Set isSupportedVersion to True
  • Set Supported Replications
  • SetConnectionInfo in registry
  • Set Task Status to READY
  • Return Task

Output

DriverTask, StorageSystem

Additional Info

Rest API: GET /xiv/v3/systems

Class

com.emc.storageos.xiv.impl.IBMXIVStorageDriver
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.SystemCommandResult

Discover Storage Pools

Objective

Discover IBM XIV Storage Pools

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • StorageSystem

Process Flow

  • Create DriverTask
  • Get Rest API Client previously established from registry using NativeID
  • Get Storage Pool information using Rest API
  • Get the following properties from the output.
  • For each storage pool,
      • retrieve each storage pool info
          • PoolName
          • StorageSystemId
          • Protocols
          • TotalCapacity
          • SubscribedCapacity
          • FreeCapacity
          • OperationsStatus
          • NOT READY if PoolStatus is excluded
          • READY if PoolStatus is online
          • DisplayName
          • DeviceLabel
      • Set storagePool properties
          • SetStorageSystemID to StorageSystem.nativeId
          • Set supported drive types based on PoolTierType
              • If nearline – add SAS and NL_SAS
              • If enterprise – add FC
              • If ssd – add SSD
          • Set Supported protocols.
              • iSCSI
              • FC
          • Set Supported RAID Levels.
              • RAID0
              • RAID1
              • RAID5
              • RAID6
          • Set Pool Service Type.
              • Block
          • Set Pool supported resource type
              • THIN_AND_THICK
          • Set Access status
              • READ_WRITE
        • Set MinimumThickVolumeSize
        • Set MaximumThickVolumeSize
        • Set MinimumThinVolumeSize
        • Set MaximumThinVolumeSize
  • Set Task Status based on results
  • Return Task

Output

DriverTask, List<StoragePool> storagePools

Additional Info

REST API: GET /xiv/v3/pools

Class

com.emc.storageos.xiv.impl.IBMXIVStorageDriver
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.PoolCommandResult


Discover Storage Ports

Objective

Discover IBM XIV Storage Ports

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • StorageSystem

Process Flow

  • Create DriverTask
  • Get Rest API Client previously established from registry using NativeID
  • Get Storage Port information using Rest API
  • For each storage port,
        • Get the following properties from the output

              • StorageSystemId
              • PortNetworkId
              • EndPointId
              • TcpPortNumber
              • AvgBandwidth
        • Set storagePort properties
              • PortName
              • PortGroup
              • PortSubGroup
              • NativeId
              • DeviceLabel
              • DisplayName
              • OperationsStatus to OK
              • TransportType:
                  • If PortNetworkId contains “iqn” set to IP
                  • Else set to FC
  • set Task status based on results
  • Return Task

Output

DriverTask, List<StoragePort> storagePorts

Additional Info

REST API: GET /xiv/v3/:xiv1/host_ports?host=x

Class

com.emc.storageos.xiv.impl.IBMXIVStorageDriver
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.PortCommandResult


Discover Host Components

Objective

Discover IBM XIV Host Components

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • StorageSystem

Process Flow

  • Create DriverTask
  • Get Rest API Client previously established from registry using NativeID
  • Get Storage Host information using Rest API
  • For each storage host,
      • Get the following HostComponent properties from the output
          • NativeID to HostID
          • Type to "Host"
          • DisplayName to HostName
          • DeviceLabel to HostName
          • HostName to HostName
          • IsSupported to True
          • IsInitiators - hostInitiatorSet
  • Set Task Status based on results
  • Return Task

Output

DriverTask, List<StorageHostComponent> storageHosts

Additional Info

REST API: GET /xiv/v3/hosts

Class

com.emc.storageos.xiv.impl.IBMXIVStorageDriver
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.HostCommandResult

 

Discover Get Storage Volumes

Objective

Get IBM XIV Storage Volumes

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • StorageSystem

Process Flow

  • Create DriverTask
  • Get Rest API Client previously established from registry using NativeID
  • Get Storage Volume information using Rest API
  • For each storage Volume,
      • Get the following properties from the output.
          • NativeID
          • StoragePoolId
          • DisplayName
          • DeviceLabel
          • AllocatedCapacity
          • AccessStatus
          • ProvisionedCapacity
          • Requested Capacity
          • WWN
          • ThinProvisioned
  • Set Task Status based on results
  • Return Task

Output

DriverTask, List<StorageVolume> storageVolumes

Additional Info

REST API:  GET /xiv/v3/:{0}/volumes

Class

com.emc.storageos.xiv.impl.IBMXIVIngestionHelper
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.VolumesCommandResult

Discover Get Storage Snapshot

Objective

Get IBM XIV Storage snapshot

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • StorageVolume
  • Registry

Process Flow

  • Get Rest API Client previously established from registry using NativeID
  • Get Storage Clone information using Rest API
  • For each storage snapshot, Get the following properties from the output.
        • NativeID
        • StorageSystemId
        • CopyType
        • DeviceLabel
        • Access Status
        • Consistency group
        • WWN
        • SizeMiB
  • Set list based on results

Output

List< VolumeSnapshot > snapshots

Additional Info

REST API:  GET /xiv/v3/:xiv1/snapshots?volume=vol1

Class

com.emc.storageos.xiv.impl.IBMXIVIngestionHelper
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.VolumeDetailsCommandResult

Discover Get Storage Clone

Objective

Get IBM XIV Storage clone

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • StorageVolume
  • Registry

Process Flow

  • Get Rest API Client previously established from registry using NativeID
  • Get Storage Snapshot information using Rest API
  • For each storage clone, Get the following properties from the output.
      • NativeID
      • StorageSystemId
      • CopyType
      • DeviceLabel
      • Access status
      • Consistency group
      • WWN
      • SizeMiB
  • Set list based on results

Output

List<VolumeClone> clones

Additional Info

REST API:  GET /xiv/v3/:{0}/volumes

Class

com.emc.storageos.xiv.impl.IBMXIVIngestionHelper
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.VolumeDetailsCommandResult

Discover Get Volume Export Info for Hosts

Objective

Get IBM XIV Volume Export Info for Hosts

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • StorageVolume
  • Registry

Process Flow

  • Get Rest API Client previously established from registry using NativeID
  • Get map associated with volume using Rest API
  • Check which of the storage ports discovered
  • Process the map information by iterating through the maps and for each map,
      • create the appropriate key : value pair in the resultMap with hostname : HostExportInfo information
  • Return resultMap

Output

Map<String, HostExportInfo> resultMap

Additional Info

REST API:  GET /xiv/v3/:{0}/vol_maps

Class

com.emc.storageos.xiv.impl.IBMXIVIngestionHelper
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.ExportInfoList

Discover Get Snapshot Export Info for Hosts

Objective

Get IBM XIV Snapshot Export Info for Hosts

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • VolumeSnapshot
  • Registry

Process Flow

  • Get Rest API Client previously established from registry using NativeID
  • Get map associated with volume using Rest API
  • Check which of the storage ports discovered
  • Process the map information by iterating through the maps and for each map,
      • create the appropriate key : value pair in the resultMap with hostname : HostExportInfo information
  • Return resultMap

Output

Map<String, HostExportInfo> resultMap

Additional Info

REST API:  GET /xiv/v3/:{0}/vol_maps

Class

com.emc.storageos.xiv.impl.IBMXIVIngestionHelper
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.ExportInfoList

Discover Get Clone Export Info for Hosts

Objective

Get IBM XIV Clone Export Info for Hosts

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • VolumeClone
  • Registry

Process Flow

  • Get Rest API Client previously established from registry using NativeID
  • Get map associated with volume using Rest API
  • Check which of the storage ports discovered
  • Process the map information by iterating through the maps and for each map,
      • create the appropriate key : value pair in the resultMap with hostname : HostExportInfo information
  • Return resultMap

Output

Map<String, HostExportInfo> resultMap

Additional Info

REST API:  GET /xiv/v3/:{0}/vol_maps

Class

com.emc.storageos.xiv.impl.IBMXIVIngestionHelper
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.ExportInfoList

Create Storage Volumes

Objective

IBM XIV Create Storage Volumes

Prerequisites

IBM XIV Array must be up and running and accessible

Input

  • StorageCapabilities
  • List of volumes
  • DriverRegistry
  • DriverTask

Process Flow

  • Create Driver Task
  • For each volume:
      • Get DeviceFromNativeId from StorageSystemID
      • Get Rest API Client previously established from registry using following volume details
          • VolumeName – Get DisplayName
          • PoolName – Get StoragePool Id
          • VolumeSize – Get Requested Capacity
          • Thin Provisioned – Get Thin provisioned
      • Set the following Attributes of the volume in array
          • Provisioned Capacity
          • Alloted Capacity
          • WWN
          • Native Id
          • Device Label
          • Access Status
      • Update Consistency Group
  • Set the Status based on the Result
  • Return Task

Output

DriverTask, List<StorageVolume> volumes

Additional Info

REST API for adding single Volume: POST /xiv/v3/volumes
REST BODY
{ "request": [ { "action": "create", "params": { "name": "vol1", "pool": "pool1", "size": "17", "size_units":"GB" } } ] }
REST API for adding Volumes to CG : POST /xiv/v3/cgs
REST BODY
{"request": [{"action": "add_volume","params": {"name": "cg1""volume":"vol1"}}]}

Class

com.emc.storageos.xiv.impl.IBMXIVProvisioningHelper


Expand Storage Volume

Objective

IBM XIV Expand Storage Volume

Prerequisites

IBM XIV Array must be up and running and accessible

Input

  • Volume to expand
  • New Capacity
  • DriverRegistry
  • DriverTask

Process Flow

  • Create Driver Task
  • Get DeviceFromNativeId from StorageSystemID
  • Check if new capacity is greater than provisioned capacity
  • Get Rest API Client previously established from registry using VolumeName and AdditionalSize
  • Set Attributes of the volume in array
      • ProvisionedCapacity
      • AllocatedCapacity
      • RequestedCapacity
  • Set Task Status based on results
  • Return Task

Output

DriverTask

Additional Info

REST API: POST /xiv/v3/:xiv1/volumes/:vol1
REST BODY:
{ "request": [ { "action": "resize", "params": { "size": "170","size_units": "GB" } } ] }

Class

com.emc.storageos.xiv.impl.IBMXIVProvisioningHelper


Delete Storage Volumes

Objective

Delete IBM XIV Storage Volume

Prerequisites

IBM XIV Array must be up and running and accessible

Input

  • Volume to delete
  • DriverRegistry
  • DriverTask

Process Flow

  • Create Driver Task
  • Get DeviceFromNativeId from StorageSystemID
  • Check for the Volume in consistency group
  • Get Rest API Client previously established from registry using NativeID
  • Set Task Status based on results
  • Return Task

Output

DriverTask

Additional Info

REST API to delete Single Volume: DELETE /xiv/v3/:xiv1/volumes
REST API to delete Volume from CG: POST /xiv/v3/cgs

REST BODY: {"request": [{"action": "remove_volume","params": {"volume":"vol1"}}]}

Class

com.emc.storageos.xiv.impl.IBMXIVProvisioningHelper


Export Volumes to Initiators

Objective

Export volumes to initiators through a given set of ports.

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • Initiators
  • Volumes
  • VolumeToHLUMap
  • RecommendedPorts
  • AvailablePorts
  • StorageCapabilities
  • UsedRecommendedPorts
  • SelectedPorts

Process Flow

    • Create DriverTask
    • If initiator type is host, get hostname and if hostname is available, updateHost otherwise createHost using Rest API
    • If initiator type is cluster, check host exist in it and if host does not exist, creatHost using Rest API
    • If cluster does not exist,  createCluster using Rest API and if host is not part of the cluster, add it
    • For each storage volume,
        • Get Rest API Client previously established from registry using NativeID
        • If it is exclusive hostExport,
          • Verify volume and port belong to same storage
          • For each recommended and available ports,
              • Export volume to initiators using Rest API
              • Update volumeToHLUMap
              • Set Task Status based on results
        • If it is shared clusterExport,
            • Acquire lock
            • Get driver attributes for the key ‘EXPORT_PATH’ from the registry to check whether volume is already exported or not.
            • If volume is not exported already, export volume to initiators using Rest API.
            • Update map with volume and HLU obtained
            • Set Task Status based on results
  • Return Task

Output

DriverTask, Map<String, String> volumeToHLUMap

Additional Info

REST API to get host details : POST /xiv/v3/hosts
REST BODY: '{'\"request\":['{'\"action\":\"create\",\"params\":'{'\"name\":\"{0}\"'}}']'}'
REST API to get cluster details: POST /xiv/v3/clusters
REST BODY: '{'\"request\":['{'\"action\":\"create\",\"params\":'{'\"name\":\"{0}\"'}}']'}'
REST API to get export volume : POST /xiv/v3/:xiv1/vol_maps
REST BODY: '{'\"request\":['{'\"action\":\"create\",\"params\":
'{'\"volume\":\"{1}\",\"host_cluster_name\":\"{0}\",\
"map_type\":\"host\",\"lun\":\"{2}\"}}]}

Class

com.emc.storageos.xiv.impl.IBMXIVExportUnexportHelper
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.ExportInfoResult

 
Flow chart representation of Export Operation

The below represented flow chart diagram illustrates the steps of exporting volume to initiators. 

 

 
                                           Fig 3: Flow chart representation of export operations

Usecase flow for export operation

Usecase

Expected Result

How it's done?

Create Cluster on Array & Export a volume

Create a Cluster with Volumes exported to it. Create Hosts as part of Cluster.

Create Cluster
Create Host & add it part of Cluster
Create Initiators on Hosts
Export Volume to a Cluster

Add a new Host to the existing Cluster

Add the new Host to Cluster. Volumes exported to Cluster automatically gets exported to the added Host.

Create Host & add it part of Cluster

Remove a Host from the existing Cluster

Host deleted from the Cluster. Cluster volumes are no longer accessible from that host.

Delete Host from the Cluster

Add a private LUN to a Host part of a Cluster

LUN is privately exported to the Host part of the Cluster

Export Volume to the Host

Unexport a private LUN from a Host part of Cluster

LUN is removed access from that Host part of the Cluster

Unexport Volume from a Host.

Remove a Host having private LUN from the existing Cluster

Host is removed access to Cluster and moved to default Pool. Cluster volumes are no longer accessible from that host but host has access to the private LUN.

Verify if there are any volumes exported to that Host-Yes
Skip Initiator and Host removal
Move Host out of Cluster

Add a new volume to the existing Cluster

Volume is exported to the Cluster. In turn all Hosts under it would get access to it.

Export Volume to the Cluster

Remove a volume from the existing Cluster

All Hosts would lose access for the volume once removed

Unexport Volume from the Cluster

Add Initiator

Add a Initiator port to the existing Host

Add Initiator port to the existing Host

Remove Initiator

Remove a Initiator port from the existing Host

Remove an Initiator from the existing Host.

Move Host from one Cluster to another

All volumes exported to the Hosts are removed. Host is added as part of new Cluster and the Volumes mapped to the new Cluster automatically is available to the Host.

Unexport all old cluster volumes
Remove Host from the Old Cluster
Create Host & add it part of New Cluster
Create Initiators on Host

Host has a private LUN and is added to a Cluster

Operation fails with an error message saying Hosts with private LUN cannot be added to a Cluster.



Unexport Volume from Initiators

Objective

Unexport volume from initiators

Prerequisites

IBM XIV Array must be up and running and accessible via Apache HTTP Client connection

Input

  • List of Initiators
  • List of Volumes

Process Flow

    • Create DriverTask
    • For each volume in list of volumes
      • Get StorageSystemID from Volume
      • Get Rest API Client previously established using NativeID
      • Get exportInfoByVolumeName
      • For each initiator in list of initiators
          • If initiator type is host,
            • If export info is found, then delete export info using Rest API
            • If export info is not found and for all export templates, remove export template
          • If initiator type is cluster,
            • Acquire Lock
            • Get driver attributes for the key ‘EXPORT_PATH’ from the registry to check whether export info is present
          • If export info is present, then delete export info using Rest API
          • Release Lock
    • Set Task Status based on results
  • Return Task

Output

DriverTask

Additional Info

REST API:  DELETE /xiv/v3/:xiv1/vol_maps
REST BODY: {\"request\":[{\"action\":\"delete\"}]}

Class

com.emc.storageos.xiv.impl.IBMXIVExportUnexportHelper
com.emc.storageos.xiv.impl.IBMXIVApi
com.emc.storageos.xiv.connection.IBMXIVApiFactory
com.emc.storageos.xiv.command.ExportInfoResult

 

Create Block Volume Snapshot

Objective

Create block volume snapshot

Prerequisites

IBM XIV Array must be up and running and accessible via SSH connection

Input

  • List of  volume to take snapshot of
  • Storage capabilities
  • Driver task
  • Driver Registry

Process Flow

  • Get StorageSystemID from snapshot
  • Get DeviceFromNativeId from StorageSystemID
  • Get input information for each snapshot
      • Parent id – id of the parent volume
      • Display name- snapshot name
  • Get Rest API Client previously established from registry using NativeID
  • Set Attributes of the snapshots in array
      • Snapshot name
      • Delete priority
  • Updating Consistency Group
  • Set the Status based on Results
  • Return Task

Output

DriverTask, List< VolumeSnapshot > volumeSnapshots

Additional Info

REST API: POST /xiv/v3/snapshots
REST BODY:
{"request": [{"action": "create","params": {"source": "vol1","target": "snapshot1","delete_priority": "2"}}]}  

Class

com.emc.storageos.xiv.impl.IBMXIVSnapshotHelper


Restore Block Volume Snapshot

Objective

Restore block volume snapshot

Prerequisites

IBM XIV Array must be up and running and accessible via APACHE HTTP CLIENT connection

Input

  • List of  volume snapshots to restore

Process Flow

  • Create DriverTask
  • For each VolumeSnapshot in list of VolumeSnapshot
      • Get DeviceFromNativeId from StorageSystemID
      • Get Rest API client previously established from registry using NativeID
      • Set the Status based on Results
  • Return Task

Output

DriverTask, List< VolumeSnapshot > volumeSnapshots

Additional Info

 

Class

com.emc.storageos.xiv.impl.IBMXIVSnapshotHelper


Delete Block Volume Snapshot

Objective

Delete block volume snapshot

Prerequisites

IBM XIV Array must be up and running and accessible Block.
Volume snapshot must exist and be available in ViPR

Input

  • Block Volume snapshot to delete
  • Driver Task
  • Driver Registry

Process Flow

  • Create DriverTask
  • Get StorageSystemID from snapshot
  • Get Rest API client previously established from registry using NativeID  
  • Set Task Status based on results
  • Return Task

Output

DriverTask, List< VolumeSnapshot > volumeSnapshots

Additional Info

REST API: DELETE /xiv/v3/snapshots/

Class

com.emc.storageos.xiv.impl.IBMXIVSnapshotHelper


Create Consistency group

Objective

Create consistency group

Prerequisites

IBM XIV Array must be up and running and accessible

Input

  • Volume consistency group to be created

Process flow

  • Get StorageSystemID
  • Get DeviceFromNativeId from StorageSystemID
  • Create consistency group using REST API
  • Set Properties like nativeId, Device label
  • Set task status based on results

Output

DriverTask

Additional Info

REST API: POST xiv/v3/cgs
REST BODY:
{'\"request\":['{'\"action\":\"create\",\"params\":'{'\"name\":\"{0}\",\"pool\":\"pool1\"'}}']'}'

Class

com.emc.storageos.xiv.impl.IBMXIVConsistencyGroupHelper


Delete Consistency group

Objective

Delete consistency group

Prerequisites

IBM XIV Array must be up and running and accessible

Input

  • Volume consistency group to deleted

Process flow

  • Get StorageSystemID
  • Get DeviceFromNativeId from StorageSystemID
  • Delete the existing consistency group using REST API
  • Set task status based on results

Output

DriverTask

Additional Info

REST API: DELETE xiv/v3/cgs

Class

com.emc.storageos.xiv.impl.IBMXIVConsistencyGroupHelper


Create Block Volume Clone

Objective

Create block volume clone

Prerequisites

IBM XIV Array must be up and running and accessible

Input

  • List of clones to create
  • DriverRegistry
  • DriverTask

Process Flow

  • Create Driver Task
  • For each VolumeClone:
      • Get DeviceFromNativeId from StorageSystemID
      • GET Rest API Client previously established using
          • Parent id- id of the parent volume
          • Display Name – clone name
          • Storage pool id
      • Set Attributes of the volumeClone in array
          • Provisioned Capacity
          • Alloted Capacity
          • WWN
          • Native Id
          • Device Label
          • Access Status
  • Set the Status based on the Result
  • Return Task

Output

DriverTask, List< VolumeClones > volumeClones

Additional Info

REST API: POST /xiv/v3/volumes/:vol
REST BODY:
{"request": {"action": "copy","params":{"target":vol2}}}"

Class

com.emc.storageos.xiv.impl.IBMXIVCloneHelper


Delete Block Volume Clone

Objective

Delete block volume clone

Prerequisites

IBM XIV Array must be up and running and accessible via APACHE HTTP Client connection
Block Volume clone must exist and be available in ViPR

Input

  • List of Block Volume clones to delete

Process Flow

  • Create Driver Task
  • Get DeviceFromNativeId from StorageSystemID
  • Get Rest API Client previously established from registry using NativeID
  • Set Task Status based on results
  • Return Task

Output

DriverTask, List< VolumeSnapshot > volumeSnapshots

Additional Info

REST API to delete Single Volume: DELETE /xiv/v3/:xiv1/volumes

Class

com.emc.storageos.xiv.impl.IBMXIVCloneHelper


Testing Strategy

    • Testing similar to any other block array platform, the functionality will be tested against all the block services expected do be supported by the array.
    • Following scenarios will be covered as part of Testing:
      1. Discovery and Virtual Resource Creation
        1. Discovery of IBM XIV Array.
        2. Creation of Virtual Array and Block Virtual Pool for XIV using both FC and iSCSI Protocols. 
      2. Provisioning 
        1. Provisioning will include testing of Create, Expand and  Delete Volume(on Virtual Pools using FC Protocol and iSCSI Protocol). 
        2. Export, Unexport volumes to Host/Clusters. 
        3. Create and Delete volumes form CGs. 
      3. Protection Services
        1. Create, Delete and Export Snapshot for volumes/CGs.
        2. Create, Delete Export, Unexport
      4. Ingestion
        1. Discover and Ingest Unmanaged Volumes, Snaps (both exported and unexported).
        2. Ingestion of CGs.
      5. Negative Scenarios
        1.  This includes testing of corner cases and unexpected scenarios to verify the robustness and error handling capabilities of the driver
      6. Customer Specific Usecases.
        1. Testing will cover customer specific use cases and scenarios which will include workflows extensively and specifically used by customers.
      7. Upgrade Testing
        1. Since this is first time support for XIV upgrade testing will be minimal and will cover discovering and basic operations. 
    • Testing will be done both through UI and CLI.

Impact Evaluation

Public APIs and public functionality (end-user impact)

NA

Persistence model

NA

Upgrades

NA

Performance

  • For synchronous operations, it will invoke the REST API of the array and wait for its reply (with a timeout). The wait (inside the REST client) is expected to be efficient (i.e. not waste CPU resources).
  • For long-running operations, it will return a driver task, and the upper layers are expected to poll for its completion. Each driver task will map to a corresponding task on the array. 

Scalability and resource consumption

NA

Security

No additional implications to CoprHD security as a result of this feature. This is just a driver for the array.

Deployment and serviceability

There are no changes in deployment or serviceability

Reviewed and Approved By

Name

Date

Vote

Comments, remarks, etc.

Anil Degwekar (file:///D:\wiki\display\~degwea) (TSC)




Bill Elliott (file:///D:\wiki\display\~belliott) (TSC)




Shayne Huddleston (file:///D:\wiki\display\~huddlesh) (TSC)




Hui Liu (file:///D:\wiki\display\~liuh6) (TSC)




Ben Perkins (file:///D:\wiki\display\~perkib) (TSC)




Stalin Thangapalam (file:///D:\wiki\display\~Thangs1) (TSC)




Tom Watson (file:///D:\wiki\display\~watsot3) (TSC)





  • The members of the CoprHD Technical Steering Committee (file:///D:\wiki\display\COP\Technical+Steering+Committee) (TSC) have been automatically added to your reviewer list 
  • A majority of them must approve this document before the feature can be merged to a project integration branch (e.g. integration-, release-, master)
  • Please un-check the boxes next to their names when your document is ready for their review
  • Please refer to Design Approval Guidance (file:///D:\wiki\display\COP\Design+Approval+Guidance) for information on additional reviewers who should be added and the approval process


  • No labels