SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Effective  Testing  in  DSE
Predrag Knežević
predrag.knezevic@datastax.com
@pedjakknezevic
Why  Taking  Care?
• Automated  testing  for  quality  control  of  shipped  product/service
• Number  of  tests  and  total  testing  times  increase  over  time
• Shorter  delivery  cycles  →  continuous  testing
• Run  tests  on  each  pre-­merge  check,  but
• Keep  feedback  cycles  short
• Ensure  repeatable  test  execution  anywhere
©  DataStax,  All  Rights  Reserved. 2
DSE  Build  Facts
• Junit  based  test  infrastructure
• December  2014  (DSE  4.6)
• Ant  based  build  system
• ~5h  for  running  all  tests  on  Jenkins,  with  a  rather  complicated  job  layout
• July  2016  (DSE  4.7+)
• Gradle based  build  system
• 40-­60mins  for  running  all  tests  on  Jenkins
• 16  hours  of  total  testing  time
• The  number  of  tests  doubled!
• Repeatable  test  execution  across  all  machines
• Simple  setup
©  DataStax,  All  Rights  Reserved. 3
Why  Moving  to  Gradle?
• Built-­in  support  for  parallel  test  execution
• Readable  -­ build  scripts  based  on  Groovy  (easy  learning  for  Java  devs)
• Repeatable  builds/environment  setup  across  machines
• Powerful  dependency  management
• Sane  conventions,  but  configurable  when  needed
• Easy  project  modularization
• Excellent  Eclipse/IntelliJ  support
• Easy  extendable  through  plugins  or  additional  Java/Groovy  code  living  in  the  script  or  project
• All  Ant  tasks  still  available
©  DataStax,  All  Rights  Reserved. 4
Running  Tests
• All:  gradlew test
• Single:  gradlew test -Dtest.single=FooTest
• By  default  sequential  execution
• Low  resources  usage  on  modern  multicore  hardware
• Long  test  round  duration
©  DataStax,  All  Rights  Reserved. 5
Main
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
Parallel  Test  Execution
©  DataStax,  All  Rights  Reserved. 6
build.gradle
test {
maxParallelForks = N
}
Main
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
.
. N
Dockerized Test  Execution
©  DataStax,  All  Rights  Reserved. 7
Main
.
.
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
N
github.com/datastax/gradle-dockerized-test-plugin
Dockerized Test  Execution  (2)
©  DataStax,  All  Rights  Reserved. 8
build.gradle
test {
maxParallelForks = N
docker {
image = ’test-image’
}
}
• Install  Docker  locally  (native  or  boot2docker)
• No  changes  on  production  or  test  code  required
• Test  environment
• Consistent  across  all  machines  (dev  +  CI)
→  no  more  “it  works  on  my  machine”
• Managed  as  code  (Dockerfiles)  within  project
• Easy  machine  bootstraping
• Fully  isolated
• Easy  testing  against  
several  and/or  appropriate  environment
Worker  Starvation
©  DataStax,  All  Rights  Reserved. 9
Main
.
.
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
Static  queue  allocation!
Improved  Queue  Management
©  DataStax,  All  Rights  Reserved. 10
Test Worker
Main
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
Test Worker
Test  Scheduling
©  DataStax,  All  Rights  Reserved. 11
Main
.
.
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
Test Worker
Test Queue
TestClass1
TestClass2
TestClass3
TestClass4
• NP-­hard
• Longest  Processing  Time  (LPT)  
algorithm
• History  access  required
More  Workers  for  Faster  Feedback
• Powerful  multi-­core  machine
• Docker  Swarm
• Virtual  Docker  engine
• Test  workers  run  on  
a  Swam  node
• Cluster  can  shrink  or  grow
• Lower  bound  for  the  test  round  duration  
is  equal  to  the  duration  of  slowest  test  class
©  DataStax,  All  Rights  Reserved. 12
Swarm  master
Main
Swarm  node
Swarm  node
Test  Worker
Test  Worker
Test  Worker
Test  Worker
Split  Slow  Test  Classes for  More  Throughput
class FooTest {
@Test
void bar1() {
}
@Test
void bar2() {
}
}
class Foo1Test {
@Test
void bar1() {
}
}
class Foo2Test {
@Test
void bar2() {
}
}
● Manual
○ Group by common
fixture
○ Extreme: one test per
class
● Bytecode manipulations
(auto split annotated class)
● Grouping tests classes
into JUnit suites forces
their sequential execution!
No  Embedded  DSE  Nodes
• Running  cluster  within  single  test  worker  JVM  possible  only  by  using  separate  classpath loaders
• Still  requires  a  good  amount  of  hacking  to  make  it  work  decently
• Node  shutdowns  might  still  be  problematic
• Thread  can  hang  around
• Some  objects  cannot  be  garbage  collected  →  memory  leaks
• Standalone  nodes  enable  reusage across  test  classes
©  DataStax,  All  Rights  Reserved. 14
Remote  Code  Execution
• MobilityRPC library  (http://github.com/npgall/mobility-­rpc)
• Remote  JUnit  Testrunner
(http://github.com/datastax/remote-­junit-­runner)
• Useful  for  integration  tests  requiring  application  context,  but  
application  cannot  be  easily  embedded  into  test  JVM
• Support  any  existing  JUnit  runner  on  the  remote  side  
(Parametrized,  Spock,  Suites)
©  DataStax,  All  Rights  Reserved. 15
@RunWith(Remote.class)
public class RemoteTest {
@Test
public void foo() {
// test
}
}
Injecting  Faults
• JBoss Byteman (http://byteman.jboss.org)
• Inject  at  runtime
• Exceptions
• Delays
• Arbitrary  side-­effects
• Enables/simplifies  testing  of  edge/uncommon  cases
©  DataStax,  All  Rights  Reserved. 16
Logging
• Logback (http://logback.qos.ch/) based  infrastructure
• Log  file  per  a  test  case
• Send  all  log  messages  to  the  single  logback server  asynchronously  (reactor-­logback adapter)
keeping  DSE  nodes  responsive  
• Route  log  statements  to  the  proper  file  using  SiftingAdapter and  appropriate  discriminator
• Use  JUnit  rules  to  mark  the  beginning  and  the  end  of  a  test  and  
propagate  this  information  to  the  logback discriminator
• Write  thread  dumps  in  case  of  a  failure
• Scan  log  files  for  known  issues  and  fail  tests  if  they  occur  (e.g.  Netty memory  leaks)
• Turn  DEBUG  messages  on  to  help  later  digging  in  a  case  of  failure
©  DataStax,  All  Rights  Reserved. 17
Log  Event  Sender
<appender name="SOCKET" class="com.datastax.bdp.logback.SocketAppender">
<remoteHost>${logbackServer}</remoteHost>
<port>12345</port>
<reconnectionDelay>1 seconds</reconnectionDelay>
<nodeId>${nodeid}</nodeId>
<eventDelayLimit>120 seconds</eventDelayLimit>
</appender>
<appender name="ASYNC" class="reactor.logback.AsyncAppender">
<includeCallerData>true</includeCallerData>
<appender-ref ref="SOCKET"/>
</appender>
<root level="DEBUG">
<appender-ref ref="ASYNC"/>
</root>
©  DataStax,  All  Rights  Reserved. 18
Log  Event  Router
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator class="com.datastax.bdp.test.ng.LogFileDiscriminator">
<key>TEST_LOG_FILE</key>
<defaultValue>system.log</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${TEST_LOG_FILE}" class="ch.qos.logback.core.FileAppender">
<filter class="com.datastax.bdp.test.ng.ForbiddenLogEventsDetector">
<logFile>${TEST_LOG_FILE}</logFile>
<detector class="com.datastax.bdp.test.ng.NettyLeakDetector"/>
</filter>
<encoder>
<pattern>%X{nodeid} %5p [%t] %d{ISO8601} %F (line %line) %m%n</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
<file>${LOG_DIR}/${TEST_LOG_FILE}</file>
<append>true</append>
</appender>
</sift>
</appender>
©  DataStax,  All  Rights  Reserved. 19
Test  Start/End  Detection  
@Rule
public TestRule watcher = new TestWatcher() {
private String logFile;
@Override
protected void starting(Description description) {
logFile = description.getClassName()+"/"+description.getMethodName()+".log";
logToFile(logFile);
}
protected void failed(Throwable e, Description description) {
threadDumpLogger.error("Test {}.{} failed, thread dump:n{}n", description.getClassName(),
description.getMethodName(), getThreadDumps());
logToFile(description.getClassName()+"/after.log");
}
protected void finished(Description description) {
logToFile(description.getClassName()+"/after.log");
ForbiddenLogEventsDetector.checkForIssues(logFile);
}
};
©  DataStax,  All  Rights  Reserved. 20
Resources
• Gradle (gradle.org)
• Docker  (docker.com)
• Gradle Dockerized Test  Plugin  (github.com/datastax/gradle-­dockerized-­test-­plugin)
• MobilityRPC (http://github.com/npgall/mobility-­rpc)
• Remote  JUnit  Testrunner (http://github.com/datastax/remote-­junit-­runner)
• JBoss Byteman (http://byteman.jboss.org)
• Logback (http://logback.qos.ch/)
• Project  Reactor  Addons (github.com/reactor/reactor-­addons),  Logback adapter
©  DataStax,  All  Rights  Reserved. 21
Thank  you!
Questions?
©  DataStax,  All  Rights  Reserved.22

Mais conteúdo relacionado

Mais procurados

Lessons Learned on Java Tuning for Our Cassandra Clusters (Carlos Monroy, Kne...
Lessons Learned on Java Tuning for Our Cassandra Clusters (Carlos Monroy, Kne...Lessons Learned on Java Tuning for Our Cassandra Clusters (Carlos Monroy, Kne...
Lessons Learned on Java Tuning for Our Cassandra Clusters (Carlos Monroy, Kne...DataStax
 
Troubleshooting Cassandra (J.B. Langston, DataStax) | C* Summit 2016
Troubleshooting Cassandra (J.B. Langston, DataStax) | C* Summit 2016Troubleshooting Cassandra (J.B. Langston, DataStax) | C* Summit 2016
Troubleshooting Cassandra (J.B. Langston, DataStax) | C* Summit 2016DataStax
 
Building a Multi-Region Cluster at Target (Aaron Ploetz, Target) | Cassandra ...
Building a Multi-Region Cluster at Target (Aaron Ploetz, Target) | Cassandra ...Building a Multi-Region Cluster at Target (Aaron Ploetz, Target) | Cassandra ...
Building a Multi-Region Cluster at Target (Aaron Ploetz, Target) | Cassandra ...DataStax
 
Processing 50,000 events per second with Cassandra and Spark
Processing 50,000 events per second with Cassandra and SparkProcessing 50,000 events per second with Cassandra and Spark
Processing 50,000 events per second with Cassandra and SparkBen Slater
 
DataStax | Deploy DataStax Enterprise Clusters with OpsCenter (LCM) (Manikand...
DataStax | Deploy DataStax Enterprise Clusters with OpsCenter (LCM) (Manikand...DataStax | Deploy DataStax Enterprise Clusters with OpsCenter (LCM) (Manikand...
DataStax | Deploy DataStax Enterprise Clusters with OpsCenter (LCM) (Manikand...DataStax
 
Cassandra Tuning - above and beyond
Cassandra Tuning - above and beyondCassandra Tuning - above and beyond
Cassandra Tuning - above and beyondMatija Gobec
 
DataStax | DSE Search 5.0 and Beyond (Nick Panahi & Ariel Weisberg) | Cassand...
DataStax | DSE Search 5.0 and Beyond (Nick Panahi & Ariel Weisberg) | Cassand...DataStax | DSE Search 5.0 and Beyond (Nick Panahi & Ariel Weisberg) | Cassand...
DataStax | DSE Search 5.0 and Beyond (Nick Panahi & Ariel Weisberg) | Cassand...DataStax
 
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...DataStax
 
Using Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraUsing Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraJim Hatcher
 
Managing Cassandra at Scale by Al Tobey
Managing Cassandra at Scale by Al TobeyManaging Cassandra at Scale by Al Tobey
Managing Cassandra at Scale by Al TobeyDataStax Academy
 
Oracle: Let My People Go! (Shu Zhang, Ilya Sokolov, Symantec) | Cassandra Sum...
Oracle: Let My People Go! (Shu Zhang, Ilya Sokolov, Symantec) | Cassandra Sum...Oracle: Let My People Go! (Shu Zhang, Ilya Sokolov, Symantec) | Cassandra Sum...
Oracle: Let My People Go! (Shu Zhang, Ilya Sokolov, Symantec) | Cassandra Sum...DataStax
 
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...DataStax
 
Understanding DSE Search by Matt Stump
Understanding DSE Search by Matt StumpUnderstanding DSE Search by Matt Stump
Understanding DSE Search by Matt StumpDataStax
 
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACPerformance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACKristofferson A
 
Cassandra on Mesos Across Multiple Datacenters at Uber (Abhishek Verma) | C* ...
Cassandra on Mesos Across Multiple Datacenters at Uber (Abhishek Verma) | C* ...Cassandra on Mesos Across Multiple Datacenters at Uber (Abhishek Verma) | C* ...
Cassandra on Mesos Across Multiple Datacenters at Uber (Abhishek Verma) | C* ...DataStax
 
Myths of Big Partitions (Robert Stupp, DataStax) | Cassandra Summit 2016
Myths of Big Partitions (Robert Stupp, DataStax) | Cassandra Summit 2016Myths of Big Partitions (Robert Stupp, DataStax) | Cassandra Summit 2016
Myths of Big Partitions (Robert Stupp, DataStax) | Cassandra Summit 2016DataStax
 
Oracle Active Data Guard 12c: Far Sync Instance, Real-Time Cascade and Other ...
Oracle Active Data Guard 12c: Far Sync Instance, Real-Time Cascade and Other ...Oracle Active Data Guard 12c: Far Sync Instance, Real-Time Cascade and Other ...
Oracle Active Data Guard 12c: Far Sync Instance, Real-Time Cascade and Other ...Ludovico Caldara
 

Mais procurados (20)

Lessons Learned on Java Tuning for Our Cassandra Clusters (Carlos Monroy, Kne...
Lessons Learned on Java Tuning for Our Cassandra Clusters (Carlos Monroy, Kne...Lessons Learned on Java Tuning for Our Cassandra Clusters (Carlos Monroy, Kne...
Lessons Learned on Java Tuning for Our Cassandra Clusters (Carlos Monroy, Kne...
 
Troubleshooting Cassandra (J.B. Langston, DataStax) | C* Summit 2016
Troubleshooting Cassandra (J.B. Langston, DataStax) | C* Summit 2016Troubleshooting Cassandra (J.B. Langston, DataStax) | C* Summit 2016
Troubleshooting Cassandra (J.B. Langston, DataStax) | C* Summit 2016
 
Building a Multi-Region Cluster at Target (Aaron Ploetz, Target) | Cassandra ...
Building a Multi-Region Cluster at Target (Aaron Ploetz, Target) | Cassandra ...Building a Multi-Region Cluster at Target (Aaron Ploetz, Target) | Cassandra ...
Building a Multi-Region Cluster at Target (Aaron Ploetz, Target) | Cassandra ...
 
Processing 50,000 events per second with Cassandra and Spark
Processing 50,000 events per second with Cassandra and SparkProcessing 50,000 events per second with Cassandra and Spark
Processing 50,000 events per second with Cassandra and Spark
 
DataStax | Deploy DataStax Enterprise Clusters with OpsCenter (LCM) (Manikand...
DataStax | Deploy DataStax Enterprise Clusters with OpsCenter (LCM) (Manikand...DataStax | Deploy DataStax Enterprise Clusters with OpsCenter (LCM) (Manikand...
DataStax | Deploy DataStax Enterprise Clusters with OpsCenter (LCM) (Manikand...
 
Cassandra Tuning - above and beyond
Cassandra Tuning - above and beyondCassandra Tuning - above and beyond
Cassandra Tuning - above and beyond
 
Advanced Cassandra
Advanced CassandraAdvanced Cassandra
Advanced Cassandra
 
DataStax | DSE Search 5.0 and Beyond (Nick Panahi & Ariel Weisberg) | Cassand...
DataStax | DSE Search 5.0 and Beyond (Nick Panahi & Ariel Weisberg) | Cassand...DataStax | DSE Search 5.0 and Beyond (Nick Panahi & Ariel Weisberg) | Cassand...
DataStax | DSE Search 5.0 and Beyond (Nick Panahi & Ariel Weisberg) | Cassand...
 
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
 
Using Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraUsing Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into Cassandra
 
Clustering van IT-componenten
Clustering van IT-componentenClustering van IT-componenten
Clustering van IT-componenten
 
Managing Cassandra at Scale by Al Tobey
Managing Cassandra at Scale by Al TobeyManaging Cassandra at Scale by Al Tobey
Managing Cassandra at Scale by Al Tobey
 
Oracle: Let My People Go! (Shu Zhang, Ilya Sokolov, Symantec) | Cassandra Sum...
Oracle: Let My People Go! (Shu Zhang, Ilya Sokolov, Symantec) | Cassandra Sum...Oracle: Let My People Go! (Shu Zhang, Ilya Sokolov, Symantec) | Cassandra Sum...
Oracle: Let My People Go! (Shu Zhang, Ilya Sokolov, Symantec) | Cassandra Sum...
 
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
 
Understanding DSE Search by Matt Stump
Understanding DSE Search by Matt StumpUnderstanding DSE Search by Matt Stump
Understanding DSE Search by Matt Stump
 
Advanced Operations
Advanced OperationsAdvanced Operations
Advanced Operations
 
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACPerformance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
 
Cassandra on Mesos Across Multiple Datacenters at Uber (Abhishek Verma) | C* ...
Cassandra on Mesos Across Multiple Datacenters at Uber (Abhishek Verma) | C* ...Cassandra on Mesos Across Multiple Datacenters at Uber (Abhishek Verma) | C* ...
Cassandra on Mesos Across Multiple Datacenters at Uber (Abhishek Verma) | C* ...
 
Myths of Big Partitions (Robert Stupp, DataStax) | Cassandra Summit 2016
Myths of Big Partitions (Robert Stupp, DataStax) | Cassandra Summit 2016Myths of Big Partitions (Robert Stupp, DataStax) | Cassandra Summit 2016
Myths of Big Partitions (Robert Stupp, DataStax) | Cassandra Summit 2016
 
Oracle Active Data Guard 12c: Far Sync Instance, Real-Time Cascade and Other ...
Oracle Active Data Guard 12c: Far Sync Instance, Real-Time Cascade and Other ...Oracle Active Data Guard 12c: Far Sync Instance, Real-Time Cascade and Other ...
Oracle Active Data Guard 12c: Far Sync Instance, Real-Time Cascade and Other ...
 

Semelhante a DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Cassandra Summit 2016

Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)STePINForum
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherencearagozin
 
Parallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeParallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeAkihiro Suda
 
Into The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsInto The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsOrtus Solutions, Corp
 
PostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized WorldPostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized WorldJignesh Shah
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.jsorkaplan
 
PaaSTA: Running applications at Yelp
PaaSTA: Running applications at YelpPaaSTA: Running applications at Yelp
PaaSTA: Running applications at YelpNathan Handler
 
Dockerizing the Hard Services: Neutron and Nova
Dockerizing the Hard Services: Neutron and NovaDockerizing the Hard Services: Neutron and Nova
Dockerizing the Hard Services: Neutron and Novaclayton_oneill
 
Automating Software Development Life Cycle - A DevOps Approach
Automating Software Development Life Cycle - A DevOps ApproachAutomating Software Development Life Cycle - A DevOps Approach
Automating Software Development Life Cycle - A DevOps ApproachAkshaya Mahapatra
 
Apache DeltaSpike
Apache DeltaSpikeApache DeltaSpike
Apache DeltaSpikeos890
 
node.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoonnode.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang YoonJesang Yoon
 
Level Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersLevel Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersVMware Tanzu
 
Oracle Workflow Continuous Integration
Oracle Workflow Continuous IntegrationOracle Workflow Continuous Integration
Oracle Workflow Continuous IntegrationRajesh Raheja
 
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...HostedbyConfluent
 
Introduction to ZooKeeper - TriHUG May 22, 2012
Introduction to ZooKeeper - TriHUG May 22, 2012Introduction to ZooKeeper - TriHUG May 22, 2012
Introduction to ZooKeeper - TriHUG May 22, 2012mumrah
 
Warden @ Meet magento Romania 2021
Warden @ Meet magento Romania 2021Warden @ Meet magento Romania 2021
Warden @ Meet magento Romania 2021alinalexandru
 
Resilience Testing
Resilience Testing Resilience Testing
Resilience Testing Ran Levy
 
Intro to Azure SQL database
Intro to Azure SQL databaseIntro to Azure SQL database
Intro to Azure SQL databaseSteve Knutson
 
Best practices in Deploying SUSE CaaS Platform v3
Best practices in Deploying SUSE CaaS Platform v3Best practices in Deploying SUSE CaaS Platform v3
Best practices in Deploying SUSE CaaS Platform v3Juan Herrera Utande
 

Semelhante a DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Cassandra Summit 2016 (20)

Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherence
 
Parallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeParallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-Mode
 
Into The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsInto The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applications
 
PostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized WorldPostgreSQL High Availability in a Containerized World
PostgreSQL High Availability in a Containerized World
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
PaaSTA: Running applications at Yelp
PaaSTA: Running applications at YelpPaaSTA: Running applications at Yelp
PaaSTA: Running applications at Yelp
 
Dockerizing the Hard Services: Neutron and Nova
Dockerizing the Hard Services: Neutron and NovaDockerizing the Hard Services: Neutron and Nova
Dockerizing the Hard Services: Neutron and Nova
 
Automating Software Development Life Cycle - A DevOps Approach
Automating Software Development Life Cycle - A DevOps ApproachAutomating Software Development Life Cycle - A DevOps Approach
Automating Software Development Life Cycle - A DevOps Approach
 
Apache DeltaSpike
Apache DeltaSpikeApache DeltaSpike
Apache DeltaSpike
 
node.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoonnode.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoon
 
Level Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersLevel Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With Testcontainers
 
Oracle Workflow Continuous Integration
Oracle Workflow Continuous IntegrationOracle Workflow Continuous Integration
Oracle Workflow Continuous Integration
 
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
 
Introduction to ZooKeeper - TriHUG May 22, 2012
Introduction to ZooKeeper - TriHUG May 22, 2012Introduction to ZooKeeper - TriHUG May 22, 2012
Introduction to ZooKeeper - TriHUG May 22, 2012
 
Warden @ Meet magento Romania 2021
Warden @ Meet magento Romania 2021Warden @ Meet magento Romania 2021
Warden @ Meet magento Romania 2021
 
Resilience Testing
Resilience Testing Resilience Testing
Resilience Testing
 
Intro to Azure SQL database
Intro to Azure SQL databaseIntro to Azure SQL database
Intro to Azure SQL database
 
Apache cassandra v4.0
Apache cassandra v4.0Apache cassandra v4.0
Apache cassandra v4.0
 
Best practices in Deploying SUSE CaaS Platform v3
Best practices in Deploying SUSE CaaS Platform v3Best practices in Deploying SUSE CaaS Platform v3
Best practices in Deploying SUSE CaaS Platform v3
 

Mais de DataStax

Is Your Enterprise Ready to Shine This Holiday Season?
Is Your Enterprise Ready to Shine This Holiday Season?Is Your Enterprise Ready to Shine This Holiday Season?
Is Your Enterprise Ready to Shine This Holiday Season?DataStax
 
Designing Fault-Tolerant Applications with DataStax Enterprise and Apache Cas...
Designing Fault-Tolerant Applications with DataStax Enterprise and Apache Cas...Designing Fault-Tolerant Applications with DataStax Enterprise and Apache Cas...
Designing Fault-Tolerant Applications with DataStax Enterprise and Apache Cas...DataStax
 
Running DataStax Enterprise in VMware Cloud and Hybrid Environments
Running DataStax Enterprise in VMware Cloud and Hybrid EnvironmentsRunning DataStax Enterprise in VMware Cloud and Hybrid Environments
Running DataStax Enterprise in VMware Cloud and Hybrid EnvironmentsDataStax
 
Best Practices for Getting to Production with DataStax Enterprise Graph
Best Practices for Getting to Production with DataStax Enterprise GraphBest Practices for Getting to Production with DataStax Enterprise Graph
Best Practices for Getting to Production with DataStax Enterprise GraphDataStax
 
Webinar | Data Management for Hybrid and Multi-Cloud: A Four-Step Journey
Webinar | Data Management for Hybrid and Multi-Cloud: A Four-Step JourneyWebinar | Data Management for Hybrid and Multi-Cloud: A Four-Step Journey
Webinar | Data Management for Hybrid and Multi-Cloud: A Four-Step JourneyDataStax
 
Webinar | How to Understand Apache Cassandra™ Performance Through Read/Writ...
Webinar  |  How to Understand Apache Cassandra™ Performance Through Read/Writ...Webinar  |  How to Understand Apache Cassandra™ Performance Through Read/Writ...
Webinar | How to Understand Apache Cassandra™ Performance Through Read/Writ...DataStax
 
Webinar | Better Together: Apache Cassandra and Apache Kafka
Webinar  |  Better Together: Apache Cassandra and Apache KafkaWebinar  |  Better Together: Apache Cassandra and Apache Kafka
Webinar | Better Together: Apache Cassandra and Apache KafkaDataStax
 
Top 10 Best Practices for Apache Cassandra and DataStax Enterprise
Top 10 Best Practices for Apache Cassandra and DataStax EnterpriseTop 10 Best Practices for Apache Cassandra and DataStax Enterprise
Top 10 Best Practices for Apache Cassandra and DataStax EnterpriseDataStax
 
Introduction to Apache Cassandra™ + What’s New in 4.0
Introduction to Apache Cassandra™ + What’s New in 4.0Introduction to Apache Cassandra™ + What’s New in 4.0
Introduction to Apache Cassandra™ + What’s New in 4.0DataStax
 
Webinar: How Active Everywhere Database Architecture Accelerates Hybrid Cloud...
Webinar: How Active Everywhere Database Architecture Accelerates Hybrid Cloud...Webinar: How Active Everywhere Database Architecture Accelerates Hybrid Cloud...
Webinar: How Active Everywhere Database Architecture Accelerates Hybrid Cloud...DataStax
 
Webinar | Aligning GDPR Requirements with Today's Hybrid Cloud Realities
Webinar  |  Aligning GDPR Requirements with Today's Hybrid Cloud RealitiesWebinar  |  Aligning GDPR Requirements with Today's Hybrid Cloud Realities
Webinar | Aligning GDPR Requirements with Today's Hybrid Cloud RealitiesDataStax
 
Designing a Distributed Cloud Database for Dummies
Designing a Distributed Cloud Database for DummiesDesigning a Distributed Cloud Database for Dummies
Designing a Distributed Cloud Database for DummiesDataStax
 
How to Power Innovation with Geo-Distributed Data Management in Hybrid Cloud
How to Power Innovation with Geo-Distributed Data Management in Hybrid CloudHow to Power Innovation with Geo-Distributed Data Management in Hybrid Cloud
How to Power Innovation with Geo-Distributed Data Management in Hybrid CloudDataStax
 
How to Evaluate Cloud Databases for eCommerce
How to Evaluate Cloud Databases for eCommerceHow to Evaluate Cloud Databases for eCommerce
How to Evaluate Cloud Databases for eCommerceDataStax
 
Webinar: DataStax Enterprise 6: 10 Ways to Multiply the Power of Apache Cassa...
Webinar: DataStax Enterprise 6: 10 Ways to Multiply the Power of Apache Cassa...Webinar: DataStax Enterprise 6: 10 Ways to Multiply the Power of Apache Cassa...
Webinar: DataStax Enterprise 6: 10 Ways to Multiply the Power of Apache Cassa...DataStax
 
Webinar: DataStax and Microsoft Azure: Empowering the Right-Now Enterprise wi...
Webinar: DataStax and Microsoft Azure: Empowering the Right-Now Enterprise wi...Webinar: DataStax and Microsoft Azure: Empowering the Right-Now Enterprise wi...
Webinar: DataStax and Microsoft Azure: Empowering the Right-Now Enterprise wi...DataStax
 
Webinar - Real-Time Customer Experience for the Right-Now Enterprise featurin...
Webinar - Real-Time Customer Experience for the Right-Now Enterprise featurin...Webinar - Real-Time Customer Experience for the Right-Now Enterprise featurin...
Webinar - Real-Time Customer Experience for the Right-Now Enterprise featurin...DataStax
 
Datastax - The Architect's guide to customer experience (CX)
Datastax - The Architect's guide to customer experience (CX)Datastax - The Architect's guide to customer experience (CX)
Datastax - The Architect's guide to customer experience (CX)DataStax
 
An Operational Data Layer is Critical for Transformative Banking Applications
An Operational Data Layer is Critical for Transformative Banking ApplicationsAn Operational Data Layer is Critical for Transformative Banking Applications
An Operational Data Layer is Critical for Transformative Banking ApplicationsDataStax
 
Becoming a Customer-Centric Enterprise Via Real-Time Data and Design Thinking
Becoming a Customer-Centric Enterprise Via Real-Time Data and Design ThinkingBecoming a Customer-Centric Enterprise Via Real-Time Data and Design Thinking
Becoming a Customer-Centric Enterprise Via Real-Time Data and Design ThinkingDataStax
 

Mais de DataStax (20)

Is Your Enterprise Ready to Shine This Holiday Season?
Is Your Enterprise Ready to Shine This Holiday Season?Is Your Enterprise Ready to Shine This Holiday Season?
Is Your Enterprise Ready to Shine This Holiday Season?
 
Designing Fault-Tolerant Applications with DataStax Enterprise and Apache Cas...
Designing Fault-Tolerant Applications with DataStax Enterprise and Apache Cas...Designing Fault-Tolerant Applications with DataStax Enterprise and Apache Cas...
Designing Fault-Tolerant Applications with DataStax Enterprise and Apache Cas...
 
Running DataStax Enterprise in VMware Cloud and Hybrid Environments
Running DataStax Enterprise in VMware Cloud and Hybrid EnvironmentsRunning DataStax Enterprise in VMware Cloud and Hybrid Environments
Running DataStax Enterprise in VMware Cloud and Hybrid Environments
 
Best Practices for Getting to Production with DataStax Enterprise Graph
Best Practices for Getting to Production with DataStax Enterprise GraphBest Practices for Getting to Production with DataStax Enterprise Graph
Best Practices for Getting to Production with DataStax Enterprise Graph
 
Webinar | Data Management for Hybrid and Multi-Cloud: A Four-Step Journey
Webinar | Data Management for Hybrid and Multi-Cloud: A Four-Step JourneyWebinar | Data Management for Hybrid and Multi-Cloud: A Four-Step Journey
Webinar | Data Management for Hybrid and Multi-Cloud: A Four-Step Journey
 
Webinar | How to Understand Apache Cassandra™ Performance Through Read/Writ...
Webinar  |  How to Understand Apache Cassandra™ Performance Through Read/Writ...Webinar  |  How to Understand Apache Cassandra™ Performance Through Read/Writ...
Webinar | How to Understand Apache Cassandra™ Performance Through Read/Writ...
 
Webinar | Better Together: Apache Cassandra and Apache Kafka
Webinar  |  Better Together: Apache Cassandra and Apache KafkaWebinar  |  Better Together: Apache Cassandra and Apache Kafka
Webinar | Better Together: Apache Cassandra and Apache Kafka
 
Top 10 Best Practices for Apache Cassandra and DataStax Enterprise
Top 10 Best Practices for Apache Cassandra and DataStax EnterpriseTop 10 Best Practices for Apache Cassandra and DataStax Enterprise
Top 10 Best Practices for Apache Cassandra and DataStax Enterprise
 
Introduction to Apache Cassandra™ + What’s New in 4.0
Introduction to Apache Cassandra™ + What’s New in 4.0Introduction to Apache Cassandra™ + What’s New in 4.0
Introduction to Apache Cassandra™ + What’s New in 4.0
 
Webinar: How Active Everywhere Database Architecture Accelerates Hybrid Cloud...
Webinar: How Active Everywhere Database Architecture Accelerates Hybrid Cloud...Webinar: How Active Everywhere Database Architecture Accelerates Hybrid Cloud...
Webinar: How Active Everywhere Database Architecture Accelerates Hybrid Cloud...
 
Webinar | Aligning GDPR Requirements with Today's Hybrid Cloud Realities
Webinar  |  Aligning GDPR Requirements with Today's Hybrid Cloud RealitiesWebinar  |  Aligning GDPR Requirements with Today's Hybrid Cloud Realities
Webinar | Aligning GDPR Requirements with Today's Hybrid Cloud Realities
 
Designing a Distributed Cloud Database for Dummies
Designing a Distributed Cloud Database for DummiesDesigning a Distributed Cloud Database for Dummies
Designing a Distributed Cloud Database for Dummies
 
How to Power Innovation with Geo-Distributed Data Management in Hybrid Cloud
How to Power Innovation with Geo-Distributed Data Management in Hybrid CloudHow to Power Innovation with Geo-Distributed Data Management in Hybrid Cloud
How to Power Innovation with Geo-Distributed Data Management in Hybrid Cloud
 
How to Evaluate Cloud Databases for eCommerce
How to Evaluate Cloud Databases for eCommerceHow to Evaluate Cloud Databases for eCommerce
How to Evaluate Cloud Databases for eCommerce
 
Webinar: DataStax Enterprise 6: 10 Ways to Multiply the Power of Apache Cassa...
Webinar: DataStax Enterprise 6: 10 Ways to Multiply the Power of Apache Cassa...Webinar: DataStax Enterprise 6: 10 Ways to Multiply the Power of Apache Cassa...
Webinar: DataStax Enterprise 6: 10 Ways to Multiply the Power of Apache Cassa...
 
Webinar: DataStax and Microsoft Azure: Empowering the Right-Now Enterprise wi...
Webinar: DataStax and Microsoft Azure: Empowering the Right-Now Enterprise wi...Webinar: DataStax and Microsoft Azure: Empowering the Right-Now Enterprise wi...
Webinar: DataStax and Microsoft Azure: Empowering the Right-Now Enterprise wi...
 
Webinar - Real-Time Customer Experience for the Right-Now Enterprise featurin...
Webinar - Real-Time Customer Experience for the Right-Now Enterprise featurin...Webinar - Real-Time Customer Experience for the Right-Now Enterprise featurin...
Webinar - Real-Time Customer Experience for the Right-Now Enterprise featurin...
 
Datastax - The Architect's guide to customer experience (CX)
Datastax - The Architect's guide to customer experience (CX)Datastax - The Architect's guide to customer experience (CX)
Datastax - The Architect's guide to customer experience (CX)
 
An Operational Data Layer is Critical for Transformative Banking Applications
An Operational Data Layer is Critical for Transformative Banking ApplicationsAn Operational Data Layer is Critical for Transformative Banking Applications
An Operational Data Layer is Critical for Transformative Banking Applications
 
Becoming a Customer-Centric Enterprise Via Real-Time Data and Design Thinking
Becoming a Customer-Centric Enterprise Via Real-Time Data and Design ThinkingBecoming a Customer-Centric Enterprise Via Real-Time Data and Design Thinking
Becoming a Customer-Centric Enterprise Via Real-Time Data and Design Thinking
 

Último

%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 

Último (20)

%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 

DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Cassandra Summit 2016

  • 1. Effective  Testing  in  DSE Predrag Knežević predrag.knezevic@datastax.com @pedjakknezevic
  • 2. Why  Taking  Care? • Automated  testing  for  quality  control  of  shipped  product/service • Number  of  tests  and  total  testing  times  increase  over  time • Shorter  delivery  cycles  →  continuous  testing • Run  tests  on  each  pre-­merge  check,  but • Keep  feedback  cycles  short • Ensure  repeatable  test  execution  anywhere ©  DataStax,  All  Rights  Reserved. 2
  • 3. DSE  Build  Facts • Junit  based  test  infrastructure • December  2014  (DSE  4.6) • Ant  based  build  system • ~5h  for  running  all  tests  on  Jenkins,  with  a  rather  complicated  job  layout • July  2016  (DSE  4.7+) • Gradle based  build  system • 40-­60mins  for  running  all  tests  on  Jenkins • 16  hours  of  total  testing  time • The  number  of  tests  doubled! • Repeatable  test  execution  across  all  machines • Simple  setup ©  DataStax,  All  Rights  Reserved. 3
  • 4. Why  Moving  to  Gradle? • Built-­in  support  for  parallel  test  execution • Readable  -­ build  scripts  based  on  Groovy  (easy  learning  for  Java  devs) • Repeatable  builds/environment  setup  across  machines • Powerful  dependency  management • Sane  conventions,  but  configurable  when  needed • Easy  project  modularization • Excellent  Eclipse/IntelliJ  support • Easy  extendable  through  plugins  or  additional  Java/Groovy  code  living  in  the  script  or  project • All  Ant  tasks  still  available ©  DataStax,  All  Rights  Reserved. 4
  • 5. Running  Tests • All:  gradlew test • Single:  gradlew test -Dtest.single=FooTest • By  default  sequential  execution • Low  resources  usage  on  modern  multicore  hardware • Long  test  round  duration ©  DataStax,  All  Rights  Reserved. 5 Main Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4
  • 6. Parallel  Test  Execution ©  DataStax,  All  Rights  Reserved. 6 build.gradle test { maxParallelForks = N } Main Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4 Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4 . . N
  • 7. Dockerized Test  Execution ©  DataStax,  All  Rights  Reserved. 7 Main . . Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4 Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4 N github.com/datastax/gradle-dockerized-test-plugin
  • 8. Dockerized Test  Execution  (2) ©  DataStax,  All  Rights  Reserved. 8 build.gradle test { maxParallelForks = N docker { image = ’test-image’ } } • Install  Docker  locally  (native  or  boot2docker) • No  changes  on  production  or  test  code  required • Test  environment • Consistent  across  all  machines  (dev  +  CI) →  no  more  “it  works  on  my  machine” • Managed  as  code  (Dockerfiles)  within  project • Easy  machine  bootstraping • Fully  isolated • Easy  testing  against   several  and/or  appropriate  environment
  • 9. Worker  Starvation ©  DataStax,  All  Rights  Reserved. 9 Main . . Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4 Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4 Static  queue  allocation!
  • 10. Improved  Queue  Management ©  DataStax,  All  Rights  Reserved. 10 Test Worker Main Test Queue TestClass1 TestClass2 TestClass3 TestClass4 Test Worker
  • 11. Test  Scheduling ©  DataStax,  All  Rights  Reserved. 11 Main . . Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4 Test Worker Test Queue TestClass1 TestClass2 TestClass3 TestClass4 • NP-­hard • Longest  Processing  Time  (LPT)   algorithm • History  access  required
  • 12. More  Workers  for  Faster  Feedback • Powerful  multi-­core  machine • Docker  Swarm • Virtual  Docker  engine • Test  workers  run  on   a  Swam  node • Cluster  can  shrink  or  grow • Lower  bound  for  the  test  round  duration   is  equal  to  the  duration  of  slowest  test  class ©  DataStax,  All  Rights  Reserved. 12 Swarm  master Main Swarm  node Swarm  node Test  Worker Test  Worker Test  Worker Test  Worker
  • 13. Split  Slow  Test  Classes for  More  Throughput class FooTest { @Test void bar1() { } @Test void bar2() { } } class Foo1Test { @Test void bar1() { } } class Foo2Test { @Test void bar2() { } } ● Manual ○ Group by common fixture ○ Extreme: one test per class ● Bytecode manipulations (auto split annotated class) ● Grouping tests classes into JUnit suites forces their sequential execution!
  • 14. No  Embedded  DSE  Nodes • Running  cluster  within  single  test  worker  JVM  possible  only  by  using  separate  classpath loaders • Still  requires  a  good  amount  of  hacking  to  make  it  work  decently • Node  shutdowns  might  still  be  problematic • Thread  can  hang  around • Some  objects  cannot  be  garbage  collected  →  memory  leaks • Standalone  nodes  enable  reusage across  test  classes ©  DataStax,  All  Rights  Reserved. 14
  • 15. Remote  Code  Execution • MobilityRPC library  (http://github.com/npgall/mobility-­rpc) • Remote  JUnit  Testrunner (http://github.com/datastax/remote-­junit-­runner) • Useful  for  integration  tests  requiring  application  context,  but   application  cannot  be  easily  embedded  into  test  JVM • Support  any  existing  JUnit  runner  on  the  remote  side   (Parametrized,  Spock,  Suites) ©  DataStax,  All  Rights  Reserved. 15 @RunWith(Remote.class) public class RemoteTest { @Test public void foo() { // test } }
  • 16. Injecting  Faults • JBoss Byteman (http://byteman.jboss.org) • Inject  at  runtime • Exceptions • Delays • Arbitrary  side-­effects • Enables/simplifies  testing  of  edge/uncommon  cases ©  DataStax,  All  Rights  Reserved. 16
  • 17. Logging • Logback (http://logback.qos.ch/) based  infrastructure • Log  file  per  a  test  case • Send  all  log  messages  to  the  single  logback server  asynchronously  (reactor-­logback adapter) keeping  DSE  nodes  responsive   • Route  log  statements  to  the  proper  file  using  SiftingAdapter and  appropriate  discriminator • Use  JUnit  rules  to  mark  the  beginning  and  the  end  of  a  test  and   propagate  this  information  to  the  logback discriminator • Write  thread  dumps  in  case  of  a  failure • Scan  log  files  for  known  issues  and  fail  tests  if  they  occur  (e.g.  Netty memory  leaks) • Turn  DEBUG  messages  on  to  help  later  digging  in  a  case  of  failure ©  DataStax,  All  Rights  Reserved. 17
  • 18. Log  Event  Sender <appender name="SOCKET" class="com.datastax.bdp.logback.SocketAppender"> <remoteHost>${logbackServer}</remoteHost> <port>12345</port> <reconnectionDelay>1 seconds</reconnectionDelay> <nodeId>${nodeid}</nodeId> <eventDelayLimit>120 seconds</eventDelayLimit> </appender> <appender name="ASYNC" class="reactor.logback.AsyncAppender"> <includeCallerData>true</includeCallerData> <appender-ref ref="SOCKET"/> </appender> <root level="DEBUG"> <appender-ref ref="ASYNC"/> </root> ©  DataStax,  All  Rights  Reserved. 18
  • 19. Log  Event  Router <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator class="com.datastax.bdp.test.ng.LogFileDiscriminator"> <key>TEST_LOG_FILE</key> <defaultValue>system.log</defaultValue> </discriminator> <sift> <appender name="FILE-${TEST_LOG_FILE}" class="ch.qos.logback.core.FileAppender"> <filter class="com.datastax.bdp.test.ng.ForbiddenLogEventsDetector"> <logFile>${TEST_LOG_FILE}</logFile> <detector class="com.datastax.bdp.test.ng.NettyLeakDetector"/> </filter> <encoder> <pattern>%X{nodeid} %5p [%t] %d{ISO8601} %F (line %line) %m%n</pattern> <immediateFlush>false</immediateFlush> </encoder> <file>${LOG_DIR}/${TEST_LOG_FILE}</file> <append>true</append> </appender> </sift> </appender> ©  DataStax,  All  Rights  Reserved. 19
  • 20. Test  Start/End  Detection   @Rule public TestRule watcher = new TestWatcher() { private String logFile; @Override protected void starting(Description description) { logFile = description.getClassName()+"/"+description.getMethodName()+".log"; logToFile(logFile); } protected void failed(Throwable e, Description description) { threadDumpLogger.error("Test {}.{} failed, thread dump:n{}n", description.getClassName(), description.getMethodName(), getThreadDumps()); logToFile(description.getClassName()+"/after.log"); } protected void finished(Description description) { logToFile(description.getClassName()+"/after.log"); ForbiddenLogEventsDetector.checkForIssues(logFile); } }; ©  DataStax,  All  Rights  Reserved. 20
  • 21. Resources • Gradle (gradle.org) • Docker  (docker.com) • Gradle Dockerized Test  Plugin  (github.com/datastax/gradle-­dockerized-­test-­plugin) • MobilityRPC (http://github.com/npgall/mobility-­rpc) • Remote  JUnit  Testrunner (http://github.com/datastax/remote-­junit-­runner) • JBoss Byteman (http://byteman.jboss.org) • Logback (http://logback.qos.ch/) • Project  Reactor  Addons (github.com/reactor/reactor-­addons),  Logback adapter ©  DataStax,  All  Rights  Reserved. 21
  • 22. Thank  you! Questions? ©  DataStax,  All  Rights  Reserved.22