VMware {code} Community
chennuru
Contributor
Contributor

Making multiple VixDiskLib_Open calls for writing to vmdk file

I am trying to write to restore a vmdk file using vddk library. When I open more than one disk handle for write I get following error.

Reading from disk from multiple threads is working fine though. I have IO thread for opening and closing disk handles and worker threads for reading and writing.

WARN: [NFC ERROR] NfcFssrvrProcessErrorMsg: received NFC error 13 from server: NfcFssrvrOpen: Failed to open '[datastore1] ubuntu 16.04 test/restored_disk_2000_1.vmdk'

WARN: [NFC ERROR] NfcFssrvrClientOpen: received unexpected message 4 from server

INFO: DISKLIB-DSCPTR: : "ha-nfc://[datastore1] ubuntu 16.04 test/restored_disk_2000_1.vmdk@xxx.xx.xxx.xx:902" : Failed to open NBD extent.

INFO: DISKLIB-LINK  : "ha-nfc://[datastore1] ubuntu 16.04 test/restored_disk_2000_1.vmdk@xxx.xx.xxx.xx:902" : failed to open (NBD_ERR_GENERIC).

INFO: DISKLIB-CHAIN : "ha-nfc://[datastore1] ubuntu 16.04 test/restored_disk_2000_1.vmdk@xxx.xx.xxx.xx:902" : failed to open (NBD_ERR_GENERIC).

INFO: DISKLIB-LIB   : Failed to open 'ha-nfc://[datastore1] ubuntu 16.04 test/restored_disk_2000_1.vmdk@xxx.xx.xxx.xx:902' with flags 0x18 NBD_ERR_GENERIC (290).

INFO: VixDiskLib: Detected DiskLib error 290 (NBD_ERR_GENERIC).

INFO: VixDiskLib: Failed to open disk ha-nfc://[datastore1] ubuntu 16.04 test/restored_disk_2000_1.vmdk@xxx.xx.xxx.xx:902!52 c3 ba 2e 45 67 ab fb-32 2c a9 de be 3d 61 57. Error 1 (Unknown error) (DiskLib error 290: NBD_ERR_GENERIC) at 4739.

INFO: VixDiskLib: VixDiskLib_OpenEx: Cannot open disk [datastore1] ubuntu 16.04 test/restored_disk_2000_1.vmdk. Error 1 (Unknown error) (DiskLib error 290: NBD_ERR_GENERIC) at 4966.

INFO: VixDiskLib: VixDiskLib_Open: Cannot open disk [datastore1] ubuntu 16.04 test/restored_disk_2000_1.vmdk. Error 1 (Unknown error) at 5004.

failed: 1: Unknown error

Following is the code:

diskHandlePtrs = (VixDiskLibHandle **)malloc(numOfThreads * sizeof(VixDiskLibHandle *));

for (int i=0; i<numOfThreads; i++) {

        diskHandlePtrs[i] = (VixDiskLibHandle *)malloc(sizeof(VixDiskLibHandle));

            vixError = VixDiskLib_Open(connection, path,

                    VIXDISKLIB_FLAG_OPEN_UNBUFFERED, diskHandlePtrs[i]);

        CHECK_AND_THROW(vixError);

}

0 Kudos
0 Replies