Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果删除复合类型列中的值,则无法联接新的cassandra节点_Java_Cassandra_Datastax_Bootstrapping_Astyanax - Fatal编程技术网

Java 如果删除复合类型列中的值,则无法联接新的cassandra节点

Java 如果删除复合类型列中的值,则无法联接新的cassandra节点,java,cassandra,datastax,bootstrapping,astyanax,Java,Cassandra,Datastax,Bootstrapping,Astyanax,我在新节点system.log上获得一个运行时异常 这是卡桑德拉2.0.9的一个缺陷吗? Log System.out-由Buffer.limit中的IllegalArgumentException引起的运行时异常: INFO [NonPeriodicTasks:1] 2014-08-26 15:43:01,030 SecondaryIndexManager.java (line 137) Submitting index build of [myColumnFamily.myColumnFam

我在新节点system.log上获得一个运行时异常

这是卡桑德拉2.0.9的一个缺陷吗?

Log System.out-由Buffer.limit中的IllegalArgumentException引起的运行时异常:

INFO [NonPeriodicTasks:1] 2014-08-26 15:43:01,030 SecondaryIndexManager.java (line 137) Submitting index build of [myColumnFamily.myColumnFamily_myColumn] for data in SSTableReader(path='/var/lib/cassandra/data/testbug/myColumnFamily/testbug-myColumnFamily-jb-1-Data.db')
ERROR [CompactionExecutor:2] 2014-08-26 15:43:01,035 CassandraDaemon.java (line 199) Exception in thread Thread[CompactionExecutor:2,1,main]
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at org.apache.cassandra.utils.ByteBufferUtil.readBytes(ByteBufferUtil.java:587)
    at org.apache.cassandra.utils.ByteBufferUtil.readBytesWithShortLength(ByteBufferUtil.java:596)
    at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:61)
    at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:36)
    at org.apache.cassandra.dht.LocalToken.compareTo(LocalToken.java:44)
    at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:85)
    at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:36)
    at java.util.concurrent.ConcurrentSkipListMap.findPredecessor(ConcurrentSkipListMap.java:727)
    at java.util.concurrent.ConcurrentSkipListMap.findNode(ConcurrentSkipListMap.java:789)
    at java.util.concurrent.ConcurrentSkipListMap.doGet(ConcurrentSkipListMap.java:828)
    at java.util.concurrent.ConcurrentSkipListMap.get(ConcurrentSkipListMap.java:1626)
    at org.apache.cassandra.db.Memtable.resolve(Memtable.java:215)
    at org.apache.cassandra.db.Memtable.put(Memtable.java:173)
    at org.apache.cassandra.db.ColumnFamilyStore.apply(ColumnFamilyStore.java:900)
    at org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex.insert(AbstractSimplePerColumnSecondaryIndex.java:107)
    at org.apache.cassandra.db.index.SecondaryIndexManager.indexRow(SecondaryIndexManager.java:441)
    at org.apache.cassandra.db.Keyspace.indexRow(Keyspace.java:413)
    at org.apache.cassandra.db.index.SecondaryIndexBuilder.build(SecondaryIndexBuilder.java:62)
    at org.apache.cassandra.db.compaction.CompactionManager$9.run(CompactionManager.java:834)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    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:745)
ERROR [NonPeriodicTasks:1] 2014-08-26 15:43:01,035 CassandraDaemon.java (line 199) Exception in thread Thread[NonPeriodicTasks:1,5,main]
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException
    at org.apache.cassandra.utils.FBUtilities.waitOnFuture(FBUtilities.java:413)
    at org.apache.cassandra.db.index.SecondaryIndexManager.maybeBuildSecondaryIndexes(SecondaryIndexManager.java:142)
    at org.apache.cassandra.streaming.StreamReceiveTask$OnCompletionRunnable.run(StreamReceiveTask.java:113)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
    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:745)
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.cassandra.utils.FBUtilities.waitOnFuture(FBUtilities.java:409)
    ... 9 more
