162306a36Sopenharmony_ci========== 262306a36Sopenharmony_ciMD Cluster 362306a36Sopenharmony_ci========== 462306a36Sopenharmony_ci 562306a36Sopenharmony_ciThe cluster MD is a shared-device RAID for a cluster, it supports 662306a36Sopenharmony_citwo levels: raid1 and raid10 (limited support). 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci1. On-disk format 1062306a36Sopenharmony_ci================= 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciSeparate write-intent-bitmaps are used for each cluster node. 1362306a36Sopenharmony_ciThe bitmaps record all writes that may have been started on that node, 1462306a36Sopenharmony_ciand may not yet have finished. The on-disk layout is:: 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci 0 4k 8k 12k 1762306a36Sopenharmony_ci ------------------------------------------------------------------- 1862306a36Sopenharmony_ci | idle | md super | bm super [0] + bits | 1962306a36Sopenharmony_ci | bm bits[0, contd] | bm super[1] + bits | bm bits[1, contd] | 2062306a36Sopenharmony_ci | bm super[2] + bits | bm bits [2, contd] | bm super[3] + bits | 2162306a36Sopenharmony_ci | bm bits [3, contd] | | | 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ciDuring "normal" functioning we assume the filesystem ensures that only 2462306a36Sopenharmony_cione node writes to any given block at a time, so a write request will 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci - set the appropriate bit (if not already set) 2762306a36Sopenharmony_ci - commit the write to all mirrors 2862306a36Sopenharmony_ci - schedule the bit to be cleared after a timeout. 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciReads are just handled normally. It is up to the filesystem to ensure 3162306a36Sopenharmony_cione node doesn't read from a location where another node (or the same 3262306a36Sopenharmony_cinode) is writing. 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci2. DLM Locks for management 3662306a36Sopenharmony_ci=========================== 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciThere are three groups of locks for managing the device: 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci2.1 Bitmap lock resource (bm_lockres) 4162306a36Sopenharmony_ci------------------------------------- 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci The bm_lockres protects individual node bitmaps. They are named in 4462306a36Sopenharmony_ci the form bitmap000 for node 1, bitmap001 for node 2 and so on. When a 4562306a36Sopenharmony_ci node joins the cluster, it acquires the lock in PW mode and it stays 4662306a36Sopenharmony_ci so during the lifetime the node is part of the cluster. The lock 4762306a36Sopenharmony_ci resource number is based on the slot number returned by the DLM 4862306a36Sopenharmony_ci subsystem. Since DLM starts node count from one and bitmap slots 4962306a36Sopenharmony_ci start from zero, one is subtracted from the DLM slot number to arrive 5062306a36Sopenharmony_ci at the bitmap slot number. 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci The LVB of the bitmap lock for a particular node records the range 5362306a36Sopenharmony_ci of sectors that are being re-synced by that node. No other 5462306a36Sopenharmony_ci node may write to those sectors. This is used when a new nodes 5562306a36Sopenharmony_ci joins the cluster. 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci2.2 Message passing locks 5862306a36Sopenharmony_ci------------------------- 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci Each node has to communicate with other nodes when starting or ending 6162306a36Sopenharmony_ci resync, and for metadata superblock updates. This communication is 6262306a36Sopenharmony_ci managed through three locks: "token", "message", and "ack", together 6362306a36Sopenharmony_ci with the Lock Value Block (LVB) of one of the "message" lock. 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci2.3 new-device management 6662306a36Sopenharmony_ci------------------------- 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci A single lock: "no-new-dev" is used to coordinate the addition of 6962306a36Sopenharmony_ci new devices - this must be synchronized across the array. 7062306a36Sopenharmony_ci Normally all nodes hold a concurrent-read lock on this device. 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci3. Communication 7362306a36Sopenharmony_ci================ 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci Messages can be broadcast to all nodes, and the sender waits for all 7662306a36Sopenharmony_ci other nodes to acknowledge the message before proceeding. Only one 7762306a36Sopenharmony_ci message can be processed at a time. 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci3.1 Message Types 8062306a36Sopenharmony_ci----------------- 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci There are six types of messages which are passed: 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci3.1.1 METADATA_UPDATED 8562306a36Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^ 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci informs other nodes that the metadata has 8862306a36Sopenharmony_ci been updated, and the node must re-read the md superblock. This is 8962306a36Sopenharmony_ci performed synchronously. It is primarily used to signal device 9062306a36Sopenharmony_ci failure. 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci3.1.2 RESYNCING 9362306a36Sopenharmony_ci^^^^^^^^^^^^^^^ 9462306a36Sopenharmony_ci informs other nodes that a resync is initiated or 9562306a36Sopenharmony_ci ended so that each node may suspend or resume the region. Each 9662306a36Sopenharmony_ci RESYNCING message identifies a range of the devices that the 9762306a36Sopenharmony_ci sending node is about to resync. This overrides any previous 9862306a36Sopenharmony_ci notification from that node: only one ranged can be resynced at a 9962306a36Sopenharmony_ci time per-node. 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci3.1.3 NEWDISK 10262306a36Sopenharmony_ci^^^^^^^^^^^^^ 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci informs other nodes that a device is being added to 10562306a36Sopenharmony_ci the array. Message contains an identifier for that device. See 10662306a36Sopenharmony_ci below for further details. 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci3.1.4 REMOVE 10962306a36Sopenharmony_ci^^^^^^^^^^^^ 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci A failed or spare device is being removed from the 11262306a36Sopenharmony_ci array. The slot-number of the device is included in the message. 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci 3.1.5 RE_ADD: 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci A failed device is being re-activated - the assumption 11762306a36Sopenharmony_ci is that it has been determined to be working again. 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci 3.1.6 BITMAP_NEEDS_SYNC: 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci If a node is stopped locally but the bitmap 12262306a36Sopenharmony_ci isn't clean, then another node is informed to take the ownership of 12362306a36Sopenharmony_ci resync. 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci3.2 Communication mechanism 12662306a36Sopenharmony_ci--------------------------- 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci The DLM LVB is used to communicate within nodes of the cluster. There 12962306a36Sopenharmony_ci are three resources used for the purpose: 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci3.2.1 token 13262306a36Sopenharmony_ci^^^^^^^^^^^ 13362306a36Sopenharmony_ci The resource which protects the entire communication 13462306a36Sopenharmony_ci system. The node having the token resource is allowed to 13562306a36Sopenharmony_ci communicate. 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci3.2.2 message 13862306a36Sopenharmony_ci^^^^^^^^^^^^^ 13962306a36Sopenharmony_ci The lock resource which carries the data to communicate. 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci3.2.3 ack 14262306a36Sopenharmony_ci^^^^^^^^^ 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci The resource, acquiring which means the message has been 14562306a36Sopenharmony_ci acknowledged by all nodes in the cluster. The BAST of the resource 14662306a36Sopenharmony_ci is used to inform the receiving node that a node wants to 14762306a36Sopenharmony_ci communicate. 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ciThe algorithm is: 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci 1. receive status - all nodes have concurrent-reader lock on "ack":: 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci sender receiver receiver 15462306a36Sopenharmony_ci "ack":CR "ack":CR "ack":CR 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci 2. sender get EX on "token", 15762306a36Sopenharmony_ci sender get EX on "message":: 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci sender receiver receiver 16062306a36Sopenharmony_ci "token":EX "ack":CR "ack":CR 16162306a36Sopenharmony_ci "message":EX 16262306a36Sopenharmony_ci "ack":CR 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci Sender checks that it still needs to send a message. Messages 16562306a36Sopenharmony_ci received or other events that happened while waiting for the 16662306a36Sopenharmony_ci "token" may have made this message inappropriate or redundant. 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci 3. sender writes LVB 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci sender down-convert "message" from EX to CW 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci sender try to get EX of "ack" 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci :: 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci [ wait until all receivers have *processed* the "message" ] 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci [ triggered by bast of "ack" ] 17962306a36Sopenharmony_ci receiver get CR on "message" 18062306a36Sopenharmony_ci receiver read LVB 18162306a36Sopenharmony_ci receiver processes the message 18262306a36Sopenharmony_ci [ wait finish ] 18362306a36Sopenharmony_ci receiver releases "ack" 18462306a36Sopenharmony_ci receiver tries to get PR on "message" 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci sender receiver receiver 18762306a36Sopenharmony_ci "token":EX "message":CR "message":CR 18862306a36Sopenharmony_ci "message":CW 18962306a36Sopenharmony_ci "ack":EX 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci 4. triggered by grant of EX on "ack" (indicating all receivers 19262306a36Sopenharmony_ci have processed message) 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci sender down-converts "ack" from EX to CR 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci sender releases "message" 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci sender releases "token" 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci :: 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci receiver upconvert to PR on "message" 20362306a36Sopenharmony_ci receiver get CR of "ack" 20462306a36Sopenharmony_ci receiver release "message" 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci sender receiver receiver 20762306a36Sopenharmony_ci "ack":CR "ack":CR "ack":CR 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci4. Handling Failures 21162306a36Sopenharmony_ci==================== 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci4.1 Node Failure 21462306a36Sopenharmony_ci---------------- 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci When a node fails, the DLM informs the cluster with the slot 21762306a36Sopenharmony_ci number. The node starts a cluster recovery thread. The cluster 21862306a36Sopenharmony_ci recovery thread: 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci - acquires the bitmap<number> lock of the failed node 22162306a36Sopenharmony_ci - opens the bitmap 22262306a36Sopenharmony_ci - reads the bitmap of the failed node 22362306a36Sopenharmony_ci - copies the set bitmap to local node 22462306a36Sopenharmony_ci - cleans the bitmap of the failed node 22562306a36Sopenharmony_ci - releases bitmap<number> lock of the failed node 22662306a36Sopenharmony_ci - initiates resync of the bitmap on the current node 22762306a36Sopenharmony_ci md_check_recovery is invoked within recover_bitmaps, 22862306a36Sopenharmony_ci then md_check_recovery -> metadata_update_start/finish, 22962306a36Sopenharmony_ci it will lock the communication by lock_comm. 23062306a36Sopenharmony_ci Which means when one node is resyncing it blocks all 23162306a36Sopenharmony_ci other nodes from writing anywhere on the array. 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci The resync process is the regular md resync. However, in a clustered 23462306a36Sopenharmony_ci environment when a resync is performed, it needs to tell other nodes 23562306a36Sopenharmony_ci of the areas which are suspended. Before a resync starts, the node 23662306a36Sopenharmony_ci send out RESYNCING with the (lo,hi) range of the area which needs to 23762306a36Sopenharmony_ci be suspended. Each node maintains a suspend_list, which contains the 23862306a36Sopenharmony_ci list of ranges which are currently suspended. On receiving RESYNCING, 23962306a36Sopenharmony_ci the node adds the range to the suspend_list. Similarly, when the node 24062306a36Sopenharmony_ci performing resync finishes, it sends RESYNCING with an empty range to 24162306a36Sopenharmony_ci other nodes and other nodes remove the corresponding entry from the 24262306a36Sopenharmony_ci suspend_list. 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci A helper function, ->area_resyncing() can be used to check if a 24562306a36Sopenharmony_ci particular I/O range should be suspended or not. 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_ci4.2 Device Failure 24862306a36Sopenharmony_ci================== 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci Device failures are handled and communicated with the metadata update 25162306a36Sopenharmony_ci routine. When a node detects a device failure it does not allow 25262306a36Sopenharmony_ci any further writes to that device until the failure has been 25362306a36Sopenharmony_ci acknowledged by all other nodes. 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci5. Adding a new Device 25662306a36Sopenharmony_ci---------------------- 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci For adding a new device, it is necessary that all nodes "see" the new 25962306a36Sopenharmony_ci device to be added. For this, the following algorithm is used: 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci 1. Node 1 issues mdadm --manage /dev/mdX --add /dev/sdYY which issues 26262306a36Sopenharmony_ci ioctl(ADD_NEW_DISK with disc.state set to MD_DISK_CLUSTER_ADD) 26362306a36Sopenharmony_ci 2. Node 1 sends a NEWDISK message with uuid and slot number 26462306a36Sopenharmony_ci 3. Other nodes issue kobject_uevent_env with uuid and slot number 26562306a36Sopenharmony_ci (Steps 4,5 could be a udev rule) 26662306a36Sopenharmony_ci 4. In userspace, the node searches for the disk, perhaps 26762306a36Sopenharmony_ci using blkid -t SUB_UUID="" 26862306a36Sopenharmony_ci 5. Other nodes issue either of the following depending on whether 26962306a36Sopenharmony_ci the disk was found: 27062306a36Sopenharmony_ci ioctl(ADD_NEW_DISK with disc.state set to MD_DISK_CANDIDATE and 27162306a36Sopenharmony_ci disc.number set to slot number) 27262306a36Sopenharmony_ci ioctl(CLUSTERED_DISK_NACK) 27362306a36Sopenharmony_ci 6. Other nodes drop lock on "no-new-devs" (CR) if device is found 27462306a36Sopenharmony_ci 7. Node 1 attempts EX lock on "no-new-dev" 27562306a36Sopenharmony_ci 8. If node 1 gets the lock, it sends METADATA_UPDATED after 27662306a36Sopenharmony_ci unmarking the disk as SpareLocal 27762306a36Sopenharmony_ci 9. If not (get "no-new-dev" lock), it fails the operation and sends 27862306a36Sopenharmony_ci METADATA_UPDATED. 27962306a36Sopenharmony_ci 10. Other nodes get the information whether a disk is added or not 28062306a36Sopenharmony_ci by the following METADATA_UPDATED. 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci6. Module interface 28362306a36Sopenharmony_ci=================== 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci There are 17 call-backs which the md core can make to the cluster 28662306a36Sopenharmony_ci module. Understanding these can give a good overview of the whole 28762306a36Sopenharmony_ci process. 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci6.1 join(nodes) and leave() 29062306a36Sopenharmony_ci--------------------------- 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci These are called when an array is started with a clustered bitmap, 29362306a36Sopenharmony_ci and when the array is stopped. join() ensures the cluster is 29462306a36Sopenharmony_ci available and initializes the various resources. 29562306a36Sopenharmony_ci Only the first 'nodes' nodes in the cluster can use the array. 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci6.2 slot_number() 29862306a36Sopenharmony_ci----------------- 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci Reports the slot number advised by the cluster infrastructure. 30162306a36Sopenharmony_ci Range is from 0 to nodes-1. 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci6.3 resync_info_update() 30462306a36Sopenharmony_ci------------------------ 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci This updates the resync range that is stored in the bitmap lock. 30762306a36Sopenharmony_ci The starting point is updated as the resync progresses. The 30862306a36Sopenharmony_ci end point is always the end of the array. 30962306a36Sopenharmony_ci It does *not* send a RESYNCING message. 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci6.4 resync_start(), resync_finish() 31262306a36Sopenharmony_ci----------------------------------- 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci These are called when resync/recovery/reshape starts or stops. 31562306a36Sopenharmony_ci They update the resyncing range in the bitmap lock and also 31662306a36Sopenharmony_ci send a RESYNCING message. resync_start reports the whole 31762306a36Sopenharmony_ci array as resyncing, resync_finish reports none of it. 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci resync_finish() also sends a BITMAP_NEEDS_SYNC message which 32062306a36Sopenharmony_ci allows some other node to take over. 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci6.5 metadata_update_start(), metadata_update_finish(), metadata_update_cancel() 32362306a36Sopenharmony_ci------------------------------------------------------------------------------- 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ci metadata_update_start is used to get exclusive access to 32662306a36Sopenharmony_ci the metadata. If a change is still needed once that access is 32762306a36Sopenharmony_ci gained, metadata_update_finish() will send a METADATA_UPDATE 32862306a36Sopenharmony_ci message to all other nodes, otherwise metadata_update_cancel() 32962306a36Sopenharmony_ci can be used to release the lock. 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_ci6.6 area_resyncing() 33262306a36Sopenharmony_ci-------------------- 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci This combines two elements of functionality. 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci Firstly, it will check if any node is currently resyncing 33762306a36Sopenharmony_ci anything in a given range of sectors. If any resync is found, 33862306a36Sopenharmony_ci then the caller will avoid writing or read-balancing in that 33962306a36Sopenharmony_ci range. 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci Secondly, while node recovery is happening it reports that 34262306a36Sopenharmony_ci all areas are resyncing for READ requests. This avoids races 34362306a36Sopenharmony_ci between the cluster-filesystem and the cluster-RAID handling 34462306a36Sopenharmony_ci a node failure. 34562306a36Sopenharmony_ci 34662306a36Sopenharmony_ci6.7 add_new_disk_start(), add_new_disk_finish(), new_disk_ack() 34762306a36Sopenharmony_ci--------------------------------------------------------------- 34862306a36Sopenharmony_ci 34962306a36Sopenharmony_ci These are used to manage the new-disk protocol described above. 35062306a36Sopenharmony_ci When a new device is added, add_new_disk_start() is called before 35162306a36Sopenharmony_ci it is bound to the array and, if that succeeds, add_new_disk_finish() 35262306a36Sopenharmony_ci is called the device is fully added. 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci When a device is added in acknowledgement to a previous 35562306a36Sopenharmony_ci request, or when the device is declared "unavailable", 35662306a36Sopenharmony_ci new_disk_ack() is called. 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ci6.8 remove_disk() 35962306a36Sopenharmony_ci----------------- 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci This is called when a spare or failed device is removed from 36262306a36Sopenharmony_ci the array. It causes a REMOVE message to be send to other nodes. 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ci6.9 gather_bitmaps() 36562306a36Sopenharmony_ci-------------------- 36662306a36Sopenharmony_ci 36762306a36Sopenharmony_ci This sends a RE_ADD message to all other nodes and then 36862306a36Sopenharmony_ci gathers bitmap information from all bitmaps. This combined 36962306a36Sopenharmony_ci bitmap is then used to recovery the re-added device. 37062306a36Sopenharmony_ci 37162306a36Sopenharmony_ci6.10 lock_all_bitmaps() and unlock_all_bitmaps() 37262306a36Sopenharmony_ci------------------------------------------------ 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci These are called when change bitmap to none. If a node plans 37562306a36Sopenharmony_ci to clear the cluster raid's bitmap, it need to make sure no other 37662306a36Sopenharmony_ci nodes are using the raid which is achieved by lock all bitmap 37762306a36Sopenharmony_ci locks within the cluster, and also those locks are unlocked 37862306a36Sopenharmony_ci accordingly. 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci7. Unsupported features 38162306a36Sopenharmony_ci======================= 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ciThere are somethings which are not supported by cluster MD yet. 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_ci- change array_sectors. 386