Code Change Request

# 27695

Back to Code Changes

Christopher
Technical Support
StableBit DrivePool
2.2.0.885
Windows 10 (64 bit)
Public
Alex

* [D] [Issue #27695] Revamped how pools are mounted in order to speed up the mounting process, and at the same time, ensure that 
                     all of the known pool parts are present at pool mount time.
    - Pools can now be made aware of how many total pool parts they are comprised of.
        - Legacy pools, prior to receiving this information, will function with an "unknown" pool part count, just as before.
    - If a pool is aware of how many pool parts it's made of, at mount time, it will wait for all of those pool parts to arrive
      before allowing the OS to finish mounting the pool.
        - This wait time is controlled by a new setting CoveFs_WaitForKnownPoolPartsOnMountMs. Set to 0 to disable this wait.
    - Additionally, just as before, all pools can wait for the system to finish enumerating new volumes.
        - This wait time is controlled by CoveFs_WaitForVolumesOnMountMs. Again, you can set it to 0 to disable.
        - Generally, this wait will not take place if the pool is aware of how many pool parts it has.
Public
Alex

By default, for each pool, StableBit DrivePool waits 10 seconds for all of the pool parts to arrive before allowing the mount to complete (in order to prevent exposing partial pools to the system).

From all the data here, it looks like the last pool is waiting for additional pool parts and that's what's delaying the mount.

This is the last pool arriving from the service log file.

DrivePool.Service.exe Information 0 [CoveFs] Pool found on: \\?\GLOBALROOT\Device\HarddiskVolume22 (pool ID=cc54891c-7194-429d-a48d-54cdbb194ee0) 2017-12-10 09:56:48Z 160682403
DrivePool.Service.exe Information 0 [CoveFs] Pool found on: \\?\GLOBALROOT\Device\HarddiskVolume14 (pool ID=eab70828-724c-4e4e-a7cf-c64eb75e78fb) 2017-12-10 09:56:48Z 160687439
DrivePool.Service.exe Information 0 [CoveFs] Pool found on: \\?\GLOBALROOT\Device\HarddiskVolume16 (pool ID=0158323d-2d85-43e0-bfc8-af64fd303e84) 2017-12-10 09:56:48Z 160688133
...
DrivePool.Service.exe Information 0 [CoveFs] Pool found on: \\?\GLOBALROOT\Device\HarddiskVolume24 (pool ID=6cd0ec3f-9b1f-4295-88f7-64bee766a67a) 2017-12-10 09:57:06Z 226973701

Notice the ~18 second delay for the last pool.

In order to prevent this delay, you can set CoveFs_WaitForVolumesOnMountMs to 0.

Note that the mount process begins as soon as the pool part volumes are mounted by the system, and does not depend on VDS or any other system service (including the DrivePool service).

From the trace of this boot, here is the timing of the various pool parts arriving:

        Line 61: [4]0004.01A4::12/10/2017-04:56:07.577 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume10\PoolPart.884a5a28-a2be-4f26-b3aa-d8d9283f50e6 (at bottom)
Line 220: [8]0004.01B0::12/10/2017-04:56:07.935 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume6\PoolPart.60bd8b66-5c93-48f6-8669-e7737d55857e (at bottom)
Line 337: [10]0004.01B4::12/10/2017-04:56:08.251 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume12\PoolPart.e68b9d0d-3e44-46ef-ba68-60f7b95fded6 (at bottom)
Line 594: [0]0004.01D0::12/10/2017-04:56:08.634 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume8\PoolPart.c2b2a45c-f670-4a28-b3c3-03b3e6071ae2 (at bottom)
Line 1394: [8]0004.0210::12/10/2017-04:56:28.210 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume20\PoolPart.35f46833-2cf9-4bf6-928c-676bc9b07290 (at bottom)
Line 1552: [6]0004.01B8::12/10/2017-04:56:28.343 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume19\PoolPart.170b0193-4997-4620-a958-c5c739c66980 (before: \Device\HarddiskVolume20\PoolPart.35f46833-2cf9-4bf6-928c-676bc9b07290)
Line 1705: [2]0004.0218::12/10/2017-04:56:28.739 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume18\PoolPart.5b413573-f23e-4ac6-b7c0-4eb39c158481 (before: \Device\HarddiskVolume19\PoolPart.170b0193-4997-4620-a958-c5c739c66980)
Line 8123: [7]0004.01C4::12/10/2017-04:56:47.807 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume14\PoolPart.595a3ef9-7235-4d52-be01-ae0ba4212de5 (at bottom)
Line 13175: [4]0004.0224::12/10/2017-04:56:47.855 [covefs3](CovePoolPartsInsertPoolPart)    pool part added: \Device\HarddiskVolume16\PoolPart.22ea6073-000a-4509-8655-abd5a5390b4a (at bottom)

The last 2 are pool parts on other pools.

And here is the timing of pools completing their mount process:

Line 1784: [2]0004.020C::12/10/2017-04:56:47.232 [covefs3](CoveDispatchFileSystemControl)   CoveFs volume mounted
Line 2978: [6]0004.0220::12/10/2017-04:56:47.748 [covefs3](CoveDispatchFileSystemControl)   CoveFs volume mounted
Line 2985: [2]0004.0224::12/10/2017-04:56:47.748 [covefs3](CoveDispatchFileSystemControl)   CoveFs volume mounted
Line 55788: [5]0004.0204::12/10/2017-04:57:06.845 [covefs3](CoveDispatchFileSystemControl)   CoveFs volume mounted

Note that the last one is comprised of those 2 pool parts above. The delay between the last pool mount and the one before that is largely because of CoveFs_WaitForVolumesOnMountMs.