Caused by: java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at org.apache.cassandra.utils.ByteBufferUtil.readBytes(ByteBufferUtil.java:587)
    at org.apache.cassandra.utils.ByteBufferUtil.readBytesWithShortLength(ByteBufferUtil.java:596)
    at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:61)
    at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:36)
    at org.apache.cassandra.dht.LocalToken.compareTo(LocalToken.java:44)
    at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:85)
    at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:36)
    at java.util.concurrent.ConcurrentSkipListMap.findPredecessor(ConcurrentSkipListMap.java:727)
    at java.util.concurrent.ConcurrentSkipListMap.findNode(ConcurrentSkipListMap.java:789)
    at java.util.concurrent.ConcurrentSkipListMap.doGet(ConcurrentSkipListMap.java:828)
    at java.util.concurrent.ConcurrentSkipListMap.get(ConcurrentSkipListMap.java:1626)
    at org.apache.cassandra.db.Memtable.resolve(Memtable.java:215)
    at org.apache.cassandra.db.Memtable.put(Memtable.java:173)
    at org.apache.cassandra.db.ColumnFamilyStore.apply(ColumnFamilyStore.java:900)
    at org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex.insert(AbstractSimplePerColumnSecondaryIndex.java:107)
    at org.apache.cassandra.db.index.SecondaryIndexManager.indexRow(SecondaryIndexManager.java:441)
    at org.apache.cassandra.db.Keyspace.indexRow(Keyspace.java:413)
    at org.apache.cassandra.db.index.SecondaryIndexBuilder.build(SecondaryIndexBuilder.java:62)
    at org.apache.cassandra.db.compaction.CompactionManager$9.run(CompactionManager.java:834)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    ... 3 more
ERROR [CompactionExecutor:2] 2014-08-26 15:43:01,036 CassandraDaemon.java (line 199) Exception in thread Thread[CompactionExecutor:2,1,main]
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at org.apache.cassandra.utils.ByteBufferUtil.readBytes(ByteBufferUtil.java:587)
    at org.apache.cassandra.utils.ByteBufferUtil.readBytesWithShortLength(ByteBufferUtil.java:596)
    at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:61)
    at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:36)
    at org.apache.cassandra.dht.LocalToken.compareTo(LocalToken.java:44)
    at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:85)
    at org.apache.cassandra.db.DecoratedKey.compareTo(DecoratedKey.java:36)
    at java.util.concurrent.ConcurrentSkipListMap.findPredecessor(ConcurrentSkipListMap.java:727)
    at java.util.concurrent.ConcurrentSkipListMap.findNode(ConcurrentSkipListMap.java:789)
    at java.util.concurrent.ConcurrentSkipListMap.doGet(ConcurrentSkipListMap.java:828)
    at java.util.concurrent.ConcurrentSkipListMap.get(ConcurrentSkipListMap.java:1626)
    at org.apache.cassandra.db.Memtable.resolve(Memtable.java:215)
    at org.apache.cassandra.db.Memtable.put(Memtable.java:173)
    at org.apache.cassandra.db.ColumnFamilyStore.apply(ColumnFamilyStore.java:900)
    at org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex.insert(AbstractSimplePerColumnSecondaryIndex.java:107)
    at org.apache.cassandra.db.index.SecondaryIndexManager.indexRow(SecondaryIndexManager.java:441)
    at org.apache.cassandra.db.Keyspace.indexRow(Keyspace.java:413)
    at org.apache.cassandra.db.index.SecondaryIndexBuilder.build(SecondaryIndexBuilder.java:62)
    at org.apache.cassandra.db.compaction.CompactionManager$9.run(CompactionManager.java:834)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    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:745)
