From b3550243efc523d6eefaa7ed188164b123ea6ae0 Mon Sep 17 00:00:00 2001 From: NSAmelchev Date: Fri, 28 May 2021 13:03:49 +0300 Subject: [PATCH 1/2] WIP --- modules/ducktests/tests/docker/run_gatling.sh | 72 ++ .../tests/ignitetest/gatling/__init__.py | 14 + .../ignitetest/gatling/gatling_service.py | 73 ++ .../tests/ignitetest/gatling/gatling_test.py | 61 + modules/gatling/README.md | 6 + modules/gatling/pom.xml | 111 ++ .../ignite/gatling/GatlingStarter.scala | 48 + .../org/apache/ignite/gatling/IgniteDsl.scala | 31 + .../org/apache/ignite/gatling/Predef.scala | 21 + .../gatling/actions/IgniteRequest.scala | 80 ++ .../gatling/protocol/IgniteProtocol.scala | 51 + .../gatling/src/test/resources/gatling.conf | 127 +++ .../src/test/resources/logback-test.xml | 31 + modules/gatling/src/test/resources/users.csv | 1001 +++++++++++++++++ modules/gatling/src/test/scala/Engine.scala | 29 + .../src/test/scala/IDEPathHelper.scala | 30 + .../simulations/CachePutSimulation.scala | 45 + pom.xml | 7 + 18 files changed, 1838 insertions(+) create mode 100755 modules/ducktests/tests/docker/run_gatling.sh create mode 100644 modules/ducktests/tests/ignitetest/gatling/__init__.py create mode 100644 modules/ducktests/tests/ignitetest/gatling/gatling_service.py create mode 100644 modules/ducktests/tests/ignitetest/gatling/gatling_test.py create mode 100644 modules/gatling/README.md create mode 100644 modules/gatling/pom.xml create mode 100644 modules/gatling/src/main/scala/org/apache/ignite/gatling/GatlingStarter.scala create mode 100644 modules/gatling/src/main/scala/org/apache/ignite/gatling/IgniteDsl.scala create mode 100644 modules/gatling/src/main/scala/org/apache/ignite/gatling/Predef.scala create mode 100644 modules/gatling/src/main/scala/org/apache/ignite/gatling/actions/IgniteRequest.scala create mode 100644 modules/gatling/src/main/scala/org/apache/ignite/gatling/protocol/IgniteProtocol.scala create mode 100644 modules/gatling/src/test/resources/gatling.conf create mode 100644 modules/gatling/src/test/resources/logback-test.xml create mode 100644 modules/gatling/src/test/resources/users.csv create mode 100644 modules/gatling/src/test/scala/Engine.scala create mode 100644 modules/gatling/src/test/scala/IDEPathHelper.scala create mode 100644 modules/gatling/src/test/scala/org/apache/ignite/gatling/simulations/CachePutSimulation.scala diff --git a/modules/ducktests/tests/docker/run_gatling.sh b/modules/ducktests/tests/docker/run_gatling.sh new file mode 100755 index 0000000000000..d8cad0de976f4 --- /dev/null +++ b/modules/ducktests/tests/docker/run_gatling.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash + +# 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. + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +GATLING_STARTER="/ignitetest/gatling/gatling_test.py" +GATLING_SIMULATION_CLASS="org.apache.ignite.gatling.simulations.CachePutSimulation" +SERVER_NODES_COUNT=1 +GATLING_NODES_COUNT=1 + +usage() { + cat < + + + + + + 4.0.0 + + + org.apache.ignite + ignite-parent + 1 + ../../parent + + + ignite-gatling + 2.11.0-SNAPSHOT + http://ignite.apache.org + + + 3.5.1 + + + + + io.gatling.highcharts + gatling-charts-highcharts + ${gatling.version} + + + + org.apache.ignite + ignite-ducktests + ${project.version} + + + + + + + net.alchim31.maven + scala-maven-plugin + 3.3.2 + + + org.apache.maven.plugins + maven-dependency-plugin + 3.1.1 + + + unpack-gatling-bundle + prepare-package + + unpack + + + + + io.gatling.highcharts + gatling-charts-highcharts-bundle + ${gatling.version} + bundle + zip + true + + + ${project.build.directory} + + + + + + + maven-antrun-plugin + + + package + + + + + + + + + run + + + + + + + diff --git a/modules/gatling/src/main/scala/org/apache/ignite/gatling/GatlingStarter.scala b/modules/gatling/src/main/scala/org/apache/ignite/gatling/GatlingStarter.scala new file mode 100644 index 0000000000000..aeeab8a3e7e87 --- /dev/null +++ b/modules/gatling/src/main/scala/org/apache/ignite/gatling/GatlingStarter.scala @@ -0,0 +1,48 @@ +/* + * 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.ignite.gatling + +import com.fasterxml.jackson.databind.JsonNode +import io.gatling.app.Gatling +import io.gatling.core.config.GatlingPropertiesBuilder +import org.apache.ignite.internal.ducktest.utils.IgniteAwareApplication + +/** + * Class to start the Gatling app. + */ +class GatlingStarter extends IgniteAwareApplication { + def run(jsonNode: JsonNode) = { + markInitialized() + + val props = new GatlingPropertiesBuilder() + .resourcesDirectory(jsonNode.get("resourcesDirectory").asText()) + .resultsDirectory(jsonNode.get("resultsDirectory").asText()) + .binariesDirectory(jsonNode.get("binariesDirectory").asText()) + .simulationClass(jsonNode.get("simulationClass").asText()) + .noReports() + .build + +// TODO +// props.put("ignite", ignite) +// props.put("client", client) + + Gatling.fromMap(props) + + markFinished() + } +} \ No newline at end of file diff --git a/modules/gatling/src/main/scala/org/apache/ignite/gatling/IgniteDsl.scala b/modules/gatling/src/main/scala/org/apache/ignite/gatling/IgniteDsl.scala new file mode 100644 index 0000000000000..9c32565dd61cf --- /dev/null +++ b/modules/gatling/src/main/scala/org/apache/ignite/gatling/IgniteDsl.scala @@ -0,0 +1,31 @@ +/* + * 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.ignite.gatling + +import org.apache.ignite.Ignition +import org.apache.ignite.gatling.actions.IgniteRequest +import org.apache.ignite.gatling.protocol.IgniteProtocol + +/** */ +trait IgniteDsl { + val ignite: IgniteProtocol.type = IgniteProtocol + + def ignite(tag: String) = IgniteRequest(tag) + + val serverNode = Ignition.allGrids().get(0) +} diff --git a/modules/gatling/src/main/scala/org/apache/ignite/gatling/Predef.scala b/modules/gatling/src/main/scala/org/apache/ignite/gatling/Predef.scala new file mode 100644 index 0000000000000..618f77bc1baa3 --- /dev/null +++ b/modules/gatling/src/main/scala/org/apache/ignite/gatling/Predef.scala @@ -0,0 +1,21 @@ +/* + * 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.ignite.gatling + +/** */ +object Predef extends IgniteDsl diff --git a/modules/gatling/src/main/scala/org/apache/ignite/gatling/actions/IgniteRequest.scala b/modules/gatling/src/main/scala/org/apache/ignite/gatling/actions/IgniteRequest.scala new file mode 100644 index 0000000000000..af400d2dab9f6 --- /dev/null +++ b/modules/gatling/src/main/scala/org/apache/ignite/gatling/actions/IgniteRequest.scala @@ -0,0 +1,80 @@ +/* + * 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.ignite.gatling.actions + +import io.gatling.commons.stats.OK +import io.gatling.commons.util.{Clock, DefaultClock} +import io.gatling.core.Predef.Session +import io.gatling.core.action.{Action, ExitableAction} +import io.gatling.core.action.builder.ActionBuilder +import io.gatling.core.session.Expression +import io.gatling.core.stats.StatsEngine +import io.gatling.core.structure.ScenarioContext +import io.gatling.core.util.NameGen +import org.apache.ignite.Ignite +import org.apache.ignite.gatling.protocol.IgniteProtocol + +/** */ +case class IgniteRequest(tag: String) { + def cache(name: String) = IgniteCacheRequest(tag, name) +} + +/** */ +case class IgniteCacheRequest(tag: String, cache: String) { + def get(key: Expression[AnyRef]) = CacheRequestActionBuilder(tag, (ignite, ses) => { + ignite.cache(cache).get(key(ses)) + }) + + def put(key: Expression[AnyRef], value: Expression[AnyRef]) = CacheRequestActionBuilder(tag, (ignite, ses) => { + ignite.cache(cache).put(key(ses), value(ses)) + }) +} + +/** */ +case class CacheRequestActionBuilder(tag: String, clo:(Ignite, Session) => Unit) extends ActionBuilder { + override def build(ctx: ScenarioContext, next: Action): Action = { + val statsEngine = ctx.coreComponents.statsEngine + val protocol = ctx.protocolComponentsRegistry.components(IgniteProtocol.igniteProtocolKey).igniteProtocol + + new CacheRequestAction(tag, protocol.ignite, clo, statsEngine, next) + } +} + +/** */ +class CacheRequestAction ( + val tag: String, + val ignite: Ignite, + val clo:(Ignite, Session) => Unit, + val statsEngine: StatsEngine, + val next: Action) + extends ExitableAction with NameGen { + override def clock: Clock = new DefaultClock + override def name: String = genName(tag) + + override protected def execute(session: Session): Unit = { + val before = clock.nowMillis + + clo.apply(ignite, session) + + next ! session + session.markAsSucceeded + statsEngine.logResponse(session.scenario, session.groups, tag, before, clock.nowMillis, OK, None, None) + } +} + + diff --git a/modules/gatling/src/main/scala/org/apache/ignite/gatling/protocol/IgniteProtocol.scala b/modules/gatling/src/main/scala/org/apache/ignite/gatling/protocol/IgniteProtocol.scala new file mode 100644 index 0000000000000..aa018041b165b --- /dev/null +++ b/modules/gatling/src/main/scala/org/apache/ignite/gatling/protocol/IgniteProtocol.scala @@ -0,0 +1,51 @@ +/* + * 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.ignite.gatling.protocol + +import io.gatling.core.CoreComponents +import io.gatling.core.config.GatlingConfiguration +import io.gatling.core.protocol.{Protocol, ProtocolComponents, ProtocolKey} +import io.gatling.core.session.Session +import org.apache.ignite.Ignite + +/** */ +case class IgniteProtocol(ignite: Ignite) extends Protocol { + type Components = IgniteComponents +} + +/** */ +object IgniteProtocol { + val igniteProtocolKey = new ProtocolKey[IgniteProtocol, IgniteComponents] { + def protocolClass: Class[io.gatling.core.protocol.Protocol] = + classOf[IgniteProtocol].asInstanceOf[Class[io.gatling.core.protocol.Protocol]] + + def defaultProtocolValue(configuration: GatlingConfiguration): IgniteProtocol = + throw new IllegalStateException("Can't provide a default value for IgniteProtocol") + + def newComponents(coreComponents: CoreComponents): IgniteProtocol => IgniteComponents = { + igniteProtocol => IgniteComponents(igniteProtocol) + } + } +} + +/** */ +case class IgniteComponents(igniteProtocol: IgniteProtocol) extends ProtocolComponents { + override def onStart: Session => Session = Session.Identity + + override def onExit: Session => Unit = ProtocolComponents.NoopOnExit +} diff --git a/modules/gatling/src/test/resources/gatling.conf b/modules/gatling/src/test/resources/gatling.conf new file mode 100644 index 0000000000000..c6db76269cbd5 --- /dev/null +++ b/modules/gatling/src/test/resources/gatling.conf @@ -0,0 +1,127 @@ +######################### +# Gatling Configuration # +######################### + +# This file contains all the settings configurable for Gatling with their default values + +gatling { + core { + #outputDirectoryBaseName = "" # The prefix for each simulation result folder (then suffixed by the report generation timestamp) + #runDescription = "" # The description for this simulation run, displayed in each report + #encoding = "utf-8" # Encoding to use throughout Gatling for file and string manipulation + #simulationClass = "" # The FQCN of the simulation to run (when used in conjunction with noReports, the simulation for which assertions will be validated) + #elFileBodiesCacheMaxCapacity = 200 # Cache size for request body EL templates, set to 0 to disable + #rawFileBodiesCacheMaxCapacity = 200 # Cache size for request body Raw templates, set to 0 to disable + #rawFileBodiesInMemoryMaxSize = 1000 # Below this limit, raw file bodies will be cached in memory + #pebbleFileBodiesCacheMaxCapacity = 200 # Cache size for request body Peeble templates, set to 0 to disable + #feederAdaptiveLoadModeThreshold = 100 # File size threshold (in MB). Below load eagerly in memory, above use batch mode with default buffer size + #shutdownTimeout = 10000 # Milliseconds to wait for the actor system to shutdown + extract { + regex { + #cacheMaxCapacity = 200 # Cache size for the compiled regexes, set to 0 to disable caching + } + xpath { + #cacheMaxCapacity = 200 # Cache size for the compiled XPath queries, set to 0 to disable caching + } + jsonPath { + #cacheMaxCapacity = 200 # Cache size for the compiled jsonPath queries, set to 0 to disable caching + } + css { + #cacheMaxCapacity = 200 # Cache size for the compiled CSS selectors queries, set to 0 to disable caching + } + } + directory { + #simulations = user-files/simulations # Directory where simulation classes are located (for bundle packaging only) + #resources = user-files/resources # Directory where resources, such as feeder files and request bodies are located (for bundle packaging only) + #reportsOnly = "" # If set, name of report folder to look for in order to generate its report + #binaries = "" # If set, name of the folder where compiles classes are located: Defaults to GATLING_HOME/target. + #results = results # Name of the folder where all reports folder are located + } + } + socket { + #connectTimeout = 10000 # Timeout in millis for establishing a TCP socket + #tcpNoDelay = true + #soKeepAlive = false # if TCP keepalive configured at OS level should be used + #soReuseAddress = false + } + netty { + #useNativeTransport = true # if Netty native transport should be used instead of Java NIO + #allocator = "pooled" # switch to unpooled for unpooled ByteBufAllocator + #maxThreadLocalCharBufferSize = 200000 # Netty's default is 16k + } + ssl { + #useOpenSsl = true # if OpenSSL should be used instead of JSSE (only the latter can be debugged with -Djava.net.debug=ssl) + #useOpenSslFinalizers = false # if OpenSSL contexts should be freed with Finalizer or if using RefCounted is fine + #handshakeTimeout = 10000 # TLS handshake timeout in millis + #useInsecureTrustManager = true # Use an insecure TrustManager that trusts all server certificates + #enabledProtocols = [] # Array of enabled protocols for HTTPS, if empty use Netty's defaults + #enabledCipherSuites = [] # Array of enabled cipher suites for HTTPS, if empty enable all available ciphers + #sessionCacheSize = 0 # SSLSession cache size, set to 0 to use JDK's default + #sessionTimeout = 0 # SSLSession timeout in seconds, set to 0 to use JDK's default (24h) + #enableSni = true # When set to true, enable Server Name indication (SNI) + keyStore { + #type = "" # Type of SSLContext's KeyManagers store + #file = "" # Location of SSLContext's KeyManagers store + #password = "" # Password for SSLContext's KeyManagers store + #algorithm = "" # Algorithm used SSLContext's KeyManagers store + } + trustStore { + #type = "" # Type of SSLContext's TrustManagers store + #file = "" # Location of SSLContext's TrustManagers store + #password = "" # Password for SSLContext's TrustManagers store + #algorithm = "" # Algorithm used by SSLContext's TrustManagers store + } + } + charting { + #noReports = false # When set to true, don't generate HTML reports + #maxPlotPerSeries = 1000 # Number of points per graph in Gatling reports + #useGroupDurationMetric = false # Switch group timings from cumulated response time to group duration. + indicators { + #lowerBound = 800 # Lower bound for the requests' response time to track in the reports and the console summary + #higherBound = 1200 # Higher bound for the requests' response time to track in the reports and the console summary + #percentile1 = 50 # Value for the 1st percentile to track in the reports, the console summary and Graphite + #percentile2 = 75 # Value for the 2nd percentile to track in the reports, the console summary and Graphite + #percentile3 = 95 # Value for the 3rd percentile to track in the reports, the console summary and Graphite + #percentile4 = 99 # Value for the 4th percentile to track in the reports, the console summary and Graphite + } + } + http { + #fetchedCssCacheMaxCapacity = 200 # Cache size for CSS parsed content, set to 0 to disable + #fetchedHtmlCacheMaxCapacity = 200 # Cache size for HTML parsed content, set to 0 to disable + #perUserCacheMaxCapacity = 200 # Per virtual user cache size, set to 0 to disable + #warmUpUrl = "https://gatling.io" # The URL to use to warm-up the HTTP stack (blank means disabled) + #enableGA = true # Very light Google Analytics (Gatling and Java version), please support + #pooledConnectionIdleTimeout = 60000 # Timeout in millis for a connection to stay idle in the pool + #requestTimeout = 60000 # Timeout in millis for performing an HTTP request + #enableHostnameVerification = false # When set to true, enable hostname verification: SSLEngine.setHttpsEndpointIdentificationAlgorithm("HTTPS") + dns { + #queryTimeout = 5000 # Timeout in millis of each DNS query in millis + #maxQueriesPerResolve = 6 # Maximum allowed number of DNS queries for a given name resolution + } + } + jms { + #replyTimeoutScanPeriod = 1000 # scan period for timedout reply messages + } + data { + #writers = [console, file] # The list of DataWriters to which Gatling write simulation data (currently supported : console, file, graphite) + console { + #light = false # When set to true, displays a light version without detailed request stats + #writePeriod = 5 # Write interval, in seconds + } + file { + #bufferSize = 8192 # FileDataWriter's internal data buffer size, in bytes + } + leak { + #noActivityTimeout = 30 # Period, in seconds, for which Gatling may have no activity before considering a leak may be happening + } + graphite { + #light = false # only send the all* stats + #host = "localhost" # The host where the Carbon server is located + #port = 2003 # The port to which the Carbon server listens to (2003 is default for plaintext, 2004 is default for pickle) + #protocol = "tcp" # The protocol used to send data to Carbon (currently supported : "tcp", "udp") + #rootPathPrefix = "gatling" # The common prefix of all metrics sent to Graphite + #bufferSize = 8192 # Internal data buffer size, in bytes + #writePeriod = 1 # Write period, in seconds + } + } +} diff --git a/modules/gatling/src/test/resources/logback-test.xml b/modules/gatling/src/test/resources/logback-test.xml new file mode 100644 index 0000000000000..c5692b56f0b3f --- /dev/null +++ b/modules/gatling/src/test/resources/logback-test.xml @@ -0,0 +1,31 @@ + + + + + + + + %d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx + + false + + + + + + diff --git a/modules/gatling/src/test/resources/users.csv b/modules/gatling/src/test/resources/users.csv new file mode 100644 index 0000000000000..6855e1f172989 --- /dev/null +++ b/modules/gatling/src/test/resources/users.csv @@ -0,0 +1,1001 @@ +id,firstname,lastname,age +100,Kenna,Daveta,43 +101,Gisela,Terencio,83 +102,Bertine,Tjon,89 +103,Jemie,Bouchard,17 +104,Marinna,Wu,57 +105,Roslyn,Weide,50 +106,Alex,Silvan,91 +107,Cassandra,Federica,36 +108,Tierney,Lenny,96 +109,Louella,Jenness,87 +110,Roxane,Grobe,72 +111,Althea,Pearse,35 +112,Celestyna,Nance,26 +113,Elmira,Tjon,87 +114,Sibella,Klemperer,91 +115,Feliza,Santoro,10 +116,Edee,Bartlett,50 +117,Lisette,Latini,21 +118,Teriann,Salvidor,43 +119,Talya,Faso,35 +120,Hildegaard,Lane,15 +121,Marnia,Old,36 +122,Raina,Drisko,88 +123,Dotty,Scammon,8 +124,Lonnie,Hortensia,15 +125,Wendi,Ailyn,65 +126,Mildrid,Plato,55 +127,Noelle,Wolfgram,63 +128,Lolita,Gualtiero,73 +129,Ileana,Minetta,74 +130,Joleen,Wattenberg,30 +131,Sonni,Anestassia,16 +132,Nelle,Korey,8 +133,Cassondra,Sigfrid,9 +134,Bettine,Gwenore,61 +135,Cecile,Ralfston,39 +136,Shandie,Bates,16 +137,Celene,Constancy,77 +138,Farrah,Howlyn,43 +139,Dagmar,Schenck,84 +140,Donnie,Virgin,75 +141,Celestyna,Grobe,70 +142,Daphne,Stevy,35 +143,Juliane,Magdalen,52 +144,Farrah,Ochs,69 +145,Lesly,Oscar,45 +146,Jobi,Nore,3 +147,Feliza,Ariella,1 +148,Grier,Medrek,3 +149,Adele,Hebner,43 +150,Hildegaard,Bollay,33 +151,Sonni,Edison,51 +152,Judy,Iaverne,5 +153,Pamella,Hutchison,40 +154,Ermengarde,Ivens,21 +155,Laurene,Carlson,14 +156,Jinny,Craggie,32 +157,Yetty,Cosenza,45 +158,Ada,Leler,79 +159,Noelle,Carolin,52 +160,Lelah,Allys,48 +161,Minne,Francene,98 +162,Renie,Abram,61 +163,Jobi,Urias,89 +164,Clarice,Waite,17 +165,Cindelyn,Bertold,12 +166,Danny,Dorothy,73 +167,Helsa,Martguerita,4 +168,Nikki,Rosemary,71 +169,Harrietta,Bearnard,31 +170,Cristabel,Christine,13 +171,Anica,Matthew,65 +172,Krystle,Hermes,63 +173,Modestia,Hedve,12 +174,Dione,Toffic,26 +175,Kassey,Alabaster,96 +176,Gavrielle,Flita,60 +177,Constance,Valerio,66 +178,Joeann,Fredi,3 +179,Winifred,Scammon,8 +180,Gloria,Haldas,17 +181,Marcy,Velick,66 +182,Paule,Middleton,62 +183,Dorothy,Marlie,86 +184,Joleen,Presber,63 +185,Doralynne,Thomasina,67 +186,Rebeca,Rozanna,76 +187,Petronia,Mozelle,71 +188,Karolina,Jaylene,39 +189,Ruthe,Laverne,57 +190,Lanae,Harday,49 +191,Ermengarde,Felizio,30 +192,Claresta,Shanley,64 +193,Kellen,Alarise,31 +194,Caressa,Allare,49 +195,Patricia,Angelis,12 +196,Yetty,Cherianne,43 +197,Carolina,Rossner,65 +198,Paule,Meli,41 +199,Carolina,Granoff,3 +200,Sashenka,Cutlerr,71 +201,Doro,Muriel,7 +202,Roslyn,Tyson,39 +203,Lesly,Concha,44 +204,Albertina,Beniamino,37 +205,Tobe,Primalia,24 +206,Goldie,Modie,8 +207,Aigneis,Hailee,37 +208,Kaja,Tremayne,6 +209,Valera,Michella,80 +210,Rosene,Lacombe,77 +211,Helsa,Ailyn,25 +212,Susette,Stephie,30 +213,Kalina,Hewitt,77 +214,Mureil,Levey,29 +215,Lulita,Franza,24 +216,Leanna,Bakerman,81 +217,Kayla,Alrich,2 +218,Krystle,Vary,49 +219,Rozele,Carmena,7 +220,Alexine,Cloris,41 +221,Ginnie,Yuille,55 +222,Rori,Raul,41 +223,Philis,Sholley,44 +224,Clarice,Olympium,49 +225,Willetta,Argus,87 +226,Ardenia,Randene,71 +227,Raina,Trey,12 +228,Consuela,Hathaway,47 +229,Bernie,Melony,19 +230,Romona,Ambrosia,26 +231,Cordi,Camden,43 +232,Jolyn,Alisia,44 +233,Jorry,Poll,38 +234,Michaelina,Bettine,78 +235,Merry,Hedve,97 +236,Mara,Rogerio,100 +237,Ivett,Phyllis,62 +238,Melanie,Heidt,53 +239,Nyssa,Norrie,45 +240,Paola,Karylin,51 +241,Myriam,Borrell,11 +242,Dorice,Torray,46 +243,Alie,Yuille,23 +244,Dode,Girardo,2 +245,Dede,Cleavland,81 +246,Mahalia,Zuzana,65 +247,Diena,Cullin,96 +248,Caressa,Baudin,13 +249,Kirbee,Riva,95 +250,Lesly,Phi,12 +251,Dode,Argus,63 +252,Bobbi,Maisey,11 +253,Trudie,Haymes,87 +254,Joceline,Tiffa,15 +255,Elise,Reidar,92 +256,Agathe,Kalinda,80 +257,Karolina,Roumell,82 +258,Vita,Bow,84 +259,Cyb,Douglass,78 +260,Carolina,Kress,57 +261,Emylee,Jerold,37 +262,Rhoda,Latini,54 +263,Jan,Hanshaw,36 +264,Caryl,Marisa,18 +265,Esmeralda,Uund,14 +266,Caressa,Albertine,40 +267,Beatriz,Wu,4 +268,Lusa,Morehouse,80 +269,Jinny,Bevin,33 +270,Madeleine,Allys,6 +271,Maud,Selway,62 +272,Felice,Riva,55 +273,Rosaline,Donell,81 +274,Mamie,Lory,71 +275,Rosaline,Ricki,37 +276,Drucie,Sasnett,65 +277,Vinita,Kevon,60 +278,Feliza,Rozanna,30 +279,Lizzie,Melony,47 +280,Babita,Bluh,17 +281,Emma,Faso,4 +282,Melina,Fosque,39 +283,Sindee,Fiann,25 +284,Fidelia,Chaing,83 +285,Cathie,Shields,100 +286,Nikki,Muriel,46 +287,Maud,Amand,84 +288,Linzy,Frendel,64 +289,Wilma,Plato,44 +290,Andeee,Ammann,12 +291,Lelah,Allare,8 +292,Elie,Douglass,63 +293,Audrie,Bebe,30 +294,Tina,Schonfeld,70 +295,Tilly,Nicoline,63 +296,Lisette,Glovsky,54 +297,Corly,Rheingold,73 +298,Tamqrah,Wandie,22 +299,Orsola,Sikorski,67 +300,Rubie,Simmonds,75 +301,Ernesta,Mich,27 +302,Margalo,Tannie,4 +303,Jere,Monk,71 +304,Kittie,Kimmie,45 +305,Violet,Baptlsta,62 +306,Edee,Remmer,52 +307,Celestyna,Tayib,89 +308,Hayley,Rugen,25 +309,Ebonee,Persse,66 +310,Amii,Heidt,95 +311,Bobinette,Meter,7 +312,Felice,Constancy,79 +313,Oona,Cloris,61 +314,Dorene,Dorothy,6 +315,Judy,Mata,69 +316,Meghann,Elisha,11 +317,Shell,Sidonius,98 +318,Ekaterina,Frodi,31 +319,Amelia,Brunell,83 +320,Calla,Daveta,93 +321,Heddie,Albertine,80 +322,Ardenia,Kazimir,89 +323,June,Howlyn,60 +324,Lexine,Bartlett,83 +325,Mamie,Sherrie,65 +326,Sonni,Zaslow,26 +327,Marjie,Fadiman,30 +328,Elfreda,Muriel,42 +329,Etta,Cornelia,57 +330,Minne,McNully,69 +331,Flo,Fillbert,15 +332,Deirdre,Harday,70 +333,Concettina,Mehalek,12 +334,Ernesta,Pacorro,85 +335,Clementine,Gaspard,12 +336,Laure,Jacqui,51 +337,Marsiella,Seessel,84 +338,Lucille,Marcellus,15 +339,Beatriz,Dahlia,93 +340,Gabi,Gualtiero,1 +341,Mureil,Valoniah,85 +342,Moyna,Kare,12 +343,Hannis,Hewitt,29 +344,Celene,Anselmi,53 +345,Rosanne,Lareena,57 +346,Cyndie,Schonfeld,11 +347,Orsola,Seumas,33 +348,Hollie,Hebner,76 +349,Myriam,Corilla,41 +350,Layla,Sisile,73 +351,Kimmy,Valerio,68 +352,Annice,Madaih,57 +353,Annora,Tryck,57 +354,Concettina,Kaja,40 +355,Edee,Hortensia,78 +356,Lolita,Gunn,58 +357,Christal,Abernon,13 +358,Gloria,Kevon,96 +359,Mahalia,Joni,10 +360,Belinda,Alva,41 +361,Zsa Zsa,Arley,83 +362,Rivalee,Hollingsworth,71 +363,Mamie,Posner,47 +364,Larine,Agle,43 +365,Chere,Giule,12 +366,Pierette,Wattenberg,7 +367,Goldie,Primalia,25 +368,Halette,Newell,47 +369,Agathe,Noam,7 +370,Edee,Beniamino,9 +371,Carol-Jean,Dosia,91 +372,Annecorinne,Hartnett,88 +373,Ronna,Blake,24 +374,Petronia,Zola,46 +375,Ermengarde,Valoniah,78 +376,Cacilie,Nicoline,7 +377,Tatiania,Brenn,72 +378,Edith,Hoenack,81 +379,Tabbatha,Imelida,8 +380,Katleen,Cloris,13 +381,Vivia,Gordon,59 +382,Molli,Hewitt,2 +383,Justinn,Hirsch,21 +384,Korrie,Philipp,8 +385,Catrina,Thema,43 +386,Dagmar,Marden,99 +387,Tybie,Leonard,20 +388,Lacie,Hirsch,96 +389,Tarra,Matthew,70 +390,Lorenza,Munn,14 +391,Wilma,Emanuel,74 +392,Lauryn,Virgin,35 +393,Iseabal,Screens,76 +394,Mireielle,Luhe,11 +395,Regina,Allina,16 +396,Trixi,Dimitris,83 +397,Roxane,Niccolo,46 +398,Aubrie,Abbot,57 +399,Valeda,Dorine,57 +400,Kore,Daegal,34 +401,Rhea,Hirsch,13 +402,Maye,Jarib,98 +403,Nariko,Miru,14 +404,Dolli,Gaspard,13 +405,Devina,Amand,99 +406,Glenda,McClimans,94 +407,Tobe,Lunsford,51 +408,Jsandye,Codding,43 +409,Carly,Wildermuth,79 +410,Angelique,Ingra,79 +411,Lenna,Izaak,80 +412,Monika,Billye,75 +413,Ashlee,Fosque,4 +414,Lorenza,Edison,31 +415,Gianina,Dichy,21 +416,Almeta,Blase,91 +417,Genevra,Stefa,32 +418,Feliza,Dichy,78 +419,Candi,Jethro,16 +420,Chickie,Mott,86 +421,Randa,Sheedy,4 +422,Tiffie,Flyn,2 +423,Annecorinne,Payson,25 +424,Bernie,Read,1 +425,Sallie,Erlandson,76 +426,Angela,Gladstone,22 +427,Monika,Plato,25 +428,Lorenza,Rooney,75 +429,Edyth,Earlie,96 +430,Gilligan,Serilda,52 +431,Kelly,Burnside,3 +432,Luci,Seumas,57 +433,Tiffie,Wolfgram,99 +434,Verla,Imelida,19 +435,Edyth,Chobot,58 +436,Tomasina,Arathorn,8 +437,Demetris,Delacourt,12 +438,Dorthy,Sparhawk,38 +439,Sashenka,Madelene,82 +440,Reeba,Clie,38 +441,Genevra,Greenwald,93 +442,Florie,Stover,5 +443,Kenna,Diann,2 +444,Korrie,Sinegold,72 +445,Carmela,Infield,40 +446,Ayn,Lytton,83 +447,Carmela,Carmena,47 +448,Gratia,Rustice,6 +449,Jorry,Reinke,2 +450,Lelah,Saunderson,16 +451,Susette,Horan,84 +452,Mireielle,Horan,36 +453,Nerta,Olin,90 +454,Amii,Urias,91 +455,Ursulina,Burnside,83 +456,Mary,Calhoun,83 +457,Dede,Rolf,2 +458,Tani,Diann,23 +459,Lily,Flita,21 +460,Pollyanna,Oneida,27 +461,Ketti,Constancy,91 +462,Theodora,Randene,16 +463,Adriana,Lorain,68 +464,Tera,Penelopa,74 +465,Dulcinea,Socha,68 +466,Karlee,Kermit,78 +467,Ninnetta,Seessel,59 +468,Ofilia,Riva,22 +469,Romona,Radu,65 +470,Tabbatha,Solitta,82 +471,Cassondra,Kathie,36 +472,Carlie,Levey,6 +473,Deloria,Adrienne,24 +474,Meriel,Holtz,36 +475,Amara,Drisko,23 +476,Mildrid,Afton,50 +477,Gilligan,Neva,73 +478,Lexine,Bronk,85 +479,Amelia,Oster,97 +480,Tonia,Mike,2 +481,Jemie,Oster,36 +482,Leeanne,Nickola,27 +483,Rhoda,Janene,96 +484,Brietta,Mintz,81 +485,Neila,Hedve,29 +486,Modestia,Reneta,80 +487,Penelopa,Bultman,83 +488,Linzy,Pelagias,47 +489,Candi,Joli,50 +490,Zaria,Munn,97 +491,Ivett,Brunell,38 +492,Trixi,Herrera,94 +493,Brooks,Wittie,40 +494,Kenna,Kussell,19 +495,Anthia,Cookie,36 +496,Lindie,Philoo,75 +497,Coral,Eugenia,57 +498,Merci,Kirstin,85 +499,Dulcinea,Herrera,32 +500,Danny,Pyle,72 +501,Jenilee,Raimondo,1 +502,Tomasina,Laverne,13 +503,Elsie,Fairweather,66 +504,Ulrike,Maryanne,49 +505,Meg,Sharl,15 +506,Dorthy,Poll,6 +507,Blondelle,Fennessy,63 +508,Natka,Billye,87 +509,Rhoda,Hunfredo,35 +510,Phylis,Wareing,5 +511,Shel,Bonucci,83 +512,Joy,Lia,71 +513,Charissa,Evangelia,11 +514,Maye,Gregrory,69 +515,Bobinette,Hedve,87 +516,Moyna,Stuart,4 +517,Jasmina,Magnolia,47 +518,Gwyneth,Rosalba,82 +519,Shandie,Ehrman,5 +520,Teriann,Rooney,66 +521,Linet,Keelia,35 +522,Libbie,Cookie,79 +523,Karina,Arvo,98 +524,Katleen,Alabaster,51 +525,Konstance,Ciapas,70 +526,Nannie,Medrek,41 +527,Georgetta,Alva,39 +528,Emilia,Schlosser,33 +529,Eolanda,Dearborn,47 +530,Doralynne,Clie,5 +531,Ruthe,Evangelia,98 +532,Fanny,Burnside,56 +533,Devina,Mitzi,54 +534,Ardeen,Slifka,44 +535,Meriel,Oriana,55 +536,Kathi,Evvie,57 +537,Nita,Kiyoshi,58 +538,Valeda,Burkle,66 +539,Chandra,Chabot,84 +540,Wilma,Florina,24 +541,Carol-Jean,Paton,44 +542,Ingrid,Kravits,59 +543,Arlena,Tannie,33 +544,Ira,Claudine,97 +545,Annora,Earlie,23 +546,Paule,Lindemann,43 +547,Flory,Means,48 +548,Oona,Maryanne,4 +549,Alexine,Decato,13 +550,Imojean,Zuzana,65 +551,Yolane,Tremayne,75 +552,Shaine,Hoban,52 +553,Daphne,McNully,55 +554,Aurelie,Edison,54 +555,Tabbatha,Tjon,20 +556,Amara,Bonilla,30 +557,Oona,Pyle,72 +558,Deane,Firmin,14 +559,Henriette,Merriott,84 +560,Maridel,Saunderson,89 +561,Marjie,Hamil,15 +562,Ruthe,Gaal,95 +563,Danika,Wenda,6 +564,Latisha,Lacombe,84 +565,Jessamyn,Hewitt,64 +566,Camile,Krystle,26 +567,Cherilyn,Audly,47 +568,Danika,Kalinda,69 +569,Caressa,Vilma,100 +570,Elora,Dominy,49 +571,Jemie,Revkah,44 +572,Danika,Ralfston,79 +573,Carmela,Gillan,24 +574,Mignon,Hertzfeld,93 +575,Ingrid,Cath,46 +576,Pierette,Edmund,88 +577,June,Yusuk,29 +578,Clary,Keelia,36 +579,Drucie,Sibyls,61 +580,Anica,McLaughlin,96 +581,Gilligan,Elvyn,78 +582,Gale,Eachern,71 +583,Mellicent,Dalli,11 +584,Candi,Leonard,45 +585,Janenna,Sancho,82 +586,Marleah,Loring,4 +587,Ofilia,Posner,95 +588,Etta,Macey,70 +589,Sabina,Gombach,63 +590,Harmonia,Etom,79 +591,Judy,Leopold,13 +592,Karlee,Herrera,60 +593,Gertrud,Kinnard,32 +594,Alyda,Michella,75 +595,Rayna,Shama,21 +596,Shell,Egbert,78 +597,Celestyna,Stilwell,27 +598,Jillayne,Ade,26 +599,Minda,Grimbly,84 +600,Jan,Baptlsta,76 +601,Dorene,Gaspard,11 +602,Mamie,Grayce,33 +603,Tiffie,Kaja,39 +604,Raina,Florina,90 +605,Carree,Chrystel,79 +606,Dale,Jehu,65 +607,Siana,Mintz,91 +608,Shell,Curren,7 +609,Berget,Guildroy,43 +610,Kristina,Pearse,23 +611,Randa,Ochs,90 +612,Kaia,Toni,3 +613,Chrystel,Pierette,49 +614,Dorothy,Quinn,38 +615,Goldie,Mallon,15 +616,Carmencita,Bebe,72 +617,Corene,Philoo,67 +618,Ira,Ashok,32 +619,Misha,Albertine,56 +620,Candi,Kirbee,32 +621,Lolita,Gerge,75 +622,Farrah,Karylin,97 +623,Rivalee,Khorma,64 +624,Patricia,Mott,7 +625,Bettine,Buckler,14 +626,Cyb,Dorothy,37 +627,Elvira,Sikorski,10 +628,Sam,Allare,62 +629,Lauryn,Caitlin,90 +630,Clo,Erminia,19 +631,Elmira,Braun,6 +632,Almeta,Abram,50 +633,Zaria,Persse,51 +634,Ayn,Jerald,89 +635,Louella,Breed,37 +636,Rivalee,Wenoa,78 +637,Ninnetta,Podvin,46 +638,Sonni,Randene,16 +639,Dale,Katrine,85 +640,Ginnie,Fairweather,2 +641,Edee,Naor,60 +642,Shirlee,Cavan,93 +643,Babita,Edison,66 +644,Lonnie,Carey,41 +645,Cissiee,Luhe,74 +646,Keelia,Toni,14 +647,Stacey,Rooney,64 +648,Marinna,Alwin,86 +649,Adelle,Grobe,56 +650,Konstance,Dunkin,49 +651,Ebonee,Diogenes,58 +652,Nita,Anderea,25 +653,Marjie,Masao,31 +654,Ofilia,Clywd,83 +655,Gwenneth,Dunkin,100 +656,Eadie,Toor,35 +657,Norine,Payson,10 +658,Steffane,Evvie,50 +659,Gloria,Dearborn,82 +660,Hettie,Loleta,70 +661,Elsie,Abbot,37 +662,Sarette,Slifka,98 +663,Priscilla,Velick,33 +664,Felice,Jefferey,33 +665,Roberta,Ogren,81 +666,Roseline,Cavan,99 +667,Winifred,Bertold,69 +668,Di,Marisa,86 +669,Silvana,Delacourt,85 +670,Fred,Holtz,85 +671,Di,Garrison,36 +672,Clo,Leifeste,46 +673,Kial,Brunell,44 +674,Ebonee,Rogerio,4 +675,Kathi,Jarib,31 +676,Tatiania,Philoo,21 +677,Janey,Seagraves,31 +678,Ann-Marie,Percy,89 +679,Evaleen,Rillings,14 +680,Aigneis,Loleta,8 +681,Selma,Wooster,20 +682,Jeanna,Waldron,68 +683,Yetty,Ehrman,22 +684,Lucille,Leonard,54 +685,Corry,Korey,7 +686,Catharine,Giule,48 +687,Melodie,Noam,17 +688,Caressa,Jacinda,95 +689,Dotty,Cyrie,7 +690,Katharina,Ferrell,51 +691,Elmira,Brodench,41 +692,Diena,Nance,83 +693,Bettine,Billye,12 +694,Meg,Colp,6 +695,Gale,Middleton,56 +696,Kayla,Doig,34 +697,Myrtice,Herrera,35 +698,Coral,Fink,72 +699,Ileana,Roche,74 +700,Jacquetta,Lilas,100 +701,Sabina,Trey,58 +702,Edee,McCutcheon,84 +703,Brietta,Riva,90 +704,Brianna,Oster,13 +705,Charmaine,Anderea,40 +706,Lyssa,Paine,39 +707,Cecile,Carmena,12 +708,Lanae,Marcellus,3 +709,Dianemarie,Thar,36 +710,Frances,Fink,62 +711,Allis,Moina,75 +712,Georgetta,Oneida,66 +713,Yvonne,Buckler,72 +714,Joelly,Quinn,59 +715,Ivett,Atonsah,2 +716,Hallie,Brady,73 +717,Oralee,Dermott,39 +718,Bertine,Hazlett,7 +719,Kellen,Bultman,39 +720,Peri,Hashim,93 +721,Ivett,Nelsen,47 +722,Raquela,Wiener,49 +723,Gianina,Hurley,34 +724,Emmey,Raul,29 +725,Vivia,Bertold,86 +726,Lisette,Vanni,25 +727,Marti,Nea,9 +728,Rhoda,Rubie,33 +729,Gabriellia,Earlie,29 +730,Calla,Teryn,99 +731,Ana,Rubie,94 +732,Shandie,Wallis,83 +733,Marnia,Elephus,40 +734,Caritta,Wilona,17 +735,Augustine,Adamsen,90 +736,Tersina,Kare,77 +737,Lorie,Pulsifer,99 +738,Dulce,Cookie,84 +739,Fanchon,Gabrielli,95 +740,Jemie,Rossner,31 +741,Tiffie,Yate,75 +742,Devina,Koziara,8 +743,Hollie,Pozzy,76 +744,Berget,Colbert,34 +745,Lynde,Oscar,96 +746,Melodie,Ledah,24 +747,Clarice,Natica,21 +748,Tabbatha,Horan,95 +749,Mignon,Monk,22 +750,Stacey,Lacombe,74 +751,Briney,Kellby,10 +752,Tressa,Thilda,46 +753,Chere,Erskine,35 +754,June,Thunell,65 +755,Melina,Waldron,65 +756,Frank,Goth,45 +757,Riannon,Flyn,11 +758,Nikki,Friede,46 +759,Chandra,Salchunas,97 +760,Kenna,Alarise,28 +761,Agathe,Howlyn,23 +762,Hollie,Gunn,37 +763,Bibby,Gavrila,74 +764,Phedra,Martsen,49 +765,Marleah,Kendrick,45 +766,Nadine,Shaddock,46 +767,Elena,Ehrman,29 +768,Kristan,Creamer,33 +769,Justinn,Nikaniki,86 +770,Marita,Johnsson,73 +771,Yvonne,Bohlin,30 +772,Marline,Brenn,59 +773,Genevra,Daegal,38 +774,Jaime,Tippets,75 +775,Marjie,Lumbard,33 +776,Natka,Sadowski,95 +777,Theodora,Peti,65 +778,Vonny,Curren,51 +779,Emilia,Septima,30 +780,Zondra,Boycey,25 +781,Arlena,Schlosser,19 +782,Lucy,Letsou,45 +783,Melodie,Morgun,87 +784,Codie,Radu,27 +785,Wynne,Hathaway,18 +786,Sheree,Even,91 +787,Mamie,Fink,12 +788,Elise,Winnick,72 +789,Albertina,Azeria,6 +790,Suzette,Huggins,55 +791,Gisela,Standing,53 +792,Ofilia,Hewitt,5 +793,Alia,Fabiola,87 +794,Cacilie,Israeli,35 +795,Tybie,Xerxes,52 +796,Lynde,Lalitta,27 +797,Kamilah,Kosey,5 +798,Jan,Han,16 +799,Roxane,Pyle,46 +800,Edyth,Johanna,12 +801,Georgina,Wenda,63 +802,Cissiee,Ricarda,26 +803,Cacilie,Ade,32 +804,Tatiania,Lowry,17 +805,Rhoda,Wilona,29 +806,Janenna,Sparhawk,41 +807,Lily,Iiette,26 +808,Maurene,Bonilla,50 +809,Deirdre,Zrike,83 +810,Carly,Seligman,8 +811,Camile,Sandye,58 +812,Justinn,Elisha,2 +813,Jasmina,Rese,87 +814,Lauryn,Quent,45 +815,Nerta,Revkah,25 +816,Leona,Hessler,72 +817,Lolita,Boycey,8 +818,Gale,Zachary,45 +819,Katuscha,Florina,21 +820,Beverley,Norrie,83 +821,Bobinette,Cath,93 +822,Joelly,Rubie,12 +823,Roz,Aloise,48 +824,Dulcinea,Hanshaw,69 +825,Frank,Pacorro,16 +826,Ronna,Hessler,3 +827,Rivalee,Jena,10 +828,Rori,Autrey,1 +829,Susette,Jobi,50 +830,Corene,Rubie,5 +831,Lesly,Ogren,21 +832,Bernardine,Phaidra,18 +833,Addia,Dyche,43 +834,Josephine,Pascia,45 +835,Alameda,Edvard,55 +836,Leontine,Tippets,17 +837,Mellicent,Kronfeld,86 +838,Corene,Mehalek,33 +839,Patricia,Thad,15 +840,Hayley,Gregrory,44 +841,Deane,Willie,60 +842,Teriann,Stanwood,24 +843,Elise,Havens,100 +844,Janeczka,Nickola,70 +845,Bobinette,Cristi,10 +846,Petronia,Bebe,47 +847,Elora,Alva,63 +848,Rosabelle,Faria,84 +849,Joane,Sammons,99 +850,Gloria,Kirbee,73 +851,Nannie,Brian,18 +852,Lucy,Ivens,4 +853,Tonia,Hashim,5 +854,Sophia,Kenney,22 +855,Ana,Fink,14 +856,Rivalee,Gunn,97 +857,Meg,Primalia,54 +858,Aurelie,Bertold,52 +859,Konstance,Norvol,13 +860,Dolli,Lilybelle,2 +861,Max,Nance,93 +862,Doro,Sherrie,37 +863,Cathie,Hewitt,18 +864,Emylee,Fiann,25 +865,Annaliese,Serilda,80 +866,Lelah,Klemperer,50 +867,Ann-Marie,Ivens,17 +868,Edith,Suanne,48 +869,Therine,Fadiman,45 +870,Odessa,Bari,64 +871,Drucie,Schroth,82 +872,Lyssa,Stephie,38 +873,Carly,Gregrory,29 +874,Fanny,Cullin,35 +875,Jenda,Swanhildas,24 +876,Gabi,Concha,52 +877,Clary,Leler,80 +878,Esmeralda,Yorick,58 +879,Ernesta,Linskey,97 +880,Netty,Sidonius,91 +881,Lolita,Bonilla,67 +882,Johna,Robertson,71 +883,Harmonia,Burkle,84 +884,Penelopa,Engdahl,38 +885,Roslyn,Therine,75 +886,Isa,Wolfgram,25 +887,Rosaline,Marsden,84 +888,Belva,Goldina,1 +889,Magdalena,Eldrid,71 +890,Lynde,Jaylene,91 +891,Clo,Teddman,60 +892,Joelly,Wareing,17 +893,Carly,Merat,71 +894,Binny,Alice,12 +895,Mignon,Lamoree,45 +896,Ileana,Ochs,52 +897,Dorene,Dyche,64 +898,Ekaterina,Hebner,19 +899,Desirae,Brian,61 +900,Ketti,Kristi,9 +901,Celestyna,Arley,96 +902,Nonnah,Freddi,70 +903,Annice,Bendick,41 +904,Carolina,Croix,39 +905,Christal,Orelee,80 +906,Mureil,Sothena,8 +907,Pollyanna,Ioab,60 +908,Bibby,Huggins,96 +909,Amelia,Bigner,88 +910,Doralynne,Pettiford,9 +911,Dorthy,Evvie,24 +912,Minne,Pacorro,35 +913,Gratia,Duwalt,25 +914,Rebeca,Zitvaa,32 +915,Corry,Dowski,51 +916,Evaleen,Afton,88 +917,Britte,Elsinore,71 +918,Alexine,Bahr,92 +919,Kassey,Constancy,64 +920,Bibby,Gale,80 +921,Lizzie,Mitzi,1 +922,Dede,Sancho,87 +923,Frances,Eliathas,69 +924,Jackie,Zachary,82 +925,Leontine,Angelis,18 +926,Krystle,Seagraves,32 +927,Florie,Chick,87 +928,Ursulina,Kevon,51 +929,Mariann,Wilona,33 +930,Catharine,Baptlsta,29 +931,Jenda,Eiser,68 +932,Dione,Sacken,7 +933,Alisha,Hoenack,17 +934,Alleen,Thunell,88 +935,Ekaterina,Alisia,33 +936,Zia,Frodi,65 +937,Nanete,Philoo,98 +938,Jolyn,Ardra,75 +939,Annice,Eugenia,70 +940,Janeczka,Tamar,9 +941,Korrie,Skurnik,35 +942,Linet,Kazimir,84 +943,Addia,Bollay,90 +944,Betta,Joeann,12 +945,Gilligan,Wind,73 +946,Valli,Joni,5 +947,Jinny,Jess,92 +948,Dagmar,Alexandr,39 +949,Harmonia,Atcliffe,54 +950,Ottilie,Marijo,8 +951,Katharina,Halla,55 +952,Florencia,Lareena,95 +953,Correy,Esmaria,75 +954,Basia,Harday,51 +955,Benita,Danby,26 +956,Cissiee,Nunci,59 +957,Lolita,Hirsch,63 +958,Jaime,Christine,23 +959,Lisette,Marijo,79 +960,Olivette,Sabella,31 +961,Blondelle,Harriman,38 +962,Ida,Cookie,93 +963,Sashenka,Greyson,97 +964,Julieta,Sprage,93 +965,Brooks,Velick,6 +966,Sallie,Cleavland,29 +967,Alleen,Gavrila,62 +968,Kristan,Ade,44 +969,Almeta,Gale,94 +970,Malina,Holtz,25 +971,Barbi,Poll,79 +972,Leona,Hoban,44 +973,Cathie,Katrine,70 +974,Hallie,Decato,94 +975,Abbie,Sholley,21 +976,Laure,Gaulin,42 +977,Eugine,Philoo,26 +978,Clarice,Helve,91 +979,Nannie,Elisha,8 +980,Laure,McCutcheon,77 +981,Elie,Cynar,15 +982,Myrtice,Erskine,92 +983,Marjie,Raychel,8 +984,Danika,Clarissa,56 +985,Keelia,Fennessy,84 +986,Bee,Raseda,87 +987,Jinny,Lewes,19 +988,Rhea,Catie,24 +989,Romona,Henebry,98 +990,Catharine,Brittani,1 +991,Ekaterina,Maisey,9 +992,Kimmy,Wilona,97 +993,Dari,Sharl,48 +994,Concettina,Niles,85 +995,Farrah,Edee,18 +996,Stevana,Japeth,49 +997,Talya,Levey,76 +998,Ileana,Hachmin,29 +999,Gwenneth,McLaughlin,91 +1000,Cacilie,Tatianas,33 +1001,Anallese,Cohdwell,33 +1002,Claresta,Eckblad,81 +1003,Kassey,Jenness,44 +1004,Fidelia,Jethro,34 +1005,Georgetta,Lenny,39 +1006,Sam,Holtz,56 +1007,Merci,Vale,76 +1008,Steffane,Gavrila,48 +1009,Adele,Merna,68 +1010,Annabela,Ricki,35 +1011,Mara,Cottle,28 +1012,Anestassia,Emerson,48 +1013,Dale,Infield,13 +1014,Cordi,Croix,18 +1015,Caritta,Atcliffe,71 +1016,Goldie,Kathie,58 +1017,Frieda,Dex,34 +1018,Ulrike,Kendrick,27 +1019,Di,Vernier,90 +1020,Lynnea,Toffic,72 +1021,Giustina,Abbot,15 +1022,Cassandra,Macey,57 +1023,Charlena,Brackely,68 +1024,Belva,Roumell,97 +1025,Myriam,Harday,22 +1026,Dode,Arvo,56 +1027,Dorene,Tamsky,41 +1028,Sherrie,Vilma,13 +1029,Lindie,Margarete,26 +1030,Rozele,Means,31 +1031,Elora,Madelene,56 +1032,Rhea,Diann,78 +1033,Shirlee,Bebe,7 +1034,Carmela,Kimmie,53 +1035,Merry,Anselmi,3 +1036,Lynde,Leopold,33 +1037,Mariele,Earlie,36 +1038,Quintina,Junie,86 +1039,Lyssa,Gahl,40 +1040,Marti,Stevy,31 +1041,Adelle,Ventre,89 +1042,Gusty,Masao,4 +1043,Misha,Bryna,81 +1044,Jemie,Lytton,8 +1045,Diena,Standing,63 +1046,Caressa,Emanuel,46 +1047,Ebonee,Afton,53 +1048,Ingrid,Aaberg,58 +1049,Gavrielle,Lesley,93 +1050,Arlina,Serilda,87 +1051,Ezmeralda,Ovid,59 +1052,Katharina,Natica,18 +1053,Rosabelle,Santoro,39 +1054,Corene,Kamaria,85 +1055,Gwenneth,Skell,27 +1056,Clarice,Sherrie,59 +1057,Micheline,Cynar,65 +1058,Gloria,Brodench,98 +1059,Stacey,Bennie,87 +1060,Keelia,Roche,7 +1061,Agathe,Nester,24 +1062,Melisent,Blake,49 +1063,Concettina,Emmy,28 +1064,Grier,Prober,16 +1065,Farrah,Infield,12 +1066,Rubie,Belldas,35 +1067,Nyssa,Old,8 +1068,Ericka,Boehike,13 +1069,Tilly,Terrence,83 +1070,Halette,Sekofski,45 +1071,Britte,Niles,51 +1072,Tabbatha,Torray,77 +1073,Aigneis,Madaih,13 +1074,Jeanna,Stelle,82 +1075,Emylee,Emmy,74 +1076,Vevay,Strephon,99 +1077,Marnia,Koziara,6 +1078,Amii,Bobbee,64 +1079,Jan,Stoller,59 +1080,Jacquetta,Quent,45 +1081,Dagmar,Philipp,92 +1082,Annaliese,Billye,81 +1083,Christy,Carlson,24 +1084,Gwyneth,Phi,65 +1085,Lacie,Lytton,13 +1086,Laure,Harned,48 +1087,Belinda,Calhoun,22 +1088,Silvana,Rolf,64 +1089,Dianemarie,Tatianas,67 +1090,Gretal,Vins,42 +1091,Reeba,Selway,35 +1092,Kristina,Koehler,16 +1093,Ariela,Rillings,81 +1094,Dennie,Leler,95 +1095,Tami,Alabaster,14 +1096,Brandise,Hermes,70 +1097,Cristine,Anderea,54 +1098,Janis,Dawkins,74 +1099,Arlina,Carolin,27 \ No newline at end of file diff --git a/modules/gatling/src/test/scala/Engine.scala b/modules/gatling/src/test/scala/Engine.scala new file mode 100644 index 0000000000000..b75d39d6cfac4 --- /dev/null +++ b/modules/gatling/src/test/scala/Engine.scala @@ -0,0 +1,29 @@ +/* + * 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. + */ + +import io.gatling.app.Gatling +import io.gatling.core.config.GatlingPropertiesBuilder + +/** */ +object Engine extends App { + val props = new GatlingPropertiesBuilder() + .resourcesDirectory(IDEPathHelper.mavenResourcesDirectory.toString) + .resultsDirectory(IDEPathHelper.resultsDirectory.toString) + .binariesDirectory(IDEPathHelper.mavenBinariesDirectory.toString) + + Gatling.fromMap(props.build) +} diff --git a/modules/gatling/src/test/scala/IDEPathHelper.scala b/modules/gatling/src/test/scala/IDEPathHelper.scala new file mode 100644 index 0000000000000..148a23812f812 --- /dev/null +++ b/modules/gatling/src/test/scala/IDEPathHelper.scala @@ -0,0 +1,30 @@ +/* + * 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. + */ + +import java.nio.file.Paths + +/** */ +object IDEPathHelper { + private val projectRootDir = Paths.get(getClass.getClassLoader.getResource("gatling.conf").toURI).getParent.getParent.getParent + private val mavenTargetDirectory = projectRootDir.resolve("target") + private val mavenSrcTestDirectory = projectRootDir.resolve("src").resolve("test") + + val mavenSourcesDirectory = mavenSrcTestDirectory.resolve("scala") + val mavenResourcesDirectory = mavenSrcTestDirectory.resolve("resources") + val mavenBinariesDirectory = mavenTargetDirectory.resolve("test-classes") + val resultsDirectory = mavenTargetDirectory.resolve("gatling") +} diff --git a/modules/gatling/src/test/scala/org/apache/ignite/gatling/simulations/CachePutSimulation.scala b/modules/gatling/src/test/scala/org/apache/ignite/gatling/simulations/CachePutSimulation.scala new file mode 100644 index 0000000000000..65b6cee1e29b1 --- /dev/null +++ b/modules/gatling/src/test/scala/org/apache/ignite/gatling/simulations/CachePutSimulation.scala @@ -0,0 +1,45 @@ +/* + * 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.ignite.gatling.simulations + +import io.gatling.core.Predef._ +import org.apache.ignite.gatling.Predef._ +import org.apache.ignite.gatling.protocol.IgniteProtocol + +/** + * Cache put simulation. + */ +class CachePutSimulation extends Simulation { + val cacheName = "default" + + serverNode.getOrCreateCache(cacheName) + + val csvFeeder = csv("users.csv").circular + + val scn = scenario("Put Scenario") + .feed(csvFeeder) + .exec(ignite("Simple put").cache(cacheName).put("${id}", "${firstname}")) + + setUp(scn.inject( + constantConcurrentUsers(5000) during 30 + )).protocols(new IgniteProtocol(serverNode)) + + after(serverNode.close()) +} + + diff --git a/pom.xml b/pom.xml index 4682ad120dc19..5edde2bfdfc6b 100644 --- a/pom.xml +++ b/pom.xml @@ -133,6 +133,13 @@ + + gatling + + modules/gatling + + + test From 39c8412520d740816faa88eb5987cc650cb20ddb Mon Sep 17 00:00:00 2001 From: NSAmelchev Date: Fri, 28 May 2021 13:10:25 +0300 Subject: [PATCH 2/2] Fix codestyle --- modules/ducktests/tests/ignitetest/gatling/gatling_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ducktests/tests/ignitetest/gatling/gatling_test.py b/modules/ducktests/tests/ignitetest/gatling/gatling_test.py index 755778681bfd9..24157b12ff957 100644 --- a/modules/ducktests/tests/ignitetest/gatling/gatling_test.py +++ b/modules/ducktests/tests/ignitetest/gatling/gatling_test.py @@ -58,4 +58,4 @@ def gatling_test(self, ignite_version): gatling.run() - servers.stop() \ No newline at end of file + servers.stop()