Fix the HashFunction Bug in OptimizedHybridHashJoinOperatorDescriptor
The following commits from your working branch will be included:
The HashFunction used for InMemoryHashJoin is not update with level when
the OptimizedHybridHashJoin switches to InMemoryHashJoin. As the result,
it becomes the NestedLoopJoin after the 2nd round.
This patch is a fix for it.
Change-Id: Id25c85b7fadbb6bb969d0d94a51c60ac2573938e
Reviewed-on: https://asterix-gerrit.ics.uci.edu/285
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Pouria Pirzadeh <pouria.pirzadeh@gmail.com>
diff --git a/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java b/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
index c03f474..0494288 100644
--- a/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
+++ b/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
@@ -370,14 +370,6 @@
private BuildAndPartitionTaskState state;
private ByteBuffer rPartbuff = ctx.allocateFrame();
- private ITuplePartitionComputerFamily hpcf0 = new FieldHashPartitionComputerFamily(probeKeys,
- hashFunctionGeneratorFactories);
- private ITuplePartitionComputerFamily hpcf1 = new FieldHashPartitionComputerFamily(buildKeys,
- hashFunctionGeneratorFactories);
-
- private ITuplePartitionComputer hpcRep0;
- private ITuplePartitionComputer hpcRep1;
-
@Override
public void open() throws HyracksDataException {
state = (BuildAndPartitionTaskState) ctx.getStateObject(new TaskId(new ActivityId(getOperatorId(),
@@ -404,8 +396,6 @@
state.hybridHJ.closeProbe(writer);
BitSet partitionStatus = state.hybridHJ.getPartitionStatus();
- hpcRep0 = new RepartitionComputerFamily(state.numOfPartitions, hpcf0).createPartitioner(0);
- hpcRep1 = new RepartitionComputerFamily(state.numOfPartitions, hpcf1).createPartitioner(0);
rPartbuff.clear();
for (int pid = partitionStatus.nextSetBit(0); pid >= 0; pid = partitionStatus.nextSetBit(pid + 1)) {
@@ -457,7 +447,7 @@
"Trying to join an empty partition. Invalid table size for inMemoryHashJoin.");
}
//Build Side is smaller
- applyInMemHashJoin(buildKeys, probeKeys, tabSize, probeRd, buildRd, hpcRep0, hpcRep1,
+ applyInMemHashJoin(buildKeys, probeKeys, tabSize, probeRd, buildRd, probeHpc, buildHpc,
buildSideReader, probeSideReader, false, pid); //checked-confirmed
} else { //Case 1.2 - InMemHJ with Role Reversal
LOGGER.fine("\t>>>Case 1.2. (NoIsLeftOuter || probe<build) AND ApplyInMemHJ WITH RoleReversal - [Level "
@@ -469,7 +459,7 @@
"Trying to join an empty partition. Invalid table size for inMemoryHashJoin.");
}
//Probe Side is smaller
- applyInMemHashJoin(probeKeys, buildKeys, tabSize, buildRd, probeRd, hpcRep1, hpcRep0,
+ applyInMemHashJoin(probeKeys, buildKeys, tabSize, buildRd, probeRd, buildHpc, probeHpc,
probeSideReader, buildSideReader, true, pid); //checked-confirmed
}
}