我的复制步骤(Сassandra 2.0.9):

  • 在单节点数据中心DC1中,使用NetworkTopologyStrategy创建密钥空间,选项DC1=1,DC2=1
  • 在CompositeType(Int32Type、UUIDType)上创建具有辅助索引的CF
  • 将任意组合值写入行
  • 删除该值
  • 将另一个复合值写入另一行
  • 删除第二个值
  • 引导在DC2中添加一个新节点
  • DC2得到一个异常
  • 我在单个3节点DC中的索引复合列中遇到了类似的问题,SimpleStrategy和replication_factor=3(cassandra 1.2.18)

    我使用Astyanax 2.0.1(我也在Astyanax 1.56.49上进行了测试),下面是生成在新数据中心节点引导上失败的键空间(步骤1-6)的代码。 源代码CassandraBugTest.java:

    package test;
    
    import com.netflix.astyanax.AstyanaxContext;
    import com.netflix.astyanax.Cluster;
    import com.netflix.astyanax.Keyspace;
    import com.netflix.astyanax.connectionpool.NodeDiscoveryType;
    import com.netflix.astyanax.connectionpool.exceptions.BadRequestException;
    import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
    import com.netflix.astyanax.connectionpool.impl.ConnectionPoolConfigurationImpl;
    import com.netflix.astyanax.connectionpool.impl.ConnectionPoolType;
    import com.netflix.astyanax.connectionpool.impl.Slf4jConnectionPoolMonitorImpl;
    import com.netflix.astyanax.ddl.ColumnDefinition;
    import com.netflix.astyanax.ddl.ColumnFamilyDefinition;
    import com.netflix.astyanax.ddl.KeyspaceDefinition;
    import com.netflix.astyanax.impl.AstyanaxConfigurationImpl;
    import com.netflix.astyanax.model.ColumnFamily;
    import com.netflix.astyanax.model.Composite;
    import com.netflix.astyanax.model.ConsistencyLevel;
    import com.netflix.astyanax.serializers.*;
    import com.netflix.astyanax.thrift.ThriftFamilyFactory;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.JUnit4;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    @RunWith(JUnit4.class)
    public class CassandraBugTest
    {
        private static final String SEEDS = "dc1n1";
        private static final String CLUSTER_NAME = "Test Cluster";
        private static final String KEYSPACE_NAME = "testbug";
        private static final String COLUMN_FAMILY_NAME = "myColumnFamily";
        private static final String COLUMN_NAME = "myColumn";
    
        @Test
        public void test() throws ConnectionException, InterruptedException
        {
            AstyanaxContext.Builder builder = new AstyanaxContext.Builder()
                    .forCluster(CLUSTER_NAME)
                    .forKeyspace(KEYSPACE_NAME)
                    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
                                    .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
                                    .setConnectionPoolType(ConnectionPoolType.TOKEN_AWARE)
                                    .setCqlVersion("3.1.7")
                                    .setTargetCassandraVersion("2.0.9")
                                    .setDefaultWriteConsistencyLevel(ConsistencyLevel.CL_LOCAL_QUORUM)
                                    .setDefaultReadConsistencyLevel(ConsistencyLevel.CL_LOCAL_QUORUM)
                    )
                    .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("TaxiClusterConnectionPool")
                                    .setInitConnsPerHost(1)
                                    .setMaxConnsPerHost(8)
                                    .setSeeds(SEEDS)
                    )
                    .withConnectionPoolMonitor(new Slf4jConnectionPoolMonitorImpl());
    
            AstyanaxContext<Cluster> clusterContext = builder.buildCluster(ThriftFamilyFactory.getInstance());
            clusterContext.start();
            Cluster cluster = clusterContext.getClient();
    
            Map<String, String> options = new HashMap<>();
            options.put("DC1", "1");
            options.put("DC2", "1");
    
            KeyspaceDefinition keyspaceDef = cluster.makeKeyspaceDefinition()
                                                    .setName(KEYSPACE_NAME)
                                                    .setStrategyClass("NetworkTopologyStrategy")
                                                    .setStrategyOptions(options);
    
            try
            {
                cluster.dropKeyspace(KEYSPACE_NAME);
            }
            catch (BadRequestException e)
            {
            }
    
            cluster.addKeyspace(keyspaceDef);
    
            ColumnFamily<UUID, String> profiles = new ColumnFamily<>(COLUMN_FAMILY_NAME, UUIDSerializer.get(), StringSerializer.get());
    
            ColumnFamilyDefinition columnFamilyDef = cluster.makeColumnFamilyDefinition()
                                                            .setName(profiles.getName())
                                                            .setKeyspace(KEYSPACE_NAME)
                                                            .setKeyValidationClass(profiles.getKeySerializer().getComparatorType().getTypeName())
                                                            .setComparatorType(profiles.getColumnSerializer().getComparatorType().getTypeName());
    
            ColumnDefinition columnDef = cluster.makeColumnDefinition()
                                                .setValidationClass(
                                                        ComparatorType.COMPOSITETYPE.getTypeName() +
                                                        "(" + ComparatorType.INT32TYPE.getTypeName() +
                                                        "," + ComparatorType.UUIDTYPE.getTypeName() +
                                                        ")"
                                                )
    //                                             Use BYTESTYPE here for validation class for workaround, then no bug occurs.
    //                                            .setValidationClass(ComparatorType.BYTESTYPE.getTypeName())
                                                .setName(COLUMN_NAME)
                                                .setIndex(COLUMN_FAMILY_NAME + "_" + COLUMN_NAME, "KEYS");
    
            columnFamilyDef.addColumnDefinition(columnDef);
    
            cluster.addColumnFamily(columnFamilyDef);
    
            AstyanaxContext<Keyspace> keyspaceContext = builder.buildKeyspace(ThriftFamilyFactory.getInstance());
            keyspaceContext.start();
            Keyspace keyspace = keyspaceContext.getClient();
    
            for (int i = 0; i < 100; ++i)
            {
                UUID id = UUID.randomUUID();
                Composite value = new Composite();
                value.addComponent(1, IntegerSerializer.get());
                value.addComponent(UUID.randomUUID(), UUIDSerializer.get());
                value.setSerializersByPosition(IntegerSerializer.get(), UUIDSerializer.get());
    
                keyspace.prepareColumnMutation(profiles, id, COLUMN_NAME)
                        .putValue(value, CompositeSerializer.get(), null)
                        .execute();
    
                keyspace.prepareColumnMutation(profiles, id, COLUMN_NAME)
                        .deleteColumn()
                        .execute();
            }
        }
    }
    
    封装测试;
    导入com.netflix.astyanax.AstyanaxContext;
    导入com.netflix.astyanax.Cluster;
    导入com.netflix.astyanax.Keyspace;
    导入com.netflix.astyanax.connectionpool.NodeDiscoveryType;
    导入com.netflix.astyanax.connectionpool.exceptions.BadRequestException;
    导入com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
    导入com.netflix.astyanax.connectionpool.impl.connectionpoolconfigurationmpl;
    导入com.netflix.astyanax.connectionpool.impl.ConnectionPoolType;
    导入com.netflix.astyanax.connectionpool.impl.Slf4jConnectionPoolMonitorImpl;
    导入com.netflix.astyanax.ddl.ColumnDefinition;
    导入com.netflix.astyanax.ddl.ColumnFamilyDefinition;
    导入com.netflix.astyanax.ddl.KeyspaceDefinition;
    导入com.netflix.astyanax.impl.astyanax配置mpl;
    导入com.netflix.astyanax.model.ColumnFamily;
    导入com.netflix.astyanax.model.Composite;
    导入com.netflix.astyanax.model.consistentylevel;
    导入com.netflix.astyanax.serializers.*;
    进口com.netflix.astyanax.thrift.ThriftFamilyFactory;
    导入org.junit.Test;
    导入org.junit.runner.RunWith;
    导入org.junit.runners.JUnit4;
    导入java.util.HashMap;
    导入java.util.Map;
    导入java.util.UUID;
    @RunWith(JUnit4.class)
    公共类卡桑德拉布格测试
    {
    私有静态最终字符串SEEDS=“dc1n1”;
    私有静态最终字符串CLUSTER_NAME=“Test CLUSTER”;
    私有静态最终字符串KEYSPACE_NAME=“testbug”;
    私有静态最终字符串列\u FAMILY\u NAME=“myColumnFamily”;
    私有静态最终字符串列\u NAME=“myColumn”;
    @试验
    public void test()抛出ConnectionException、InterruptedException
    {
    AstyanaxContext.Builder=新建AstyanaxContext.Builder()
    .forCluster(群集名称)
    .forKeyspace(键空间_名称)
    .withAstyanaxConfiguration(新的AstyanaxConfiguration-Impl())
    .setDiscoveryType(NodeDiscoveryType.RING_描述)
    .setConnectionPoolType(ConnectionPoolType.TOKEN_-AWARE)
    .setCqlVersion(“3.1.7”)
    .setTargetCassandraVersion(“2.0.9”)
    .setDefaultWriteConsistencyLevel(ConsistencyLevel.CL_LOCAL_QUORUM)
    .SetDefaultReadConsistenceLevel(ConsistenceLevel.CL\u本地\u仲裁)
    )
    .withConnectionPoolConfiguration(新的ConnectionPoolConfiguration MPL(“TaxiClusterConnectionPool”)
    .setInitConnsPerHost(1)
    .setMaxConnsPerHost(8)
    .种子(种子)
    )
    .withConnectionPoolMonitor(新的Slf4jConnectionPoolMonitorImpl());
    AstyanaxContext clusterContext=builder.buildCluster(ThriftFamilyFactory.getInstance());
    clusterContext.start();
    Cluster Cluster=clusterContext.getClient();
    Map options=newhashmap();
    期权。看跌期权(“DC1”、“1”);
    期权。看跌期权(“DC2”、“1”);
    KeyspaceDefinition keyspaceDef=cluster.makeKeyspaceDefinition()
    .setName(键空间_名称)
    .setStrategyClass(“网络拓扑策略”)
    .设置策略选项(选项);
    尝试
    {
    cluster.dropKeyspace(KEYSPACE\u NAME);
    }
    捕获(BADE异常)
    {
    }
    cluster.addKeyspace(keyspaceDef);
    ColumnFamily profiles=新的ColumnFamily(COLUMN_FAMILY_NAME,UUIDSerializer.get(),StringSerializer.get());
    ColumnFamilyDefinition ColumnFamilyDefinition=cluster.makeColumnFamilyDefinition()
    .setName(profiles.getName())
    .setKeyspace(键空间_名称)
    .setKeyValidationClass(profiles.getKeySerializer().getComparatorType().getTypeName())
    .setComparatorType(profiles.getColumnSerializer().getComparatorType().getTypeName());
    ColumnDefinition columnDef=cluster.makeColumnDefinition()
    .setValidationClass(
    ComparatorType.COMPOSITETYPE.getTypeName()+
    (“+ComparatorType.INT32TYPE.getTypeName()+
    “,”+ComparatorType.UUIDTYPE.getTypeName()+
    ")"
    )
    //在这里使用ByTestType作为解决方法的验证类,这样就不会出现错误。
    /