Cassandra node.js ドライバーで奇妙な問題が発生しています。特定のパーティションからデータを選択しようとすると、このエラーが発生します。
Error: There was an problem while parsing streaming frame, opcode 8
at DriverInternalError.DriverError (C:\Temp\cassandra_test\node_modules\cassandra-driver\lib\errors.js:14:19)
at new DriverInternalError (C:\Temp\cassandra_test\node_modules\cassandra-driver\lib\errors.js:68:30)
at Parser._transform (C:\Temp\cassandra_test\node_modules\cassandra-driver\lib\streams.js:149:16)
at Parser.Transform._read (_stream_transform.js:167:10)
at Parser.Transform._write (_stream_transform.js:155:12)
at doWrite (_stream_writable.js:307:12)
at writeOrBuffer (_stream_writable.js:293:5)
at Parser.Writable.write (_stream_writable.js:220:11)
at Protocol.ondata (_stream_readable.js:556:20)
at emitOne (events.js:96:13)
name: 'DriverInternalError',
stack: 'Error: There was an problem while parsing streaming frame, opcode 8\n at DriverInternalError.DriverError (C:\\Temp\\cassandra_test\\node_modules\\cassandra-driver\\lib\\errors.js:14:19)\n at new DriverInternalError (C:\\Temp\\cassandra_test\\node_modules\\cassandra-driver\\lib\\errors.js:68:30)\n at Parser._transform (C:\\Temp\\cassandra_test\\node_modules\\cassandra-driver\\lib\\streams.js:149:16)\n at Parser.Transform._read (_stream_transform.js:167:10)\n at Parser.Transform._write (_stream_transform.js:155:12)\n at doWrite (_stream_writable.js:307:12)\n at writeOrBuffer (_stream_writable.js:293:5)\n at Parser.Writable.write (_stream_writable.js:220:11)\n at Protocol.ondata (_stream_readable.js:556:20)\n at emitOne (events.js:96:13)',
message: 'There was an problem while parsing streaming frame, opcode 8',
info: 'Represents a bug inside the driver or in a Cassandra host.',
ここには、いくつかの非常に奇妙な動作があります。
fetchSize
小さいsでは発生しません。たとえば、フェッチ サイズを 312 以上にすると一貫してエラーが発生しますが、フェッチ サイズを 311 にすると毎回うまくいきます。- 一部のパーティション キーでのみ発生します。これまでのところ、最近追加されたキーに影響しているようです。
- 1 つのテーブル内で、のブレーク ポイント
fetchSize
は一貫しています。SELECT * FROM TableX WHERE myKey = value1
たとえば、 orを実行すると、両方とも240 でSELECT * FROM TableX WHERE myKey = value2
エラーが発生し始めます。fetchSize
しかし のTableY
場合、制限は 284 かもしれません。
私はここで本当に途方に暮れています。単一のパーティションから返される行が多すぎることに関係があるのではないかと思いますが、他のパーティションから大量のデータを取得できます (たとえば、fetchSize
ほとんどのパーティションで 20000 で問題なく動作します)。
問題を再現するための簡単なコードは次のとおりです。
var cassandra = require('cassandra-driver')
var client = new cassandra.Client({ contactPoints: ['node1', 'node2', 'node3'], keyspace: 'ks' });
var query = 'SELECT * FROM TableX WHERE myKey = :value';
client.eachRow(query, { value: 'someValue' }, { prepare: true, fetchSize: 500 }, function(n, row) {
console.log(row);
}, function(err) {
console.log(err)
});