├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── project ├── Build.scala ├── build.properties └── plugins.sbt └── src ├── main ├── resources │ ├── cluster.conf │ └── reference.conf └── scala │ └── pl │ └── project13 │ └── scala │ └── akka │ └── raft │ ├── Candidate.scala │ ├── ClusterConfiguration.scala │ ├── Follower.scala │ ├── Leader.scala │ ├── RaftActor.scala │ ├── RaftClientActor.scala │ ├── ReplicatedStateMachine.scala │ ├── SharedBehaviors.scala │ ├── cluster │ ├── ClusterRaftActor.scala │ ├── ClusterRaftGrouping.scala │ └── protocol │ │ ├── ClusterProtocol.scala │ │ └── package.scala │ ├── compaction │ ├── DefaultLogCompactionSupport.scala │ ├── LogCompactionExtension.scala │ └── LogCompactionSupport.scala │ ├── config │ ├── RaftConfig.scala │ └── RaftConfiguration.scala │ ├── example │ ├── WordConcatRaftActor.scala │ └── protocol │ │ ├── WordConcatProtocol.scala │ │ └── package.scala │ ├── model │ ├── LogIndexMap.scala │ ├── RaftSnapshot.scala │ ├── ReplicatedLog.scala │ └── Term.scala │ └── protocol │ ├── DomainEvent.scala │ ├── InternalProtocol.scala │ ├── Message.scala │ ├── RaftClusterMembershipProtocol.scala │ ├── RaftProtocol.scala │ ├── RaftStates.scala │ ├── StateMetadata.scala │ └── package.scala ├── multi-jvm └── scala │ └── pl │ └── project13 │ └── scala │ └── akka │ └── raft │ └── cluster │ ├── ClusterIdentifyOnIdentifyDroppingNetworkSpec.scala │ ├── ClusterPatience.scala │ ├── ClusterRaftClientSpec.scala │ ├── ClusterRoleAwarenessSpec.scala │ ├── ClusterWithManyMembersOnEachNodeElectionSpec.scala │ ├── RaftClusterSpec.scala │ ├── SmallClusterElectionSpec.scala │ └── clusters │ ├── FiveNodesCluster.scala │ ├── FourNodesOnlyTwoRaftNodesCluster.scala │ ├── ThreeNodesCluster.scala │ └── ThreeNodesIdentifyDroppingCluster.scala └── test ├── resources └── application.conf └── scala └── pl └── project13 └── scala └── akka └── raft ├── CandidateTest.scala ├── ClusterConfigurationTest.scala ├── ClusterMembershipChangeTest.scala ├── ClusterRaftSpec.scala ├── EventStreamAllMessages.scala ├── FollowerTest.scala ├── LeaderElectionTest.scala ├── LeaderTest.scala ├── LogCompactionSupportTest.scala ├── LogReplicationTest.scala ├── PersistenceCleanup.scala ├── RaftClientActorTest.scala ├── RaftSpec.scala ├── StateTransitionMonitoringActor.scala ├── cluster └── ClusterRaftActorTest.scala └── model ├── LogIndexMapTest.scala └── ReplicatedLogTest.scala /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/.gitignore -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/.travis.yml -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/README.md -------------------------------------------------------------------------------- /project/Build.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/project/Build.scala -------------------------------------------------------------------------------- /project/build.properties: -------------------------------------------------------------------------------- 1 | sbt.version=0.13.8 2 | -------------------------------------------------------------------------------- /project/plugins.sbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/project/plugins.sbt -------------------------------------------------------------------------------- /src/main/resources/cluster.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/resources/cluster.conf -------------------------------------------------------------------------------- /src/main/resources/reference.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/resources/reference.conf -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/Candidate.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/Candidate.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/ClusterConfiguration.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/ClusterConfiguration.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/Follower.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/Follower.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/Leader.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/Leader.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/RaftActor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/RaftActor.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/RaftClientActor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/RaftClientActor.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/ReplicatedStateMachine.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/ReplicatedStateMachine.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/SharedBehaviors.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/SharedBehaviors.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/cluster/ClusterRaftActor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/cluster/ClusterRaftActor.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/cluster/ClusterRaftGrouping.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/cluster/ClusterRaftGrouping.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/cluster/protocol/ClusterProtocol.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/cluster/protocol/ClusterProtocol.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/cluster/protocol/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/cluster/protocol/package.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/compaction/DefaultLogCompactionSupport.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/compaction/DefaultLogCompactionSupport.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/compaction/LogCompactionExtension.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/compaction/LogCompactionExtension.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/compaction/LogCompactionSupport.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/compaction/LogCompactionSupport.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/config/RaftConfig.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/config/RaftConfig.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/config/RaftConfiguration.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/config/RaftConfiguration.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/example/WordConcatRaftActor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/example/WordConcatRaftActor.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/example/protocol/WordConcatProtocol.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/example/protocol/WordConcatProtocol.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/example/protocol/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/example/protocol/package.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/model/LogIndexMap.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/model/LogIndexMap.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/model/RaftSnapshot.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/model/RaftSnapshot.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/model/ReplicatedLog.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/model/ReplicatedLog.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/model/Term.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/model/Term.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/protocol/DomainEvent.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/protocol/DomainEvent.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/protocol/InternalProtocol.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/protocol/InternalProtocol.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/protocol/Message.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/protocol/Message.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/protocol/RaftClusterMembershipProtocol.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/protocol/RaftClusterMembershipProtocol.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/protocol/RaftProtocol.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/protocol/RaftProtocol.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/protocol/RaftStates.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/protocol/RaftStates.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/protocol/StateMetadata.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/protocol/StateMetadata.scala -------------------------------------------------------------------------------- /src/main/scala/pl/project13/scala/akka/raft/protocol/package.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/main/scala/pl/project13/scala/akka/raft/protocol/package.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterIdentifyOnIdentifyDroppingNetworkSpec.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterIdentifyOnIdentifyDroppingNetworkSpec.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterPatience.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterPatience.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterRaftClientSpec.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterRaftClientSpec.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterRoleAwarenessSpec.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterRoleAwarenessSpec.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterWithManyMembersOnEachNodeElectionSpec.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/ClusterWithManyMembersOnEachNodeElectionSpec.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/RaftClusterSpec.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/RaftClusterSpec.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/SmallClusterElectionSpec.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/SmallClusterElectionSpec.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/clusters/FiveNodesCluster.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/clusters/FiveNodesCluster.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/clusters/FourNodesOnlyTwoRaftNodesCluster.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/clusters/FourNodesOnlyTwoRaftNodesCluster.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/clusters/ThreeNodesCluster.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/clusters/ThreeNodesCluster.scala -------------------------------------------------------------------------------- /src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/clusters/ThreeNodesIdentifyDroppingCluster.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/multi-jvm/scala/pl/project13/scala/akka/raft/cluster/clusters/ThreeNodesIdentifyDroppingCluster.scala -------------------------------------------------------------------------------- /src/test/resources/application.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/resources/application.conf -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/CandidateTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/CandidateTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/ClusterConfigurationTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/ClusterConfigurationTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/ClusterMembershipChangeTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/ClusterMembershipChangeTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/ClusterRaftSpec.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/ClusterRaftSpec.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/EventStreamAllMessages.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/EventStreamAllMessages.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/FollowerTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/FollowerTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/LeaderElectionTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/LeaderElectionTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/LeaderTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/LeaderTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/LogCompactionSupportTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/LogCompactionSupportTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/LogReplicationTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/LogReplicationTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/PersistenceCleanup.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/PersistenceCleanup.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/RaftClientActorTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/RaftClientActorTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/RaftSpec.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/RaftSpec.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/StateTransitionMonitoringActor.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/StateTransitionMonitoringActor.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/cluster/ClusterRaftActorTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/cluster/ClusterRaftActorTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/model/LogIndexMapTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/model/LogIndexMapTest.scala -------------------------------------------------------------------------------- /src/test/scala/pl/project13/scala/akka/raft/model/ReplicatedLogTest.scala: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ktoso/akka-raft/HEAD/src/test/scala/pl/project13/scala/akka/raft/model/ReplicatedLogTest.scala --------------------------------------------------------------------------------