/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.brooklyn.entity.nosql.mongodb.sharding; import org.apache.brooklyn.api.catalog.Catalog; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.EntitySpec; import org.apache.brooklyn.api.entity.Group; import org.apache.brooklyn.api.entity.ImplementedBy; import org.apache.brooklyn.api.sensor.AttributeSensor; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.entity.trait.Startable; import org.apache.brooklyn.core.sensor.Sensors; import org.apache.brooklyn.entity.nosql.mongodb.MongoDBReplicaSet; import org.apache.brooklyn.entity.nosql.mongodb.MongoDBServer; import org.apache.brooklyn.util.core.flags.SetFromFlag; import org.apache.brooklyn.util.time.Duration; import com.google.common.reflect.TypeToken; @Catalog(name="MongoDB Sharded Deployment", description="MongoDB (from \"humongous\") is a scalable, high-performance, open source NoSQL database", iconUrl="classpath:///mongodb-logo.png") @ImplementedBy(MongoDBShardedDeploymentImpl.class) public interface MongoDBShardedDeployment extends Entity, Startable { @SetFromFlag("configClusterSize") ConfigKey<Integer> CONFIG_CLUSTER_SIZE = ConfigKeys.newIntegerConfigKey("mongodb.config.cluster.size", "Number of config servers", 3); @SetFromFlag("initialRouterClusterSize") ConfigKey<Integer> INITIAL_ROUTER_CLUSTER_SIZE = ConfigKeys.newIntegerConfigKey("mongodb.router.cluster.initial.size", "Initial number of routers (mongos)", 0); @SetFromFlag("initialShardClusterSize") ConfigKey<Integer> INITIAL_SHARD_CLUSTER_SIZE = ConfigKeys.newIntegerConfigKey("mongodb.shard.cluster.initial.size", "Initial number of shards (replicasets)", 2); @SetFromFlag("shardReplicaSetSize") ConfigKey<Integer> SHARD_REPLICASET_SIZE = ConfigKeys.newIntegerConfigKey("mongodb.shard.replicaset.size", "Number of servers (mongod) in each shard (replicaset)", 3); @SetFromFlag("routerUpTimeout") ConfigKey<Duration> ROUTER_UP_TIMEOUT = ConfigKeys.newConfigKey(Duration.class, "mongodb.router.up.timeout", "Maximum time to wait for the routers to become available before adding the shards", Duration.FIVE_MINUTES); @SetFromFlag("coLocatedRouterGroup") ConfigKey<Group> CO_LOCATED_ROUTER_GROUP = ConfigKeys.newConfigKey(Group.class, "mongodb.colocated.router.group", "Group to be monitored for the addition of new CoLocatedMongoDBRouter entities"); @SuppressWarnings("serial") ConfigKey<EntitySpec<?>> MONGODB_ROUTER_SPEC = ConfigKeys.newConfigKey( new TypeToken<EntitySpec<?>>() {}, "mongodb.router.spec", "Spec for Router instances", EntitySpec.create(MongoDBRouter.class)); @SuppressWarnings("serial") ConfigKey<EntitySpec<?>> MONGODB_REPLICA_SET_SPEC = ConfigKeys.newConfigKey( new TypeToken<EntitySpec<?>>() {}, "mongodb.replicaset.spec", "Spec for Replica Set", EntitySpec.create(MongoDBReplicaSet.class) .configure(MongoDBReplicaSet.MEMBER_SPEC, EntitySpec.create(MongoDBServer.class))); @SuppressWarnings("serial") ConfigKey<EntitySpec<?>> MONGODB_CONFIG_SERVER_SPEC = ConfigKeys.newConfigKey( new TypeToken<EntitySpec<?>>() {}, "mongodb.configserver.spec", "Spec for Config Server instances", EntitySpec.create(MongoDBConfigServer.class)); public static AttributeSensor<MongoDBConfigServerCluster> CONFIG_SERVER_CLUSTER = Sensors.newSensor( MongoDBConfigServerCluster.class, "mongodbshardeddeployment.configservers", "Config servers"); public static AttributeSensor<MongoDBRouterCluster> ROUTER_CLUSTER = Sensors.newSensor( MongoDBRouterCluster.class, "mongodbshardeddeployment.routers", "Routers"); public static AttributeSensor<MongoDBShardCluster> SHARD_CLUSTER = Sensors.newSensor( MongoDBShardCluster.class, "mongodbshardeddeployment.shards", "Shards"); public MongoDBConfigServerCluster getConfigCluster(); public MongoDBRouterCluster getRouterCluster(); public MongoDBShardCluster getShardCluster(); }