code: func (vdb *VersionedDB) buildCommitters(updates *statedb.UpdateBatch) ([]batch, error) {
  	namespaces := updates.GetUpdatedNamespaces()
  	var nsCommitterBuilder []batch
  	for _, ns := range namespaces {
  		nsUpdates := updates.GetUpdates(ns)
  		db, err := vdb.getNamespaceDBHandle(ns)
  		if err != nil {
  			return nil, err
  		}
  		nsRevs := vdb.committedDataCache.revs[ns]
  		if nsRevs == nil {
  			nsRevs = make(nsRevisions)
  		}
  		// for each namespace, construct one builder with the corresponding couchdb handle and couch revisions
  		// that are already loaded into cache (during validation phase)
  		nsCommitterBuilder = append(nsCommitterBuilder, &nsCommittersBuilder{updates: nsUpdates, db: db, revisions: nsRevs})
  	}
  	if err := executeBatches(nsCommitterBuilder); err != nil {
  		return nil, err
  	}
  	// accumulate results across namespaces (one or more batches of `subNsCommitter` for a namespace from each builder)
  	var combinedSubNsCommitters []batch
  	for _, b := range nsCommitterBuilder {
  		combinedSubNsCommitters = append(combinedSubNsCommitters, b.(*nsCommittersBuilder).subNsCommitters...)
  	}
  	return combinedSubNsCommitters, nil
  }
docs: // buildCommitters build the batches of type subNsCommitter. This functions processes different namespaces in parallel