Cassandra의 한 시점에서 OOM 예외가 발생했습니다. 내 것은 겸손하게 작동하는 서버에서 실행되는 단일 인스턴스이며, 일부로드 테스트를 수행 했으므로 거기에 놀랄 일이 아닙니다.Cassandra AssertionError
그러나 이후에 인스턴스를 사용할 수 없었습니다. 키 공간을 나열하면 "시스템"만 표시됩니다. 그러나 내가 테스트 한 키 공간을 다시 만들려고 할 때, Hector는 "모든 호스트 풀을 표시했습니다. 재시도 부담이 클라이언트에게 밀렸습니다."라고 대답합니다. 메시지와 카산드라 로그에 다음 스택 추적이 있습니다
ERROR [MigrationStage:1] 2012-04-27 20:47:00,863 AbstractCassandraDaemon.java (line 134) Exception in thread Thread[MigrationStage:1,5,main]
java.lang.AssertionError
at org.apache.cassandra.db.DefsTable.updateKeyspace(DefsTable.java:441)
at org.apache.cassandra.db.DefsTable.mergeKeyspaces(DefsTable.java:339)
at org.apache.cassandra.db.DefsTable.mergeSchema(DefsTable.java:269)
at org.apache.cassandra.service.MigrationManager$1.call(MigrationManager.java:214)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
ERROR [Thrift:9] 2012-04-27 20:47:00,864 CustomTThreadPoolServer.java (line 204) Error occurred during processing of message.
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.AssertionError
at org.apache.cassandra.utils.FBUtilities.waitOnFuture(FBUtilities.java:372)
at org.apache.cassandra.service.MigrationManager.announce(MigrationManager.java:191)
at org.apache.cassandra.service.MigrationManager.announceNewKeyspace(MigrationManager.java:129)
at org.apache.cassandra.thrift.CassandraServer.system_add_keyspace(CassandraServer.java:987)
at org.apache.cassandra.thrift.Cassandra$Processor$system_add_keyspace.getResult(Cassandra.java:3370)
at org.apache.cassandra.thrift.Cassandra$Processor$system_add_keyspace.getResult(Cassandra.java:3358)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:186)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.concurrent.ExecutionException: java.lang.AssertionError
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at org.apache.cassandra.utils.FBUtilities.waitOnFuture(FBUtilities.java:368)
... 11 more
Caused by: java.lang.AssertionError
at org.apache.cassandra.db.DefsTable.updateKeyspace(DefsTable.java:441)
at org.apache.cassandra.db.DefsTable.mergeKeyspaces(DefsTable.java:339)
at org.apache.cassandra.db.DefsTable.mergeSchema(DefsTable.java:269)
at org.apache.cassandra.service.MigrationManager$1.call(MigrationManager.java:214)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
... 3 more
오래된 키 스페이스는 데이터 디렉토리에 여전히, 그래서 그것을 이동을하지만 도움이되지 않았다. 그것은 시스템 데이터가 여전히 어딘가에 잘못된 참조가있는 것 같습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까?
편집 : CLI에서 "설명 클러스터;" "시스템"키 공간만을 설명합니다. 하지만 "시스템을 사용할 때" 그런 다음 "schema_keyspaces를 나열하십시오." 다음이 표시됩니다.
Using default limit of 100
-------------------
RowKey: mango
=> (column=durable_writes, value=true, timestamp=29127788177516974)
=> (column=name, value=mango, timestamp=29127788177516974)
=> (column=strategy_class, value=org.apache.cassandra.locator.SimpleStrategy, timestamp=29127788177516974)
=> (column=strategy_options, value={"replication_factor":"1"}, timestamp=29127788177516974)
1 Row Returned.
Elapsed time: 1107 msec(s).
"mango"는 더 이상 액세스 할 수없는 키 공간이지만 어느 정도는 여전히 존재합니다. 그것을 고칠 방법이 있습니까?
커밋 로그, 데이터 및 saved_caches의 모든 항목을 삭제하고 다시 시작했습니다. 그래서, 결론은 클러스터의 다른 모든 것을 버리지 않고 키 공간을 복구 할 수 없다는 것입니다. 따라서, 두 답이 모두 정확합니다. 다른 상황에서 유용 할 수있는 좀 더 많은 정보를 제공했기 때문에 samarth를 그러한 것으로 표시했습니다. – mlohbihler
카산드라 클리에서 모든 작업을하고 계십니까? 이 문제를 재현하여 단계별로 시도해 볼 수 있습니까? – samarth