IGNITE-22041 Correct inline size calculation for indexes (#3622)
diff --git a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/InlineUtils.java b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/InlineUtils.java
index e6eb2f5..515c107 100644
--- a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/InlineUtils.java
+++ b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/InlineUtils.java
@@ -83,6 +83,8 @@
return Math.min(MAX_VARLEN_INLINE_SIZE, ((VarlenNativeType) nativeType).length());
case DECIMAL:
+ return Short.BYTES + BIG_NUMBER_INLINE_SIZE;
+
case NUMBER:
return BIG_NUMBER_INLINE_SIZE;
diff --git a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/io/HashIndexTreeIo.java b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/io/HashIndexTreeIo.java
index a6fe0ff..afba7d7 100644
--- a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/io/HashIndexTreeIo.java
+++ b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/io/HashIndexTreeIo.java
@@ -64,7 +64,7 @@
public interface HashIndexTreeIo {
/** Item size without index columns in bytes. */
int ITEM_SIZE_WITHOUT_COLUMNS = Integer.BYTES // Index columns hash.
- + Short.SIZE // Inlined index columns size.
+ + Short.BYTES // Inlined index columns size.
+ PARTITIONLESS_LINK_SIZE_BYTES // Index columns link.
+ 2 * Long.BYTES; // Row ID.
diff --git a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/io/SortedIndexTreeIo.java b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/io/SortedIndexTreeIo.java
index 89bcbd9..f677d8a 100644
--- a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/io/SortedIndexTreeIo.java
+++ b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/io/SortedIndexTreeIo.java
@@ -56,7 +56,7 @@
*/
public interface SortedIndexTreeIo {
/** Item size without index columns in bytes. */
- int ITEM_SIZE_WITHOUT_COLUMNS = Short.SIZE // Inlined index columns size.
+ int ITEM_SIZE_WITHOUT_COLUMNS = Short.BYTES // Inlined index columns size.
+ PARTITIONLESS_LINK_SIZE_BYTES // Index columns link.
+ 2 * Long.BYTES; // Row ID.
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/InlineUtilsTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/InlineUtilsTest.java
index ee92155..08060da 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/InlineUtilsTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/InlineUtilsTest.java
@@ -99,10 +99,10 @@
// Variable length type checking.
- assertEquals(BIG_NUMBER_INLINE_SIZE, inlineSize(nativeType = NativeTypes.decimalOf(1, 1)));
+ assertEquals(2 + BIG_NUMBER_INLINE_SIZE, inlineSize(nativeType = NativeTypes.decimalOf(1, 1)));
nativeTypeSpecs.remove(nativeType.spec());
- assertEquals(BIG_NUMBER_INLINE_SIZE, inlineSize(nativeType = NativeTypes.decimalOf(100, 1)));
+ assertEquals(2 + BIG_NUMBER_INLINE_SIZE, inlineSize(nativeType = NativeTypes.decimalOf(100, 1)));
nativeTypeSpecs.remove(nativeType.spec());
assertEquals(7, inlineSize(nativeType = NativeTypes.stringOf(7)));