Создание сетевого пространства ключей с помощью Astyanax

У меня проблемы с созданием пространства ключей с использованием топологии сети.

Код:

// The Astyanax context I'm using
AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder()
    .forCluster("Test Cluster")
    .forKeyspace("NetworkKS")
    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()      
    .setDiscoveryType(NodeDiscoveryType.NONE))
    .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
    .setPort(9160)
    .setMaxConnsPerHost(10)
    .setInitConnsPerHost(1)
    .setSeeds("127.0.0.1:9160"))
    .withConnectionPoolMonitor(new Slf4jConnectionPoolMonitorImpl())
    .buildKeyspace(ThriftFamilyFactory.getInstance());

    context.start();

// A different method takes the above context as a keyspace parameter
keyspace.createKeyspace(ImmutableMap.<String, Object>builder()
            .put("strategy_options", ImmutableMap.<String, Object>builder()
            .put("us-east", "3")
            .put("eu-west", "3")
            .put("replication_factor", "1").build())
            .put("strategy_class", "NetworkTopologyStrategy").build());

Я знаю, что создание пространства ключей networkstrategy для одного узла кажется бессмысленным, но это всего лишь тест, как только я заработаю, я добавлю еще один экземпляр Cassandra в семена.

Ошибка:

[AWT-EventQueue-0] WARN com.netflix.astyanax.connectionpool.impl.Slf4jConnectionPoolMonitorImpl - TransportException: [host=127.0.0.1(127.0.0.1):9160, latency=42(42), attempts=1]org.apache.thrift.transport.TTransportException
[AWT-EventQueue-0] INFO com.netflix.astyanax.connectionpool.impl.Slf4jConnectionPoolMonitorImpl - TransportException: [host=127.0.0.1(127.0.0.1):9160, latency=42(42), attempts=1]org.apache.thrift.transport.TTransportException
Jan 27, 2013 4:42:39 PM smail.cli.astyanax.Schema createNetworkKeyspace
SEVERE: null
com.netflix.astyanax.connectionpool.exceptions.TransportException: TransportException: [host=127.0.0.1(127.0.0.1):9160, latency=42(42), attempts=1]org.apache.thrift.transport.TTransportException
    at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(ThriftConverter.java:197)
    at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:60)
    at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:27)
    at com.netflix.astyanax.thrift.ThriftSyncConnectionFactoryImpl$1.execute(ThriftSyncConnectionFactoryImpl.java:136)
    at com.netflix.astyanax.connectionpool.impl.AbstractExecuteWithFailoverImpl.tryOperation(AbstractExecuteWithFailoverImpl.java:69)
    at com.netflix.astyanax.connectionpool.impl.AbstractHostPartitionConnectionPool.executeWithFailover(AbstractHostPartitionConnectionPool.java:248)
    at com.netflix.astyanax.thrift.ThriftKeyspaceImpl.createKeyspace(ThriftKeyspaceImpl.java:545)
    at smail.cli.astyanax.Schema.createNetworkKeyspace(Schema.java:121)
    at smail.cli.test.SchemaCreationTest.createNetKS(SchemaCreationTest.java:21)
    at smail.cli.test.SchemaCreationTest.runTest(SchemaCreationTest.java:50)
    at smail.cli.Main$1.run(Main.java:48)

person user2003470    schedule 27.01.2013    source источник
comment
Я не знаком с Astyanax, но отмечу, что программное создание пространств ключей и семейств столбцов — хороший способ попасть в беду до Cassandra 1.2: datastax.com/docs/1.2/new_features#concurrent-schema-changes   -  person jbellis    schedule 01.02.2013


Ответы (1)


Вы сможете создать такое пространство ключей, если сначала обновите конфигурацию Cassandra. Вам необходимо обновить cassandra-topology.properties в конфигурации вашего узла, чтобы указать либо настройки по умолчанию, либо описать ваши центры обработки данных и стойки. Содержимое файла по умолчанию говорит само за себя.

После правильной настройки вы можете правильно создать свое пространство ключей. Но лучше последовать совету jbellis, чтобы не создавать пространство ключей из кода.

person devsprint    schedule 01.02.2013