Package edu.brown.hstore.util

Source Code of edu.brown.hstore.util.TransactionWorkRequestBuilder

package edu.brown.hstore.util;

import java.util.BitSet;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.google.protobuf.ByteString;

import edu.brown.hstore.Hstoreservice.TransactionWorkRequest;
import edu.brown.hstore.txns.LocalTransaction;
import edu.brown.utils.PartitionSet;

public class TransactionWorkRequestBuilder {

    /**
     * Set of ParameterSet indexes that this TransactionWorkRequest needs
     */
    private final BitSet param_indexes = new BitSet();
   
    /**
     * Set of input DependencyIds needed by this TransactionWorkRequest
     */
    private final Set<Integer> inputs = new HashSet<Integer>();

    private TransactionWorkRequest.Builder builder;

    /**
     * Get the TransactionWorkRequest.Builder
     * If the reset flag is set to true, then a new Builder will be initialized
     * @param ts
     * @return
     */
    public TransactionWorkRequest.Builder getBuilder(LocalTransaction ts, PartitionSet doneNotifications) {
        if (this.builder == null) {
            this.builder = TransactionWorkRequest.newBuilder()
                                        .setTransactionId(ts.getTransactionId().longValue())
                                        .setSourcePartition(ts.getBasePartition())
                                        .setProcedureId(ts.getProcedure().getId());
            if (doneNotifications != null) {
                this.builder.addAllDonePartition(doneNotifications);
            }
            this.param_indexes.clear();
            this.inputs.clear();
        }
        return (this.builder);
    }
   
    /**
     * Build the TransactionWorkRequest and mark the object to be reset
     * the next time that it is used.
     * @return
     */
    public TransactionWorkRequest build() {
        TransactionWorkRequest request = this.builder.build();
        this.builder = null;
        return (request);
    }
   
    public void addParamIndexes(Collection<Integer> param_indexes) {
        for (Integer idx : param_indexes) {
            this.param_indexes.set(idx.intValue());
        } // FOR
    }
   
    public void addInputDependencyId(Integer dep_id) {
        this.inputs.add(dep_id);
    }
   
    public boolean hasInputDependencyId(Integer dep_id) {
        return (this.inputs.contains(dep_id));
    }
   
    public void addParameterSets(List<ByteString> params) {
        for (int i = 0, cnt = params.size(); i < cnt; i++) {
            ByteString bs = (this.param_indexes.get(i) ? params.get(i) : ByteString.EMPTY);
            this.builder.addParams(bs);
        } // FOR
    }
   
    /**
     * Returns true if there is a TransactionWorkRequest builder that
     * needs to be sent out
     * @return
     */
    public boolean isDirty() {
        return (this.builder != null);
    }
   
}
TOP

Related Classes of edu.brown.hstore.util.TransactionWorkRequestBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.