diff --git a/src/tools/Fsck.java b/src/tools/Fsck.java index 9f6646e8c7..02e39a2be2 100644 --- a/src/tools/Fsck.java +++ b/src/tools/Fsck.java @@ -894,6 +894,10 @@ private boolean fsckFloat(final DP dp) throws Exception { } else { return true; } + } else { + if (compact_row || options.compact()) { + appendDP(qual, value, value.length); + } } return false; } diff --git a/test/tools/TestFsck.java b/test/tools/TestFsck.java index 807142f433..94aa3b64f1 100644 --- a/test/tools/TestFsck.java +++ b/test/tools/TestFsck.java @@ -2937,6 +2937,63 @@ public void compactedAndSingleWSameTSFix() throws Exception { assertNull(storage.getColumn(ROW, qual4)); } + @Test + public void compactedAndSingleWSameTSFloat() throws Exception { + when(options.resolveDupes()).thenReturn(true); + + final byte[] qual1 = { 0x0, 0x0B }; + final byte[] val1 = Bytes.fromInt(Float.floatToRawIntBits(500.8F)); + final byte[] qual2 = { 0x0, 0x20 }; + final byte[] val2 = { 5 }; + final byte[] qual3 = { 0x0, 0x30 }; + final byte[] val3 = { 6 }; + final byte[] qual4 = { 0x0, 0x0B }; + final byte[] val4 = Bytes.fromInt(Float.floatToRawIntBits(500.8F)); + storage.addColumn(ROW, + MockBase.concatByteArrays(qual1, qual2, qual3), + MockBase.concatByteArrays(val1, val2, val3, new byte[] { 0 })); + storage.addColumn(ROW, qual4, val4); + final Fsck fsck = new Fsck(tsdb, options); + fsck.runFullTable(); + assertEquals(2, fsck.kvs_processed.get()); + assertEquals(1, fsck.duplicates.get()); + assertEquals(1, fsck.totalErrors()); + assertEquals(1, fsck.correctable()); + storage.dumpToSystemOut(); + assertArrayEquals(MockBase.concatByteArrays(val1, val2, val3, new byte[] { 0 }), + storage.getColumn(ROW, MockBase.concatByteArrays(qual1, qual2, qual3))); + assertArrayEquals(val4, storage.getColumn(ROW, qual4)); + } + + @Test + public void compactedAndSingleWSameTSFloatFix() throws Exception { + when(options.fix()).thenReturn(true); + when(options.resolveDupes()).thenReturn(true); + + final byte[] qual1 = { 0x0, 0x0B }; + final byte[] val1 = Bytes.fromInt(Float.floatToRawIntBits(500.8F)); + final byte[] qual2 = { 0x0, 0x20 }; + final byte[] val2 = { 5 }; + final byte[] qual3 = { 0x0, 0x30 }; + final byte[] val3 = { 6 }; + final byte[] qual4 = { 0x0, 0x0B }; + final byte[] val4 = Bytes.fromInt(Float.floatToRawIntBits(500.8F)); + storage.addColumn(ROW, + MockBase.concatByteArrays(qual1, qual2, qual3), + MockBase.concatByteArrays(val1, val2, val3, new byte[] { 0 })); + storage.addColumn(ROW, qual4, val4); + final Fsck fsck = new Fsck(tsdb, options); + fsck.runFullTable(); + assertEquals(2, fsck.kvs_processed.get()); + assertEquals(1, fsck.duplicates.get()); + assertEquals(1, fsck.totalErrors()); + assertEquals(1, fsck.correctable()); + storage.dumpToSystemOut(); + assertArrayEquals(MockBase.concatByteArrays(val1, val2, val3, new byte[] { 0 }), + storage.getColumn(ROW, MockBase.concatByteArrays(qual1, qual2, qual3))); + assertNull(storage.getColumn(ROW, qual4)); + } + @Test public void compactedAndSingleWSameTSLWW() throws Exception { when(options.lastWriteWins()).thenReturn(true); @@ -3460,7 +3517,7 @@ public void tripleCompactedColumnsWSameTSLWWFix() throws Exception { assertNull(storage.getColumn(ROW, MockBase.concatByteArrays(qual3, qual4))); assertNull(storage.getColumn(ROW, MockBase.concatByteArrays(qual5, qual6))); } - + // MULTIPLE ISSUES ---------------------------- // check for interactions between flags, e.g. compact + delete bad values // + resolve duplicates, etc