Package edu.brown.utils

Examples of edu.brown.utils.PartitionSet


     * testSendClientResponse
     */
    @Test
    public void testSendClientResponse() throws Exception {
        Procedure catalog_proc = this.getProcedure(TARGET_PROCEDURE);
        PartitionSet predict_touchedPartitions = new PartitionSet(BASE_PARTITION);
        boolean predict_readOnly = true;
        boolean predict_canAbort = true;
       
        MockClientCallback callback = new MockClientCallback();
       
View Full Code Here


                                    ParameterSet params,
                                    RpcCallback<ClientResponseImpl> client_callback) {
        final int procId = catalog_proc.getId();
        boolean predict_abortable = (hstore_conf.site.exec_no_undo_logging_all == false);
        boolean predict_readOnly = this.isReadOnly[procId];
        PartitionSet predict_partitions = null;
        EstimatorState t_state = null;
       
        // Setup TransactionProfiler
        if (hstore_conf.site.txn_profiling) {
            this.setupTransactionProfiler(ts, this.isSysProc[procId]);
        }
       
        // -------------------------------
        // SYSTEM PROCEDURES
        // -------------------------------
        if (this.isSysProc[procId]) {
            // Sysprocs can be either all partitions or single-partitioned
            // TODO: It would be nice if the client could pass us a hint when loading the tables
            // It would be just for the loading, and not regular transactions
            if (catalog_proc.getSinglepartition() && catalog_proc.getEverysite() == false) {
                predict_partitions = catalogContext.getPartitionSetSingleton(base_partition);
            } else {
                predict_partitions = catalogContext.getAllPartitionIds();
            }
        }
        // -------------------------------
        // MAPREDUCE TRANSACTIONS
        // -------------------------------
        else if (this.isMapReduce[procId]) {
            // MapReduceTransactions always need all partitions
            if (debug.val)
                LOG.debug(String.format("New request is for MapReduce %s, so it has to be " +
                      "multi-partitioned [clientHandle=%d]",
                          catalog_proc.getName(), ts.getClientHandle()));
            predict_partitions = catalogContext.getAllPartitionIds();
        }
        // -------------------------------
        // VOLTDB @PROCINFO
        // -------------------------------
        else if (hstore_conf.site.exec_voltdb_procinfo) {
            if (debug.val)
                LOG.debug(String.format("Using the catalog information to determine whether the %s transaction " +
                      "is single-partitioned [clientHandle=%d, singleP=%s]",
                          catalog_proc.getName(), ts.getClientHandle(), catalog_proc.getSinglepartition()));
            if (catalog_proc.getSinglepartition()) {
                predict_partitions = catalogContext.getPartitionSetSingleton(base_partition);
            } else {
                predict_partitions = catalogContext.getAllPartitionIds();
            }
        }
        // -------------------------------
        // FORCE DISTRIBUTED
        // -------------------------------
        else if (hstore_conf.site.exec_force_allpartitions) {
            predict_partitions = catalogContext.getAllPartitionIds();
        }
        // -------------------------------
        // TRANSACTION ESTIMATORS
        // -------------------------------
        else if (hstore_conf.site.markov_enable || hstore_conf.site.markov_fixed) {
            // Grab the TransactionEstimator for the destination partition and figure out whether
            // this mofo is likely to be single-partition or not. Anything that we can't estimate
            // will just have to be multi-partitioned. This includes sysprocs
            TransactionEstimator t_estimator = this.t_estimators[base_partition];
            if (t_estimator == null) {
                t_estimator = this.hstore_site.getPartitionExecutor(base_partition).getTransactionEstimator();
                this.t_estimators[base_partition] = t_estimator;
            }
           
            try {
                if (hstore_conf.site.txn_profiling && ts.profiler != null) ts.profiler.startInitEstimation();
                if (t_estimator != null) {
                    if (debug.val)
                        LOG.debug(String.format("%s - Using %s to populate txn properties [clientHandle=%d]",
                                  TransactionUtil.formatTxnName(catalog_proc, txn_id),
                                  t_estimator.getClass().getSimpleName(), client_handle));
                    t_state = t_estimator.startTransaction(txn_id, base_partition, catalog_proc, params.toArray());
                }
               
                // If there is no EstimatorState, then there is nothing we can do
                // It has to be executed as multi-partitioned
                if (t_state == null) {
                    if (debug.val) {
                        LOG.debug(String.format("%s - No %s was returned. Using default estimate.",
                                  TransactionUtil.formatTxnName(catalog_proc, txn_id),
                                  EstimatorState.class.getSimpleName()));
                    }
                }
                // We have a EstimatorState handle, so let's see what it says...
                else {
                    if (trace.val)
                        LOG.trace("\n" + StringBoxUtil.box(t_state.toString()));
                    Estimate t_estimate = t_state.getInitialEstimate();
                   
                    // Bah! We didn't get back a Estimation for some reason...
                    if (t_estimate == null) {
                        if (debug.val)
                            LOG.debug(String.format("%s - No %s handle was return. Using default estimate.",
                                      TransactionUtil.formatTxnName(catalog_proc, txn_id),
                                      Estimate.class.getSimpleName()));
                    }
                    // Invalid Estimation. Stick with defaults
                    else if (t_estimate.isValid() == false) {
                        if (debug.val)
                            LOG.debug(String.format("%s - %s is marked as invalid. Using default estimate.\n%s",
                                      TransactionUtil.formatTxnName(catalog_proc, txn_id),
                                      t_estimate.getClass().getSimpleName(), t_estimate));
                    }   
                    // Use Estimation to determine things
                    else {
                        if (debug.val) {
                            LOG.debug(String.format("%s - Using %s to determine if txn is single-partitioned",
                                      TransactionUtil.formatTxnName(catalog_proc, txn_id),
                                      t_estimate.getClass().getSimpleName()));
                            LOG.trace(String.format("%s %s:\n%s",
                                      TransactionUtil.formatTxnName(catalog_proc, txn_id),
                                      t_estimate.getClass().getSimpleName(), t_estimate));
                        }
                        predict_partitions = t_estimate.getTouchedPartitions(this.thresholds);
                        predict_readOnly = t_estimate.isReadOnlyAllPartitions(this.thresholds);
                        predict_abortable = (predict_partitions.size() == 1 ||
                                             predict_readOnly == false ||
                                             t_estimate.isAbortable(this.thresholds));
                       
                        // Check whether the TransactionEstimator *really* thinks that we should
                        // give it updates about this txn. If the flag is false, then we'll
                        // check whether the updates are enabled in the HStoreConf parameters
                        if (t_state.shouldAllowUpdates() == false) {
                            if (predict_partitions.size() == 1) {
                                if (hstore_conf.site.markov_singlep_updates == false) t_state.disableUpdates();
                            }
                            else if (hstore_conf.site.markov_dtxn_updates == false) {
                                t_state.disableUpdates();
                            }
                        }
                       
                        if (debug.val && predict_partitions.isEmpty()) {
                            LOG.warn(String.format("%s - Unexpected empty predicted %s from %s [updatesEnabled=%s]\n%s",
                                TransactionUtil.formatTxnName(catalog_proc, txn_id),
                                PartitionSet.class.getSimpleName(),
                                t_estimator.getClass().getSimpleName(),
                                t_state.isUpdatesEnabled(), t_estimate));
                            ts.setAllowEarlyPrepare(false);
//                            System.err.println("WROTE MARKOVGRAPH: " + ((MarkovEstimatorState)t_state).dumpMarkovGraph());
//                            System.err.flush();
//                            HStore.crashDB();
                        }
                    }
                }
            } catch (Throwable ex) {
                if (t_state != null && t_state instanceof MarkovEstimatorState) {
                    LOG.warn("WROTE MARKOVGRAPH: " + ((MarkovEstimatorState)t_state).dumpMarkovGraph());
                }
                LOG.error(String.format("Failed calculate estimate for %s request\nParameters: %s",
                          TransactionUtil.formatTxnName(catalog_proc, txn_id),
                          params), ex);
                ex.printStackTrace();
                predict_partitions = catalogContext.getAllPartitionIds();
                predict_readOnly = false;
                predict_abortable = true;
            } finally {
                if (hstore_conf.site.txn_profiling && ts.profiler != null) ts.profiler.stopInitEstimation();
            }
        }
       
        if (predict_partitions == null || predict_partitions.isEmpty()) {
            // -------------------------------
            // FORCE SINGLE-PARTITIONED
            // -------------------------------
            if (hstore_conf.site.exec_force_singlepartitioned) {
                if (debug.val)
                    LOG.debug(String.format("The \"Always Single-Partitioned\" flag is true. " +
                          "Marking new %s transaction as single-partitioned on partition %d [clientHandle=%d]",
                              catalog_proc.getName(), base_partition, client_handle));
                predict_partitions = catalogContext.getPartitionSetSingleton(base_partition);
            }
            // -------------------------------
            // FORCE MULTI-PARTITIONED
            // -------------------------------
            else {
                predict_partitions = catalogContext.getAllPartitionIds();
            }
        }
        assert(predict_partitions != null);
        assert(predict_partitions.isEmpty() == false);
       
        // -------------------------------
        // SET EXECUTION PROPERTIES
        // -------------------------------
       
View Full Code Here

            if (trace.val)
                LOG.trace(String.format("[#%d-%02d] Calculating touched partitions plans for %s",
                          txn_id, stmt_index, catalog_stmt.fullName()));

            Map<PlanFragment, PartitionSet> frag_partitions = plan.frag_partitions[stmt_index];
            PartitionSet stmt_all_partitions = plan.stmt_partitions[stmt_index];

            boolean has_singlepartition_plan = catalog_stmt.getHas_singlesited();
            boolean is_replicated_only = this.stmt_is_replicatedonly[stmt_index];
            boolean is_read_only = this.stmt_is_readonly[stmt_index];
            boolean is_singlePartition = has_singlepartition_plan;
            boolean is_local = true;
            CatalogMap<PlanFragment> fragments = null;

            // OPTIMIZATION: Fast partition look-up caching
            // OPTIMIZATION: Read-only queries on replicated tables always just
            // go to the local partition
            // OPTIMIZATION: If we're force to be single-partitioned, pretend
            // that the table is replicated
            if ((this.cache_isSinglePartition != null && this.cache_isSinglePartition[stmt_index]) ||
                (is_replicated_only && is_read_only) ||
                (this.force_singlePartition)) {
                if (trace.val) {
                    if (this.cache_isSinglePartition[stmt_index]) {
                        LOG.trace(String.format("[#%d-%02d] Using fast-lookup for %s. " +
                              "Skipping PartitionEstimator",
                                  txn_id, stmt_index, catalog_stmt.fullName()));
                    } else {
                        LOG.trace(String.format("[#%d-%02d] %s is read-only and replicate-only." +
                              "Skipping PartitionEstimator",
                              txn_id, stmt_index, catalog_stmt.fullName()));
                    }
                }
                assert (has_singlepartition_plan);

                if (this.cache_singlePartitionFragmentPartitions == null) {
                    this.cache_singlePartitionFragmentPartitions = CACHED_FRAGMENT_PARTITION_MAPS[base_partition];
                }
                Map<PlanFragment, PartitionSet> cached_frag_partitions = this.cache_singlePartitionFragmentPartitions.get(catalog_stmt);
                if (cached_frag_partitions == null) {
                    cached_frag_partitions = new HashMap<PlanFragment, PartitionSet>();
                    PartitionSet p = this.catalogContext.getPartitionSetSingleton(base_partition);
                    for (PlanFragment catalog_frag : catalog_stmt.getFragments().values()) {
                        cached_frag_partitions.put(catalog_frag, p);
                    } // FOR
                    this.cache_singlePartitionFragmentPartitions.put(catalog_stmt, cached_frag_partitions);
                }
                if (plan.stmt_partitions_swap[stmt_index] == null) {
                    plan.stmt_partitions_swap[stmt_index] = plan.stmt_partitions[stmt_index];
                    plan.frag_partitions_swap[stmt_index] = plan.frag_partitions[stmt_index];
                }
                stmt_all_partitions = plan.stmt_partitions[stmt_index] = this.catalogContext.getPartitionSetSingleton(base_partition);
                frag_partitions = plan.frag_partitions[stmt_index] = cached_frag_partitions;
            }

            // Otherwise figure out whether the query can execute as
            // single-partitioned or not
            else {
                if (debug.val)
                    LOG.debug(String.format("[#%d-%02d] Computing touched partitions %s in txn #%d", txn_id,
                              stmt_index, catalog_stmt.fullName(), txn_id));

                if (plan.stmt_partitions_swap[stmt_index] != null) {
                    stmt_all_partitions = plan.stmt_partitions[stmt_index] = plan.stmt_partitions_swap[stmt_index];
                    plan.stmt_partitions_swap[stmt_index] = null;
                    stmt_all_partitions.clear();

                    frag_partitions = plan.frag_partitions[stmt_index] = plan.frag_partitions_swap[stmt_index];
                    plan.frag_partitions_swap[stmt_index] = null;
                }

                try {
                    // OPTIMIZATION: If we were told that the transaction is suppose to be
                    // single-partitioned, then we will throw the single-partitioned PlanFragments
                    // at the PartitionEstimator to get back what partitions each PlanFragment
                    // will need to go to. If we get multiple partitions, then we know that we
                    // mispredicted and we should throw a MispredictionException
                    // If we originally didn't predict that it was single-partitioned, then we
                    // actually still need to check whether the query should be single-partitioned or not.
                    // This is because a query may actually just want to execute on just one
                    // partition (note that it could be a local partition or the remote partition).
                    // We'll assume that it's single-partition <<--- Can we cache that??
                    while (true) {
                        if (is_singlePartition == false) stmt_all_partitions.clear();
                        fragments = (is_singlePartition ? catalog_stmt.getFragments() : catalog_stmt.getMs_fragments());
                        if (debug.val)
                            LOG.debug(String.format("[#%d-%02d] Estimating for %d %s-partition fragments",
                                      txn_id, stmt_index, fragments.size(),
                                      (is_singlePartition ? "single" : "multi")));

                        // PARTITION ESTIMATOR
                        if (hstore_conf.site.planner_profiling && profiler != null)
                            ProfileMeasurementUtil.swap(profiler.plan_time, profiler.partest_time);
                        this.p_estimator.getAllFragmentPartitions(frag_partitions,
                                                                  stmt_all_partitions,
                                                                  fragments.values(),
                                                                  params,
                                                                  base_partition);
                        if (hstore_conf.site.planner_profiling && profiler != null)
                            ProfileMeasurementUtil.swap(profiler.partest_time, profiler.plan_time);

                        int stmt_all_partitions_size = stmt_all_partitions.size();
                        if (is_singlePartition && stmt_all_partitions_size > 1) {
                            // If this was suppose to be multi-partitioned, then
                            // we want to stop right here!!
                            if (predict_singlePartitioned) {
                                if (trace.val)
                                    LOG.trace(String.format("Mispredicted txn #%d - Multiple Partitions %s",
                                              txn_id, stmt_all_partitions));
                                mispredict = true;
                                break;
                            }
                            // Otherwise we can let it wrap back around and construct the fragment
                            // mapping for the multi-partition PlanFragments
                            is_singlePartition = false;
                            continue;
                        }
                        is_local = (stmt_all_partitions_size == 1 && stmt_all_partitions.contains(base_partition));
                        if (is_local == false && predict_singlePartitioned) {
                            // Again, this is not what was suppose to happen!
                            if (trace.val)
                                LOG.trace(String.format("Mispredicted txn #%d - Remote Partitions %s",
                                          txn_id, stmt_all_partitions));
                            mispredict = true;
                            break;
                        } else if (predict_partitions.containsAll(stmt_all_partitions) == false) {
                            // Again, this is not what was suppose to happen!
                            if (trace.val)
                                LOG.trace(String.format("Mispredicted txn #%d - Unallocated Partitions %s / %s",
                                          txn_id, stmt_all_partitions, predict_partitions));
                            mispredict = true;
                            break;
                        }
                        // Score! We have a plan that works!
                        break;
                    } // WHILE
                    // Bad Mojo!
                } catch (Exception ex) {
                    String msg = "";
                    for (int i = 0; i < this.batchSize; i++) {
                        msg += String.format("[#%d-%02d] %s %s\n%5s\n", txn_id, i, catalog_stmt.fullName(),
                                catalog_stmt.getSqltext(), Arrays.toString(batchArgs[i].toArray()));
                    } // FOR
                    LOG.fatal("\n" + msg);
                    throw new RuntimeException("Unexpected error when planning " + catalog_stmt.fullName(), ex);
                }
            }
            if (debug.val)
                LOG.debug(String.format("[#%d-%02d] is_singlepartition=%s, partitions=%s",
                          txn_id, stmt_index, is_singlePartition, stmt_all_partitions));

            // Get a sorted list of the PlanFragments that we need to execute
            // for this query
            if (is_singlePartition) {
                if (this.sorted_singlep_fragments[stmt_index] == null) {
                    this.sorted_singlep_fragments[stmt_index] = PlanNodeUtil.getSortedPlanFragments(catalog_stmt, true);
                }
                plan.frag_list[stmt_index] = this.sorted_singlep_fragments[stmt_index];

                // Only mark that we touched these partitions if the Statement
                // is not on a replicated table or it's not read-only
                if (is_replicated_only == false || is_read_only == false) {
                    touched_partitions.put(stmt_all_partitions.get());
                }
            }
            // Distributed Query
            else {
                if (this.sorted_multip_fragments[stmt_index] == null) {
                    this.sorted_multip_fragments[stmt_index] = PlanNodeUtil.getSortedPlanFragments(catalog_stmt, false);
                }
                plan.frag_list[stmt_index] = this.sorted_multip_fragments[stmt_index];

                // Always mark that we are touching these partitions
                touched_partitions.put(stmt_all_partitions.values());

                // Note that will want to update is_singlePartitioned here for non-readonly replicated
                // querys when we have a one partition cluster because those queries don't have
                // single-partition query plans
                // if (this.num_partitions == 1 && is_replicated_only && is_read_only == false) {
                // is_singlePartition = true;
                // }
            }

            plan.readonly = plan.readonly && catalog_stmt.getReadonly();
            plan.all_singlepartitioned = plan.all_singlepartitioned && is_singlePartition;
            plan.all_local = plan.all_local && is_local;

            // Keep track of whether the current query in the batch was
            // single-partitioned or not
            plan.singlepartition_bitmap[stmt_index] = is_singlePartition;

            // Misprediction!!
            if (mispredict) {
                // If this is the first Statement in the batch that hits the mispredict,
                // then we need to create the histogram and populate it with the
                // partitions from the previous queries
                int start_idx = stmt_index;
                if (mispredict_h == null) {
                    mispredict_h = new FastIntHistogram();
                    start_idx = 0;
                }
                for (int i = start_idx; i <= stmt_index; i++) {
                    if (debug.val)
                        LOG.debug(String.format("Pending mispredict for txn #%d. " +
                                  "Checking whether to add partitions for batch statement %02d",
                                   txn_id, i));

                    // Make sure that we don't count the local partition if it
                    // was reading a replicated table.
                    if (this.stmt_is_replicatedonly[i] == false ||
                        (this.stmt_is_replicatedonly[i] && this.stmt_is_readonly[i] == false)) {
                        if (trace.val)
                            LOG.trace(String.format("%s touches non-replicated table. " +
                                      "Including %d partitions in mispredict histogram for txn #%d",
                                      this.catalog_stmts[i].fullName(), plan.stmt_partitions[i].size(), txn_id));
                        mispredict_h.put(plan.stmt_partitions[i]);
                    }
                } // FOR
                continue;
            }

            // ----------------------
            // DEBUG DUMP
            // ----------------------
            if (debug.val) {
                List<PlanFragment> _fragments = null;
                if (is_singlePartition && this.sorted_singlep_fragments[stmt_index] != null) {
                    _fragments = this.sorted_singlep_fragments[stmt_index];
                } else {
                    _fragments = this.sorted_multip_fragments[stmt_index];
                }

                Map<?, ?> maps[] = new Map[_fragments.size() + 1];
                int ii = 0;
                for (PlanFragment catalog_frag : _fragments) {
                    Map<String, Object> m = new LinkedHashMap<String, Object>();
                    PartitionSet p = plan.frag_partitions[stmt_index].get(catalog_frag);
                    boolean frag_local = (p.size() == 1 && p.contains(base_partition));
                    m.put(String.format("[%02d] Fragment", ii), catalog_frag.fullName());
                    m.put(String.format("     Partitions"), p);
                    m.put(String.format("     IsLocal"), frag_local);
                    ii++;
                    maps[ii] = m;
View Full Code Here

            // Generate the synthetic DependencyIds for the query
            int last_output_id = HStoreConstants.NULL_DEPENDENCY_ID;
            for (int round = 0, cnt = num_fragments; round < cnt; round++) {
                PlanFragment catalog_frag = fragments.get(round);
                PartitionSet f_partitions = frag_partitions.get(catalog_frag);
                assert (f_partitions != null) :
                    String.format("No PartitionIds for [%02d] %s in Statement #%d", round,
                                  catalog_frag.fullName(), stmt_index);
                boolean f_local = (f_partitions.size() == 1 && f_partitions.contains(plan.base_partition));
                final Integer output_id = Integer.valueOf(this.enable_unique_ids ?
                            BatchPlanner.NEXT_DEPENDENCY_ID.getAndIncrement() : last_id++);

                PlanVertex v = new PlanVertex(catalog_frag,
                                              stmt_index,
View Full Code Here

            this.stmt_partitions_swap = new PartitionSet[batch_size];
            this.frag_partitions = (Map<PlanFragment, PartitionSet>[]) new HashMap<?, ?>[batch_size];
            this.frag_partitions_swap = (Map<PlanFragment, PartitionSet>[]) new HashMap<?, ?>[batch_size];
            this.singlepartition_bitmap = new boolean[batch_size];
            for (int i = 0; i < batch_size; i++) {
                this.stmt_partitions[i] = new PartitionSet();
                this.frag_partitions[i] = new HashMap<PlanFragment, PartitionSet>();
            } // FOR
        }
View Full Code Here

    private class MockServiceHandler extends HStoreService {

        @Override
        public void transactionInit(RpcController controller, TransactionInitRequest request, RpcCallback<TransactionInitResponse> done) {
            LOG.info("Incoming " + request.getClass().getSimpleName());
            PartitionSet partitions = new PartitionSet(request.getPartitionsList());
            RemoteTransaction ts = hstore_site.getTransactionInitializer()
                                             .createRemoteTransaction(request.getTransactionId(),
                                                                      partitions,
                                                                      null,
                                                                      request.getBasePartition(),
View Full Code Here

    public <T extends EstimatorState> T startTransactionImpl(Long txn_id, int base_partition, Procedure catalog_proc, Object[] args) {
        FixedEstimatorState ret = new FixedEstimatorState(this.catalogContext, txn_id, base_partition);
        String procName = catalog_proc.getName();
        Long f_id = null;
        Long c_id = null;
        PartitionSet partitions = null;
        PartitionSet readonly = EMPTY_PARTITION_SET;
       
        if (procName.equalsIgnoreCase("NewReservation")) {
            c_id = (Long)args[1];
            f_id = (Long)args[2];
        }
        else if (procName.equalsIgnoreCase("FindOpenSeats")) {
            f_id = (Long)args[0];
            readonly = this.catalogContext.getPartitionSetSingleton(base_partition);
        }
        else if (procName.equalsIgnoreCase("UpdateReservation")) {
            f_id = (Long)args[2];
        }
        else if (procName.equalsIgnoreCase("DeleteReservation")) {
            c_id = (Long)args[1];
            f_id = (Long)args[0];
            if (c_id == VoltType.NULL_BIGINT) {
                c_id = null;
            }
        }
        else if (procName.equalsIgnoreCase("UpdateCustomer")) {
            c_id = (Long)args[0];
        }
       
        // Construct partition information!
        if (f_id != null && c_id != null) {
            partitions = new PartitionSet();
            partitions.add(hasher.hash(f_id));
            partitions.add(hasher.hash(c_id));
        }
        else if (f_id != null) {
            partitions = this.catalogContext.getPartitionSetSingleton(hasher.hash(f_id));
View Full Code Here

        if (this.query_estimate[partition] == null) {
            this.query_estimate[partition] = new ArrayList<CountedStatement>();
        }
        if (this.query_estimate[partition].isEmpty()) {
            for (MarkovVertex v : this.path) {
                PartitionSet partitions = v.getPartitions();
                if (partitions.contains(partition)) {
                    this.query_estimate[partition].add(v.getCountedStatement());
                }
            } // FOR
        }
        return (this.query_estimate[partition]);
View Full Code Here

//    }
    @Override
    public PartitionSet getWritePartitions(EstimationThresholds t) {
        assert(t != null);
        if (this.write_partitionset == null) {
            this.write_partitionset = new PartitionSet();
        }
        this.getPartitions(this.write_partitionset, this.write, (float)t.getWriteThreshold(), false);
        return (this.write_partitionset);
    }
View Full Code Here

    }
    @Override
    public PartitionSet getDonePartitions(EstimationThresholds t) {
        assert(t != null);
        if (this.done_partitionset == null) {
            this.done_partitionset = new PartitionSet();
        }
        this.getPartitions(this.done_partitionset, this.done, (float)t.getDoneThreshold(), false);
        return (this.done_partitionset);
    }
View Full Code Here

TOP

Related Classes of edu.brown.utils.PartitionSet

Copyright © 2018 www.massapicom. 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.