deleteObject(bucketName, objectMD, objectKey, options, deferLocationDeletion, log, originOp, cb) {
        log.trace('deleting object from bucket');
        assert.strictEqual(typeof bucketName, 'string');
        assert.strictEqual(typeof objectMD, 'object');

        function deleteMDandData() {
            return metadata.deleteObjectMD(bucketName, objectKey, options, log,
                (err, res) => {
                    if (err) {
                        return cb(err, res);
                    }
                    log.trace('deleteObject: metadata delete OK');
                    if (objectMD.location === null) {
                        return cb(null, res);
                    }

                    if (deferLocationDeletion) {
                        return cb(null, Array.isArray(objectMD.location)
                            ? objectMD.location : [objectMD.location]);
                    }

                    if (!Array.isArray(objectMD.location)) {
                        data.delete(objectMD.location, log);
                        return cb(null, res);
                    }

                    return data.batchDelete(objectMD.location, null, null, log, err => {
                        if (err) {
                            return cb(err);
                        }
                        return cb(null, res);
                    });
                }, originOp);
        }

        const objGetInfo = objectMD.location;
        // special case that prevents azure blocks from unecessary deletion
        // will return null if no need
        return data.protectAzureBlocks(bucketName, objectKey, objGetInfo,
        log, err => {
            if (err) {
                return cb(err);
            }
            return deleteMDandData();
        });
    }
Deletes objects from a bucket
@param {string} bucketName - bucket in which objectMD is stored
@param {object} objectMD - object's metadata
@param {string} objectKey - object key name
@param {object} options - other instructions, such as { versionId } to
                          delete a specific version of the object
@param {boolean} deferLocationDeletion - true if the object should not
be removed from the storage, but be returned instead.
@param {Log} log - logger instance
@param {string} originOp - origin operation
@param {function} cb - callback from async.waterfall in objectGet
@return {undefined}