private void initSpecExecScheduler() {
assert(this.specExecScheduler == null);
assert(this.hstore_site != null);
this.specExecCheckerType = SpeculationConflictCheckerType.get(hstore_conf.site.specexec_scheduler_checker);
AbstractConflictChecker checker = null;
switch (this.specExecCheckerType) {
// -------------------------------
// ROW-LEVEL
// -------------------------------
case MARKOV:
// The MarkovConflictChecker is thread-safe, so we all of the partitions
// at this site can reuse the same one.
checker = MarkovConflictChecker.singleton(this.catalogContext, this.thresholds);
break;
// -------------------------------
// TABLE-LEVEL
// -------------------------------
case TABLE:
checker = new TableConflictChecker(this.catalogContext);
break;
// -------------------------------
// UNSAFE
// NOTE: You probably don't want to use this!
// -------------------------------
case UNSAFE:
checker = new UnsafeConflictChecker(this.catalogContext, hstore_conf.site.specexec_unsafe_limit);
LOG.warn(StringUtil.bold(String.format("Using %s in %s for partition %d. This is a bad idea!",
checker.getClass().getSimpleName(), this.getClass().getSimpleName(), this.partitionId)));
break;
// -------------------------------
// OPTIMISTIC
// -------------------------------
case OPTIMISTIC: