Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-13669

Error when starting cassandra: Unable to make UUID from 'aa' (SASI index)

    Details

    • Type: Bug
    • Status: Open
    • Priority: Critical
    • Resolution: Unresolved
    • Fix Version/s: 3.11.x
    • Component/s: sasi
    • Labels:
    • Environment:

      Tested on:

      • macOS Sierra 10.12.5
      • Ubuntu 14.04.5 LTS

      Description

      Recently I experienced a problem that prevents me to restart cassandra.
      I narrowed it down to SASI Index when added on uuid field.

      Steps to reproduce:
      1. start cassandra (./bin/cassandra -f)
      2. create keyspace, table, index and add data:

      CREATE KEYSPACE testkeyspace
      WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} 
                 AND durable_writes = true;
      
      use testkeyspace ;
      
      CREATE TABLE testtable (
         col1 uuid,
         col2 uuid,
         ts timeuuid,
         col3 uuid,
         PRIMARY KEY((col1, col2), ts) ) with clustering order by (ts desc);
      
      CREATE CUSTOM INDEX col3_testtable_idx ON testtable(col3)
      USING 'org.apache.cassandra.index.sasi.SASIIndex'
      WITH OPTIONS = {'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', 'mode': 'PREFIX'};
      
      INSERT INTO testtable(col1, col2, ts, col3)
      VALUES(898e0014-6161-11e7-b9b7-238ea83bd70b,
                     898e0014-6161-11e7-b9b7-238ea83bd70b,
                     now(), 898e0014-6161-11e7-b9b7-238ea83bd70b);
      

      3. restart cassandra

      It crashes with an error (sorry it's huge):

      DEBUG 09:09:20 Writing Memtable-testtable@1005362073(0.075KiB serialized bytes, 1 ops, 0%/0% of on/off-heap limit), flushed range = (min(-9223372036854775808), max(9223372036854775807)]
      ERROR 09:09:20 Exception in thread Thread[PerDiskMemtableFlushWriter_0:1,5,main]
      org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      	at org.apache.cassandra.db.marshal.UUIDType.fromString(UUIDType.java:118) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer.hasNext(StandardAnalyzer.java:168) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter$Index.add(PerSSTableIndexWriter.java:208) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter.lambda$nextUnfilteredCluster$0(PerSSTableIndexWriter.java:132) ~[apache-cassandra-3.9.jar:3.9]
      	at java.util.Collections$SingletonSet.forEach(Collections.java:4767) ~[na:1.8.0_131]
      	at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter.nextUnfilteredCluster(PerSSTableIndexWriter.java:119) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.ColumnIndex.lambda$add$1(ColumnIndex.java:233) ~[apache-cassandra-3.9.jar:3.9]
      	at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_131]
      	at org.apache.cassandra.db.ColumnIndex.add(ColumnIndex.java:233) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.ColumnIndex.buildRowIndex(ColumnIndex.java:107) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.io.sstable.format.big.BigTableWriter.append(BigTableWriter.java:169) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.io.sstable.SimpleSSTableMultiWriter.append(SimpleSSTableMultiWriter.java:48) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:458) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.Memtable$FlushRunnable.call(Memtable.java:493) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.Memtable$FlushRunnable.call(Memtable.java:380) ~[apache-cassandra-3.9.jar:3.9]
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_131]
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_131]
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
      	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
      Exception (java.lang.RuntimeException) encountered during startup: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      at org.apache.cassandra.utils.Throwables.maybeFail(Throwables.java:51)
      ERROR 09:09:20 Exception encountered during startup
      java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      	at org.apache.cassandra.utils.Throwables.maybeFail(Throwables.java:51) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:391) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.commitlog.CommitLogReplayer.blockForWrites(CommitLogReplayer.java:168) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.commitlog.CommitLog.recoverFiles(CommitLog.java:188) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.commitlog.CommitLog.recoverSegmentsOnDisk(CommitLog.java:167) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:323) [apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601) [apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:730) [apache-cassandra-3.9.jar:3.9]
      Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      	at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:1.8.0_131]
      	at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[na:1.8.0_131]
      	at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:384) ~[apache-cassandra-3.9.jar:3.9]
      	... 6 common frames omitted
      Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      	at org.apache.cassandra.utils.Throwables.maybeFail(Throwables.java:51) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:391) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.ColumnFamilyStore$Flush.flushMemtable(ColumnFamilyStore.java:1122) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.ColumnFamilyStore$Flush.run(ColumnFamilyStore.java:1084) ~[apache-cassandra-3.9.jar:3.9]
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_131]
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_131]
      	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_131]
      Caused by: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      	at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:1.8.0_131]
      	at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[na:1.8.0_131]
      	at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:384) ~[apache-cassandra-3.9.jar:3.9]
      	... 5 common frames omitted
      Caused by: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      	at org.apache.cassandra.db.marshal.UUIDType.fromString(UUIDType.java:118) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer.hasNext(StandardAnalyzer.java:168) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter$Index.add(PerSSTableIndexWriter.java:208) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter.lambda$nextUnfilteredCluster$0(PerSSTableIndexWriter.java:132) ~[apache-cassandra-3.9.jar:3.9]
      	at java.util.Collections$SingletonSet.forEach(Collections.java:4767) ~[na:1.8.0_131]
      	at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter.nextUnfilteredCluster(PerSSTableIndexWriter.java:119) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.ColumnIndex.lambda$add$1(ColumnIndex.java:233) ~[apache-cassandra-3.9.jar:3.9]
      	at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_131]
      	at org.apache.cassandra.db.ColumnIndex.add(ColumnIndex.java:233) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.ColumnIndex.buildRowIndex(ColumnIndex.java:107) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.io.sstable.format.big.BigTableWriter.append(BigTableWriter.java:169) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.io.sstable.SimpleSSTableMultiWriter.append(SimpleSSTableMultiWriter.java:48) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:458) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.Memtable$FlushRunnable.call(Memtable.java:493) ~[apache-cassandra-3.9.jar:3.9]
      	at org.apache.cassandra.db.Memtable$FlushRunnable.call(Memtable.java:380) ~[apache-cassandra-3.9.jar:3.9]
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_131]
      	... 3 common frames omitted
      at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:391)
      at org.apache.cassandra.db.commitlog.CommitLogReplayer.blockForWrites(CommitLogReplayer.java:168)
      at org.apache.cassandra.db.commitlog.CommitLog.recoverFiles(CommitLog.java:188)
      at org.apache.cassandra.db.commitlog.CommitLog.recoverSegmentsOnDisk(CommitLog.java:167)
      at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:323)
      at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601)
      at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:730)
      Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      at java.util.concurrent.FutureTask.report(FutureTask.java:122)
      at java.util.concurrent.FutureTask.get(FutureTask.java:192)
      at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:384)
      ... 6 more
      Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      at org.apache.cassandra.utils.Throwables.maybeFail(Throwables.java:51)
      at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:391)
      at org.apache.cassandra.db.ColumnFamilyStore$Flush.flushMemtable(ColumnFamilyStore.java:1122)
      at org.apache.cassandra.db.ColumnFamilyStore$Flush.run(ColumnFamilyStore.java:1084)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:748)
      Caused by: java.util.concurrent.ExecutionException: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      at java.util.concurrent.FutureTask.report(FutureTask.java:122)
      at java.util.concurrent.FutureTask.get(FutureTask.java:192)
      at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:384)
      ... 5 more
      Caused by: org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      at org.apache.cassandra.db.marshal.UUIDType.fromString(UUIDType.java:118)
      at org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer.hasNext(StandardAnalyzer.java:168)
      at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter$Index.add(PerSSTableIndexWriter.java:208)
      at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter.lambda$nextUnfilteredCluster$0(PerSSTableIndexWriter.java:132)
      at java.util.Collections$SingletonSet.forEach(Collections.java:4767)
      at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter.nextUnfilteredCluster(PerSSTableIndexWriter.java:119)
      at org.apache.cassandra.db.ColumnIndex.lambda$add$1(ColumnIndex.java:233)
      at java.lang.Iterable.forEach(Iterable.java:75)
      at org.apache.cassandra.db.ColumnIndex.add(ColumnIndex.java:233)
      at org.apache.cassandra.db.ColumnIndex.buildRowIndex(ColumnIndex.java:107)
      at org.apache.cassandra.io.sstable.format.big.BigTableWriter.append(BigTableWriter.java:169)
      at org.apache.cassandra.io.sstable.SimpleSSTableMultiWriter.append(SimpleSSTableMultiWriter.java:48)
      at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:458)
      at org.apache.cassandra.db.Memtable$FlushRunnable.call(Memtable.java:493)
      at org.apache.cassandra.db.Memtable$FlushRunnable.call(Memtable.java:380)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      ... 3 more
      

      When I do "nodetool flush" I also get:

      $  ./bin/nodetool flush
      objc[35941]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/java (0x1052a34c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10536b4e0). One of the two will be used. Which one is undefined.
      error: Unable to make UUID from 'aa'
      -- StackTrace --
      org.apache.cassandra.serializers.MarshalException: Unable to make UUID from 'aa'
      at org.apache.cassandra.db.marshal.UUIDType.fromString(UUIDType.java:118)
      at org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer.hasNext(StandardAnalyzer.java:168)
      at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter$Index.add(PerSSTableIndexWriter.java:208)
      at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter.lambda$nextUnfilteredCluster$0(PerSSTableIndexWriter.java:132)
      at java.util.Collections$SingletonSet.forEach(Collections.java:4767)
      at org.apache.cassandra.index.sasi.disk.PerSSTableIndexWriter.nextUnfilteredCluster(PerSSTableIndexWriter.java:119)
      at org.apache.cassandra.db.ColumnIndex.lambda$add$1(ColumnIndex.java:233)
      at java.lang.Iterable.forEach(Iterable.java:75)
      at org.apache.cassandra.db.ColumnIndex.add(ColumnIndex.java:233)
      at org.apache.cassandra.db.ColumnIndex.buildRowIndex(ColumnIndex.java:107)
      at org.apache.cassandra.io.sstable.format.big.BigTableWriter.append(BigTableWriter.java:169)
      at org.apache.cassandra.io.sstable.SimpleSSTableMultiWriter.append(SimpleSSTableMultiWriter.java:48)
      at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:458)
      at org.apache.cassandra.db.Memtable$FlushRunnable.call(Memtable.java:493)
      at org.apache.cassandra.db.Memtable$FlushRunnable.call(Memtable.java:380)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:748)
      

      Any ideas how to solve it?
      I can keep col3 as text, I figured it out, but I already have bunch of data on production and I basically can't do anything with any of nodes, because I won't be able to start them again.

      Thanks,
      Lukasz

        Activity

        Hide
        mshuler Michael Shuler added a comment -

        Reproduced on 3.11.0 release sha, cassandra-3.11 branch HEAD (commit 594f1c1d), and trunk branch HEAD (commit eb76692).

        Show
        mshuler Michael Shuler added a comment - Reproduced on 3.11.0 release sha, cassandra-3.11 branch HEAD (commit 594f1c1d), and trunk branch HEAD (commit eb76692).
        Hide
        loucash Lukasz Biedrycki added a comment -

        One way to avoid this error is to delete faulty index before stopping a node.

        Show
        loucash Lukasz Biedrycki added a comment - One way to avoid this error is to delete faulty index before stopping a node.
        Hide
        loucash Lukasz Biedrycki added a comment -

        Is there any other recovery other than deleting commit log? When commit log is deleted I loose (almost) all the data from a table.

        Show
        loucash Lukasz Biedrycki added a comment - Is there any other recovery other than deleting commit log? When commit log is deleted I loose (almost) all the data from a table.

          People

          • Assignee:
            Unassigned
            Reporter:
            loucash Lukasz Biedrycki
          • Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:

              Development