case class BacktrackingException(position: Long, maxBacktrackLength: Int) extends ThinException with Product with Serializable
There is a finite limit to the distance one can backtrack which is given by the implementation's use of a finite array of finite fixed size buckets. If a vast amount of data is read in and is more than the ultimate backtrack limit (number of buckets times bucket size) in size, then that will cause data buckets to effectively spill off into parser history, and the ability to backtrack to the points in the data they stored is lost along with them. Any time there is a point-of-uncertainty to which the parser could backtrack, and then the parser advances through more data than the backtracking maximum limit, the ability to backtrack to that point of uncertainty will be lost. This will be detected, and is a fatal error (Runtime SDE).
This situation is easiest to envision if BLOB objects are involved, but is not BLOB specific. A format with a choice, then in the first branch of the choice, a group and/or array of small data items, ultimately totaling in size to more than the backtrack limit, and then a branch failure, will cause this backtracking limit error with no BLOBs being used.
There is no limit created by this module of code to the size of a any data item having to fit within JVM byte array maximums, nor the JVM memory footprint even. Only a limitation on backtracking distance is created.
It is also worth noting that it is not the act of backtracking that directly cause an error. The error only occurs when someone tries to read from a bucket that has already been released.
- Alphabetic
- By Inheritance
- BacktrackingException
- Serializable
- Product
- Equals
- ThinException
- Exception
- Throwable
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new BacktrackingException(position: Long, maxBacktrackLength: Int)
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
addSuppressed(arg0: Throwable): Unit
- Definition Classes
- Throwable
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
fillInStackTrace(): Throwable
- Definition Classes
- Throwable
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
getCause(): Throwable
- Definition Classes
- Throwable
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
getLocalizedMessage(): String
- Definition Classes
- Throwable
-
def
getMessage(): String
- Definition Classes
- ThinException → Throwable
-
def
getStackTrace(): Array[StackTraceElement]
- Definition Classes
- Throwable
-
final
def
getSuppressed(): Array[Throwable]
- Definition Classes
- Throwable
-
def
initCause(arg0: Throwable): Throwable
- Definition Classes
- Throwable
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- val maxBacktrackLength: Int
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- val position: Long
-
def
printStackTrace(arg0: PrintWriter): Unit
- Definition Classes
- Throwable
-
def
printStackTrace(arg0: PrintStream): Unit
- Definition Classes
- Throwable
-
def
printStackTrace(): Unit
- Definition Classes
- Throwable
-
def
setStackTrace(arg0: Array[StackTraceElement]): Unit
- Definition Classes
- Throwable
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- Throwable → AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()