Я использую узел Cassandra (один узел) в системе разработки и некоторое время назад при запуске «сильных тестов» (как в очень быстрых тестах на запись) у меня появилось много ошибок. Они видят в них вопросы по всем местам и не дают никаких реальных ответов только о том, что вы просто не можете идти слишком быстро. Хорошо, я в целом в порядке с этим.apache :: бережливость :: транспорт :: TTransportException - Кассандра временами из-за мусора?
Тем не менее, сегодня я использовал систему, как и в процессе производства, и получаю таблицу, которая генерирует ошибку тайм-аута. Это в режиме READ (частичная запись в ошибке находится в сокете, а не в базе данных).
Thrift: Tue Feb 4 01:46:44 2014 TSocket::write_partial() send() <Host: 127.0.0.1 Port: 9160>Broken pipe
terminate called after throwing an instance of 'apache::thrift::transport::TTransportException'
what(): write() send(): Broken pipe
Большая проблема в этом случае заключается в том, что я просто не мог получить доступ к строке в одной из моих таблиц. Попытка доступа к этой строке всегда будет таймаутом. Я перезапустил узел, подождал некоторое время, никаких изменений. Строка была только что сделана.
У кого-то были проблемы с этим раньше? Если да, у вас есть способ исправить это? Эта конкретная строка, которую я мог бы восстановить, но что произойдет в кластере со многими узлами? Может ли строка на одном узле решить разорвать всю систему? (что одна строка разбивала мою систему разработки!) Если у вас есть идеи, я бы хотел услышать о них, так что в следующий раз, когда это произойдет, я смогу заглянуть в исправление, а не взорвать всю базу данных и создать новую (я мог бы просто удалить таблицы и перезапуск свежей, нет необходимости удалять весь кластер, но все же ..., но это не является решением проблемы в системе производства.)
======== UPDATE
Ah ! Nevermind, я искал неправильный файл журнала (системы разработки, я скажу вам ...). Ошибка - исключение EOFException.
ERROR [ReadStage:29174] 2014-02-04 01:17:00,587 CassandraDaemon.java (line 185) Exception in thread Thread[ReadStage:29174,5,main]
java.io.IOError: java.io.EOFException
at org.apache.cassandra.db.Column$1.computeNext(Column.java:79)
at org.apache.cassandra.db.Column$1.computeNext(Column.java:64)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
at org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNext(SimpleSliceReader.java:88)
at org.apache.cassandra.db.columniterator.SimpleSliceReader.computeNext(SimpleSliceReader.java:37)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
at org.apache.cassandra.db.columniterator.SSTableSliceIterator.hasNext(SSTableSliceIterator.java:82)
at org.apache.cassandra.db.filter.QueryFilter$2.getNext(QueryFilter.java:157)
at org.apache.cassandra.db.filter.QueryFilter$2.hasNext(QueryFilter.java:140)
at org.apache.cassandra.utils.MergeIterator$OneToOne.computeNext(MergeIterator.java:200)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
at org.apache.cassandra.db.filter.SliceQueryFilter.collectReducedColumns(SliceQueryFilter.java:189)
at org.apache.cassandra.db.filter.QueryFilter.collateColumns(QueryFilter.java:122)
at org.apache.cassandra.db.filter.QueryFilter.collateOnDiskAtom(QueryFilter.java:80)
at org.apache.cassandra.db.filter.QueryFilter.collateOnDiskAtom(QueryFilter.java:72)
at org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:294)
at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:53)
at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1468)
at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1294)
at org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:332)
at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:65)
at org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:1365)
at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1897)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.io.EOFException
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:416)
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:394)
at org.apache.cassandra.io.util.RandomAccessReader.readBytes(RandomAccessReader.java:348)
at org.apache.cassandra.utils.ByteBufferUtil.read(ByteBufferUtil.java:392)
at org.apache.cassandra.utils.ByteBufferUtil.readWithLength(ByteBufferUtil.java:355)
at org.apache.cassandra.db.ColumnSerializer.deserializeColumnBody(ColumnSerializer.java:118)
at org.apache.cassandra.db.OnDiskAtom$Serializer.deserializeFromSSTable(OnDiskAtom.java:85)
at org.apache.cassandra.db.Column$1.computeNext(Column.java:75)
... 28 more
войти ли Cassandra ошибку, тоже? Или просто клиент? Обычно таймауты отображаются в журналах. – Ralf
Нет, я ничего не видел в журналах. Я бы предположил, что там появятся ошибки ... Я обязательно увеличу уровень журнала, если это произойдет снова, поэтому я получаю больше информации в следующий раз. –
Думаю, я слишком быстро прокомментировал! Глядя на настройку журнала, он находится на INFO, поэтому я уже получаю довольно много журналов. Дело в том, что я смотрел на старый журнал. Теперь я вижу ошибку, обновленную в вопросе. –