#
# /*
#  * 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.
#  */
#

#####################################################
#Topologies
#####################################################
topologies=t1,t2
t1.id=1
t2.id=2

#Below connections form topologies
# Topology can be a ring lie t1 -> t2 -> t3 ->t1
# or It can form a Mesh like structure
# For 7.0.1 simple two system topology like below is
# sufficient for testing. With multi-cluster below
# stuff can be used to test out more complex topologies
t1.remoteDistributedSystems=t2
t2.remoteDistributedSystems=t1

#####################################################
#Members
#####################################################	
t1.hosts=host1,host2,host3,host4,host5,host6,host7,host8
t1.servers=server1,server2,server3,server4,server5,server6,server7,server8
t1.locators=locator1,locator2
t1.peers=peer1,peer2,peer3,peer4,peer5,peer6
t1.clients=client1,client2,client3,client4,client5

t1.server1.host=host1
t1.server2.host=host2
t1.server3.host=host3
t1.server4.host=host4
t1.server5.host=host5
t1.server6.host=host6
t1.server7.host=host7
t1.server8.host=host8


t1.peer1.host=host4
t1.peer2.host=host5
t1.peer3.host=host6
t1.peer4.host=host7
t1.peer5.host=host8
t1.peer6.host=host1

t1.locator1.host=host3
t1.locator2.host=host6

t1.server1.eventKey=
t1.server1.eventValue=


#####################################################
#Regions
#####################################################

t1.regions=replicatedRegion,partitionedRegion,replicatedPersistentRegion,partitionedPersistentRegion

###############################
#replicatedRegion
###############################
t1.replicatedRegion.name=replicatedRegion
t1.replicatedRegion.type=REPLICATED
t1.replicatedRegion.members=server1,server2,server3,server4,server5,server6,server7,server8
t1.replicatedRegion.entryCount=1000

#This indicate any event happened after this testbed file changed
t1.replicatedRegion.eventKey=
t1.replicatedRegion.eventValue=

#wan config
t1.replicatedRegion.wanSenders=serialSender1

###############################
#partitionedRegion
###############################
t1.partitionedRegion.name=partitionedRegion
t1.partitionedRegion.type=PARTITIONED
t1.partitionedRegion.members=server1,server2,server3,server4,server5,server6,server7,server8
t1.partitionedRegion.entryCount=2000

#This indicate any event happened after this testbed file changed
t1.partitionedRegion.eventKey=
t1.partitionedRegion.eventValue=

#wan config : partitioned have only paraller senders
t1.replicatedRegion.wanSenders=parallelSender1

###############################
#replicatedPersistentRegion
###############################
t1.replicatedPersistentRegion.name=replicatedPersistentRegion
t1.replicatedPersistentRegion.type=REPLICATED_PERSISTENT
t1.replicatedPersistentRegion.members=peer1,peer2,peer3,peer4,peer5,peer6
t1.replicatedPersistentRegion.entryCount=3000

#This indicate any event happened after this testbed file changed
t1.replicatedPersistentRegion.eventKey=
t1.replicatedPersistentRegion.eventValue=

###############################
#partitionedPersistentRegion
###############################
t1.partitionedPersistentRegion.name=partitionedPersistentRegion
t1.partitionedPersistentRegion.type=PARTITIONED_PERSISTENT
t1.partitionedPersistentRegion.members=peer2,peer1,peer3,peer4
t1.partitionedPersistentRegion.entryCount=4000

#This indicate any event happened after this testbed file changed
t1.partitionedPersistentRegion.eventKey=
t1.partitionedPersistentRegion.eventValue=

################################
#Wan Senders 
################################
t1.serialSender1.remoteDsId=t2
t1.parallelSender1.remoteDsId=t2

#####################################################
#Functions
#####################################################

t1.functions=funct1,funct2
t1.funct1.memberId=server1
t1.funct2.memberId=server2

#####################################################
#CQs
#####################################################
t1.cqs=cq1,cq2
t1.cq1.query=select * from /partitionedPersistentRegion
t1.cq1.client=client1

t1.cq2.query=select * from /replicatedPersistentRegion
t1.cq2.client=client1

#####################################################
#System Alerts
#####################################################
t1.systemAlertPattern=systemAlert {sequenceNumber}
t1.systemAlertsFreq=10000 //10 seconds