Skip to content

Commit 98a14e4

Browse files
author
Shreyans Tyagi
committed
Avoid infinite loop in case a equality filter for a key is requested from a query. Query hangs otherwise
1 parent dae6546 commit 98a14e4

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

src/main/scala/org/apache/spark/sql/hbase/HBaseCriticalPoint.scala

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.apache.spark.sql.types._
2323

2424
import scala.collection.mutable
2525
import scala.collection.mutable.ArrayBuffer
26+
import scala.util.control.Breaks._
2627

2728
object CriticalPointType extends Enumeration {
2829
type CriticalPointType = Value
@@ -502,20 +503,23 @@ object RangeCriticalPoint {
502503
var newLimit = limit
503504
var cmp = 0
504505
var prevEq = eq
505-
while (incr * (newLimit - prevEq) >= 0) {
506-
if (incr * (newLimit - prevEq) < threshold) {
507-
// linear search
508-
mid = prevEq + incr
509-
while (incr * (newLimit - mid) > 0 && cmp == 0) {
510-
prevEq = mid
511-
mid = mid + incr
506+
breakable {
507+
while (incr * (newLimit - prevEq) >= 0) {
508+
if (incr * (newLimit - prevEq) < threshold) {
509+
// linear search
510+
mid = prevEq + incr
511+
while (incr * (newLimit - mid) > 0 && cmp == 0) {
512+
prevEq = mid
513+
mid = mid + incr
514+
cmp = comp(src, tgt(mid))
515+
}
516+
break
517+
} else {
518+
mid = (prevEq + newLimit) / 2
512519
cmp = comp(src, tgt(mid))
520+
if (cmp == 0) prevEq = mid
521+
else newLimit = mid
513522
}
514-
} else {
515-
mid = (prevEq + newLimit) / 2
516-
cmp = comp(src, tgt(mid))
517-
if (cmp == 0) prevEq = mid
518-
else newLimit = mid
519523
}
520524
}
521525
prevEq
@@ -577,7 +581,7 @@ object RangeCriticalPoint {
577581
} else {
578582
prevSmaller = binarySearchEquality(mid, prevLarger, src, tgt, threshold, comp)
579583
}
580-
right = left // break the outer loop
584+
right = left - 1 // break the outer loop
581585
} else if (cmp < 0) {
582586
prevLarger = mid
583587
right = mid - 1

0 commit comments

Comments
 (0)