IGNITE-15488 Error extension about B+tree lock retry for indexes (#9400)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
index b6c2764..480413e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
@@ -23,6 +23,7 @@
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.IgniteSystemProperties;
import org.apache.ignite.failure.FailureType;
+import org.apache.ignite.internal.cache.query.index.IndexName;
import org.apache.ignite.internal.cache.query.index.SortOrder;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition;
import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings;
@@ -684,4 +685,13 @@
return -Long.compare(r1.mvccCounter(), r2.mvccCounter());
}
+
+ /** {@inheritDoc} */
+ @Override protected String lockRetryErrorMessage(String op) {
+ IndexName idxName = def.idxName();
+
+ return super.lockRetryErrorMessage(op) + " Problem with the index [cacheName=" + idxName.cacheName() +
+ ", schemaName=" + idxName.schemaName() + ", tblName=" + idxName.tableName() + ", idxName=" +
+ idxName.idxName() + ']';
+ }
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
index a03c3ee..89448a0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
@@ -3121,10 +3121,9 @@
*/
void checkLockRetry() throws IgniteCheckedException {
if (lockRetriesCnt == 0) {
- IgniteCheckedException e = new IgniteCheckedException("Maximum number of retries " +
- getLockRetries() + " reached for " + getClass().getSimpleName() + " operation " +
- "(the tree may be corrupted). Increase " + IGNITE_BPLUS_TREE_LOCK_RETRIES + " system property " +
- "if you regularly see this message (current value is " + getLockRetries() + ").");
+ String errMsg = lockRetryErrorMessage(getClass().getSimpleName());
+
+ IgniteCheckedException e = new IgniteCheckedException(errMsg);
processFailure(FailureType.CRITICAL_ERROR, e);
@@ -6186,4 +6185,20 @@
public long getMetaPageId() {
return metaPageId;
}
+
+ /**
+ * Create an error message when reaching the maximum
+ * number of repetitions to capture a lock in the B+Tree.
+ *
+ * @param op Operation name, for example: GET, PUT.
+ * @return Error message.
+ */
+ protected String lockRetryErrorMessage(String op) {
+ return "Maximum number of retries " +
+ getLockRetries() + " reached for " + op + " operation " +
+ "(the tree may be corrupted). Increase " + IGNITE_BPLUS_TREE_LOCK_RETRIES + " system property " +
+ "if you regularly see this message (current value is " + getLockRetries() + "). " +
+ getClass().getSimpleName() + " [grpName=" + grpName + ", treeName=" + name() + ", metaPageId=" +
+ U.hexLong(metaPageId) + "].";
+ }
}