Jestem nowicjuszem astyanax i wypróbowuję niektóre przykładowe programy i otrzymuję ten błąd. To jest prosty zapis i wygląda na to, że robię coś podstawowego. Nie używa się kluczy złożonych.Astyanax: prosty zapis rzucający ten wyjątek: za mało bajtów, aby odczytać wartość komponentu
Caused by: InvalidRequestException(why:Not enough bytes to read value of component 0)
at org.apache.cassandra.thrift.Cassandra$batch_mutate_result.read(Cassandra.java:20833)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_batch_mutate(Cassandra.java:964)
at org.apache.cassandra.thrift.Cassandra$Client.batch_mutate(Cassandra.java:950)
at com.netflix.astyanax.thrift.ThriftKeyspaceImpl$1$1.internalExecute(ThriftKeyspaceImpl.java:120)
at com.netflix.astyanax.thrift.ThriftKeyspaceImpl$1$1.internalExecute(ThriftKeyspaceImpl.java:117)
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:56)
Oto kod:
AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder()
.forCluster(CLUSTER_NAME)
.forKeyspace(keySpaceName)
.withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
.setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
.setCqlVersion("3.0.0")
.setTargetCassandraVersion("1.2")
)
.withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
.setPort(50825)
.setMaxConnsPerHost(10)
.setSeeds("nodename:50825")
.setConnectTimeout(20000)
)
.withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
.buildKeyspace(ThriftFamilyFactory.getInstance());
context.start();
System.out.println("getting context.. done ");
Keyspace keyspace = context.getEntity();
MutationBatch m = keyspace.prepareMutationBatch();
ColumnFamily<String, String> colFam = new ColumnFamily<String, String>("test",
StringSerializer.get(), StringSerializer.get());
m.withRow(colFam, "abc")
.putColumn("col2", "test1", null);
m.execute();
Oto tabela opisują:
CREATE TABLE test (
col1 text PRIMARY KEY,
col2 text,
col3 text
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'SnappyCompressor'};
jeden inny aktualizacji: tabela jest tworzona przy użyciu CQL3 i stosowany jest wersja Cassandra 1.2.2 Także jeśli mogę użyć polecenia cql3 wstawić wiersz, jego pracy grzywny. ColumnFamily TAG_CF = ColumnFamily.newColumnFamily ("grd.test", StringSerializer.get(), StringSerializer.get()); \t \t keyspace.prepareQuery (TAG_CF) .withCql ("wstawić grd.test (kol1, kolumna2, Col3)" + "wartości ('ID2', 'sample1', 'sample1');") \t \t \t \t \t \t \t \t \t .execute(); Więc jeśli używam MutationBatch, to nadal nie działa. Naprawdę doceniam pomoc. dzięki. –
srrepaka
Zgłosiłem problem, aby uzyskać przemyślenia .. https://github.com/Netflix/astyanax/issues/314 @Blair - Czy pracowaliście przy użyciu COMPACT STORAGE - formularz pre 1.2 (mam zamiar to eksperymentować. .) –
@ Jerish Sam David: Mam klucz złożony jako klucz podstawowy. Otrzymuję: KOMPATYWNY PRZECHOWYWANIE ze złożonym kluczem podstawowym pozwala na nie więcej niż jedną kolumnę, która nie jest częścią klucza PRIMARY Jak rozwiązać ten problem, zamiast zmieniać schemat –