Skip to content

Commit 9fe0b72

Browse files
committed
change consistency check failure on resize factor to force-promote in X1 case
1 parent 58e07e6 commit 9fe0b72

4 files changed

Lines changed: 7 additions & 17 deletions

File tree

src/main/java/com/yahoo/sketches/theta/DirectQuickSelectSketch.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,7 @@ static DirectQuickSelectSketch writableWrap(final WritableMemory srcMem, final l
161161
final ResizeFactor myRF = ResizeFactor.getRF(lgRF);
162162
if ((myRF == ResizeFactor.X1)
163163
&& (lgArrLongs != Util.startingSubMultiple(lgNomLongs + 1, myRF, MIN_LG_ARR_LONGS))) {
164-
throw new SketchesArgumentException("Possible corruption: ResizeFactor X1, but provided "
165-
+ "array too small for sketch size");
164+
insertLgResizeFactor(memObj, memAdd, ResizeFactor.X2.lg());
166165
}
167166

168167
final DirectQuickSelectSketch dqss =

src/main/java/com/yahoo/sketches/theta/HeapQuickSelectSketch.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,13 @@ static HeapQuickSelectSketch heapifyInstance(final Memory srcMem, final long see
115115

116116
final float p = extractP(memObj, memAdd); //bytes 12-15
117117
final int lgRF = extractLgResizeFactor(memObj, memAdd); //byte 0
118-
final ResizeFactor myRF = ResizeFactor.getRF(lgRF);
118+
ResizeFactor myRF = ResizeFactor.getRF(lgRF);
119119
final int familyID = extractFamilyID(memObj, memAdd);
120120
final Family family = Family.idToFamily(familyID);
121121

122122
if (myRF == ResizeFactor.X1
123123
&& lgArrLongs != Util.startingSubMultiple(lgNomLongs + 1, myRF, MIN_LG_ARR_LONGS)) {
124-
throw new SketchesArgumentException("Possible corruption: ResizeFactor X1, but provided "
125-
+ "array too small for sketch size");
124+
myRF = ResizeFactor.X2;
126125
}
127126

128127
final HeapQuickSelectSketch hqss = new HeapQuickSelectSketch(lgNomLongs, seed, p, myRF,

src/test/java/com/yahoo/sketches/theta/DirectQuickSelectSketchTest.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -723,12 +723,8 @@ public void checkCorruptRFWithInsufficientArray() {
723723
usk.update(0);
724724

725725
insertLgResizeFactor(mem.getArray(), mem.getCumulativeOffset(0L), 0); // corrupt RF: X1
726-
try {
727-
DirectQuickSelectSketch.writableWrap(mem, DEFAULT_UPDATE_SEED);
728-
fail("Expected SketchesArgumentException");
729-
} catch (SketchesArgumentException e) {
730-
//Pass
731-
}
726+
UpdateSketch dqss = DirectQuickSelectSketch.writableWrap(mem, DEFAULT_UPDATE_SEED);
727+
assertEquals(dqss.getResizeFactor(), ResizeFactor.X2); // force-promote to X2
732728
}
733729

734730
@Test

src/test/java/com/yahoo/sketches/theta/HeapQuickSelectSketchTest.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -602,12 +602,8 @@ public void checkMemSerDeExceptions() {
602602

603603
// force ResizeFactor.X1, but allocated capacity too small
604604
insertLgResizeFactor(mem.getArray(), mem.getCumulativeOffset(0L), ResizeFactor.X1.lg());
605-
try {
606-
HeapQuickSelectSketch.heapifyInstance(mem, DEFAULT_UPDATE_SEED);
607-
fail();
608-
} catch (SketchesArgumentException e) {
609-
//expected
610-
}
605+
UpdateSketch hqss = HeapQuickSelectSketch.heapifyInstance(mem, DEFAULT_UPDATE_SEED);
606+
assertEquals(hqss.getResizeFactor(), ResizeFactor.X2); // force-promote to X2
611607
}
612608

613609
private static void tryBadMem(WritableMemory mem, int byteOffset, int byteValue) {

0 commit comments

Comments
 (0)