whole_func_string: function doRemoveDatasetClients(datasetClientsToRemove, cb) {
    var removeIds = _.pluck(datasetClientsToRemove, 'id');
    var datasetIds = _.uniq(_.pluck(datasetClientsToRemove, 'datasetId'));
    debug('doRemoveDatasetClients: removed datasetClients = %d, datasets = %d', removeIds.length, datasetIds.length);
    async.series([
      function deleteDatasetClientAndRefs(callback) {
        async.map(removeIds, doRemoveDatasetClientWithRecords, function(err, deleteResult) {
          if (err) {
            debug('Failed to delete datasetClients due to error %s', err);
          }
          return callback(err, deleteResult);
        });
      },
      function removeUnusedRecords(callback) {
        async.map(datasetIds, removeRecordsForDataset, function(err, deletedCount) {
          if (err) {
            debug('Error occured when delete records for dataset due to error %s', err);
          }
          return callback(err, deletedCount);
        });
      }
    ], function(err, results){
      if (err) {
        return cb(err);
      } else {
        return cb(null, results[0]);
      }
    });
  }
func_code_string: function doRemoveDatasetClients(datasetClientsToRemove, cb) {
    var removeIds = _.pluck(datasetClientsToRemove, 'id');
    var datasetIds = _.uniq(_.pluck(datasetClientsToRemove, 'datasetId'));
    debug('doRemoveDatasetClients: removed datasetClients = %d, datasets = %d', removeIds.length, datasetIds.length);
    async.series([
      function deleteDatasetClientAndRefs(callback) {
        async.map(removeIds, doRemoveDatasetClientWithRecords, function(err, deleteResult) {
          if (err) {
            debug('Failed to delete datasetClients due to error %s', err);
          }
          return callback(err, deleteResult);
        });
      },
      function removeUnusedRecords(callback) {
        async.map(datasetIds, removeRecordsForDataset, function(err, deletedCount) {
          if (err) {
            debug('Error occured when delete records for dataset due to error %s', err);
          }
          return callback(err, deletedCount);
        });
      }
    ], function(err, results){
      if (err) {
        return cb(err);
      } else {
        return cb(null, results[0]);
      }
    });
  }
func_documentation_string: Remove the given datasetClients
  @param {storage~DatasetClient[]} datasetClientsToRemove an array of datasetClients to remove. Each of them should have an `id` field
  @param {Function} cb