Specs - dreameddeath/couchbase-testing GitHub Wiki

CouchbaseCloningBucketWrapper

  • Permet de gérer un bucket source et un bucket "cible"
  • Se gère au niveau BucketFactory par nom de bucket
  • Définit pour un bucket "source" donné, un bucket "cible" (éventuellement sur un autre cluster)

#Pseudo code

var source;
var target;
func get(key){
    return target.asyncGet().map(doc.flags |= clonedFlag).whenFailure(source.asyncGet());
}

func create(key,doc){
    return target.asyncCreate(key,doc);
}

func update(key,doc){
    return (doc.flags &     clonedFlag)?target.asyncUpdate(key,doc):target.asyncCreate(key,doc).whenFailedWithDuplicate(throw CasMisMatch);
}

func [pre|ap]pend(key,doc){
    return (doc.flags & clonedFlag)?target.[pre|ap]pend(key,doc): 
         target.asyncCreate(key,[pre|ap]pend(source.get(key),doc)).whenFailed(target.[pre|ap]pend(key,doc))
}

func counter(key,value){
    target.counter(key,value).whenFailed(target.counter(key,value,source.get(key))); // économise un get sur le source par défaut
}