cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wilderrodrigues <...@git.apache.org>
Subject [GitHub] cloudstack pull request: Test cmd rebase
Date Tue, 09 Sep 2014 23:54:50 GMT
GitHub user wilderrodrigues opened a pull request:

    https://github.com/apache/cloudstack/pull/18

    Test cmd rebase

    This is a new Pull Request in order to fix the conflicts we found in the old pull request
#14 . I will put the most update version of the description here:
    
    Pull request of changes in the "cloud-server" module
    
    In the last 10 weeks we have worked in the cloud-server, focusing our time in the refactor
of the [Vpc]VirtualNetworkApplianceManagerImpl. We had a mains goals increase of Maintainability,
Extensibility, Readability and test coverage. That was just a first step towards the development,
still in progress, of the Redundant Virtual Routers for VPC.
    
    == What has been done so far:
    
    •	The VirtualNetworkApplianceManagerImpl class line numbers dropped from  4440 to 2558
    •	The VpcVirtualNetworkApplianceImpl class line numbers dropped from 1484 to 749
    •	We created 35 new classes in order to split the code/responsibility
    •	We added 97.8% unit test coverage for com.cloud.network.element/router and org.cloud.network.router.deployment
packages
        o	The most complex classes we changed are in those packages
        o	About 1700 lines of unit tests
    •	We executed many Marvin tests that we got from ACS and made compliant with our domain:
        o	test_01_create_account
        o   test_01_add_vm_to_subdomain
        o   test_DeleteDomain
        o   test_forceDeleteDomain
        o   test_updateAdminDetails
        o   test_updateDomainAdminDetails
        o   test_updateUserDetails
        o   test_LoginApiDomain
        o   test_LoginApiUuidResponse
        o   test_privategw_acl
        o   test_01_reset_vm_on_reboot
        o   test_03_restart_network_cleanup
        o   test_05_router_basic
        o   test_06_router_advanced
        o   test_07_stop_router
        o   test_08_start_router
        o   test_09_reboot_router
        o   test_01_create_service_offering
        o   test_02_edit_service_offering
        o   test_03_delete_service_offering
        o	test_01_start_stop_router_after_addition_of_one_guest_network
        o   test_02_reboot_router_after_addition_of_one_guest_network
        o   test_04_chg_srv_off_router_after_addition_of_one_guest_network
        o   test_05_destroy_router_after_addition_of_one_guest_network
        o   test_01_stop_start_router_after_creating_vpc
        o   test_02_reboot_router_after_creating_vpc
    	o   test_04_change_service_offerring_vpc
        o   test_05_destroy_router_after_creating_vpc
        o   test_vpc_remote_access_vpn
        o   test_vpc_site2site_vpn
    
    We started the changes in the network area, trying to identify the differences in the
2 types of network we have. For that we created Basic and Advanced Network Topology classes.
The network topology classes are responsible by invoking the Apply/Setup/Create/Save rules
that were previously done by the [Vpc]VirtualNetworkAppliance. A topology instance is retrieved
via a context object that is injected in the [Vpc]VirtualElement. The context object will
return the most appropriate topology instance based on the Network Type, which is defined
in the Data Centre. That was the first step towards the refactor.
    
    From the topology class we reach the Rule Applier implementation that will be used to
do all the rule setup preparation (i.e. invoke DAOs and prepare the command object). The RuleApplier
interface was extracted from the VirtualNetworkApplianceManagerImpl, where it use to be an
inner interface. For each anonymous implementation of the RuleApplier we created a concrete
class. The rules are used as elements of a Visitor class, which will perform some extra logic,
depending on the rule it's visiting, and call the send commands to router method. The latter
has also been extracted from the VirtualNetworkApplianceManagerImpl and is now in a new helper
class: NetworkHelperImpl.
    
    The visitor has been used because we were aiming to split the responsibility and also
because the way the RuleApplier was implemented before, it was clear that every command sent
to the router was following a 2-steps approach: gather information to create the commands,
apply some logic to send to the router. For those reason we implemented the visitor pattern.
Since we already had the Basic/Advanced Network Topology classes, we created 2 concrete classes
to visit the rules: Basic/Advanced Network Visitors. Both classes extend the abstract class
NetworkTopologyVisitor, which defines all the visit methods per type of rule. By doing so,
we can use the same rule and separate the logic based on the type of visitor that we have
- Basic or Advanced.
    
    Continuing on the refactor, we also added some helper classes for the "getSomething" related
methods. Following this approach we ended up having the following classes:
    
    •	NetworkHelper (interface)
    •	NetworkHelperImpl
    •	VpcNetworkHelperImpl
    •	CommandSetupHelper
    •	NicProfileHelper
    •	RouterControlHelper
    
    Last, but not least - and actually the most crucial part of the code - there was also
a huge refactor in terms of how the routers are deployed. The previous deployeRouter and deployVpcInrouter
methods do not exist any more. Instead of having the logics spread, or sometime tangled, in
the [Vpc]VirtualNetworkApplianceManagerImpl, we have created a Router Deployment Definition
mechanism, with classes that follow the same naming convention. The deployment definition
has 2 implementations, Router and Vpc router, which are created with the aid of a Builder
class. Most of the work, which is common to both implementation, is being done by the RouterDeploymentDefinition
class. The specific bits are done by their implementation. for example, when findOrDeployVirtualrouter()
method is called, it will make sure that precondition are checked, deployment plan is done
and generated and executed. The implementation will vary according to the Deployment Definition
instance we have: Router or VpcR
 outer.
    
    Although it looks like a huge change in the ACS cloud-server core, we kept most of the
original code. Ou mains focus in this first step was to restructure it and make it better
to understand. We have excessively tested our tested via Unit Tests, integration tests and
also manually in order to have the 100% confidence to push the code towards the upstream branch.
    
    Please, if you have doubts/suggestions/change requests, do not hesitate to contact us.
Also feel free to improve the code we change in any aspect you think it's necessary, but do
not forget to share with the community your reasons for doing so.
    
    The Redundant VPC subject has been discussed in a few threads in the last months:
    
    * Working on CloudStack Jira-764:nTier Apps 2.0 : Redundant Virtual Router for VPC email
2 of 2 http://markmail.org/message/56xrscvnmdweoxf5
    * redundant virtual routers for VPCs: http://markmail.org/message/w4ow3ddcpxsic7g6
    * Adding Redundant Routers to VPCs: http://markmail.org/message/hcay37lvfaev6wqw
    
    Look to hear your feedback.
    
    With kind regards,
    Wilder Rodrigues

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/schubergphilis/cloudstack test-cmd-rebase

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/cloudstack/pull/18.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #18
    
----
commit e5f499a5335a7eaf4ec060eb33175ebf7165762d
Author: Antonio Fornie <afornie@schubergphilis.com>
Date:   2014-07-03T17:17:26Z

    Rules and visitors for Load Balance Rules

commit ea98c51f4eb5732a5e235514a64aabe449c7f696
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-04T13:11:29Z

    Adding new behaviour to the apply load balancing rules method. The whole chain has been
implemented and we will now test it.

commit c3b35da42bba28dac38a5cb4d878a04efae8c0ba
Author: Antonio Fornie <afornie@schubergphilis.com>
Date:   2014-07-10T14:54:01Z

    Extract general behavior to Router and Vpc delegates

commit 7a7aaf7918569a48a20f404791d87cd59320e34e
Author: Antonio Fornie <afornie@schubergphilis.com>
Date:   2014-07-11T13:07:35Z

    Fix dependency problem. Extract and unify router deployment stuff

commit e64664f8561e39df3a250235317fd59af3d370a6
Author: Wilder Rodrigues <wilder@ekhos-01.ekhos-01>
Date:   2014-07-13T12:34:23Z

    Adding Firewall Rules to comply with the Visitor pattern implementation; refactoring the
applyRules so we can reuse it.

commit cb8b56586ce37aca0ed37feed739b891789e0018
Author: Wilder Rodrigues <wilder@ekhos-01.ekhos-01>
Date:   2014-07-14T09:34:48Z

    changing accessor modifier in instance variables

commit a9d751c7f2daee997a975892ff76645b1e3bf0a1
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-14T09:52:51Z

    fixing checkstyles

commit 22d4171da69473c29c916c88ad37cbf236eb0346
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-14T14:20:28Z

    finished firewall rules and load balancing rules; fixed all the injection problems; added
VirtualMachineManager to the appliance factory to be injected.

commit 8f9b7de0374ef4012be77a79ecd9ab911acf64f9
Author: Daan Hoogland <daan@onecht.net>
Date:   2014-07-14T15:50:27Z

    TODO

commit ee700791f1f1d3e733115d59dcadf086e0436f7c
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-14T17:36:29Z

    adding static nat rules. Deploying new VMs is not working due to the appliance refactory,
will check the changes with Antonio tomorrow.

commit 25d11bc793ee15e87e8e96cfb185cd9eea0755d1
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-15T07:23:26Z

    we have to check if VPC is null bfore calling it. VPC is not used in gest networks, so
deploying a new VM was broken.

commit 9983ae38844eaa606c2182ee50181232b5deebc0
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-15T07:38:21Z

    adding apache license headers

commit 4c7b7009db274b5ba8eafe99b140ca0155d8306d
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-15T08:59:42Z

    adding Ip Association and VPN Rules

commit 975cec438aa0a7bdc5fbbaa5d4614efb32688880
Author: Antonio Fornie <afornie@schubergphilis.com>
Date:   2014-07-15T09:06:44Z

    Fix offering setup

commit f6e3e431e6e1242db6591035b34ef89c311c97fe
Author: Daan Hoogland <daan@onecht.net>
Date:   2014-07-15T09:28:49Z

    package rename

commit 82c8d6b6f1917a1e106725f498f0803c0fdc1f86
Author: Antonio Fornie <afornie@schubergphilis.com>
Date:   2014-07-15T09:54:58Z

    Temporary put state info in a state object

commit be8e1de69396b41e9dc8a3545eb8d9ecac728de5
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-15T11:50:37Z

    fixing the classes relationship; adding beans properly in the spring context; using the
right basic/advance stuff; testing ip and port forwarding rules

commit 5ee648cfb1c597473f114c3651bc3fb49c136a11
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-15T13:56:02Z

    adding password to router rules; moving the advance code to the advance net topology.

commit 1c945cbb0f26854ccc279174645e4352230ab9d1
Author: Antonio Fornie <afornie@schubergphilis.com>
Date:   2014-07-15T16:52:54Z

    Unify and encapsulate deployment flow methods and params

commit 485c7d30e976eb273e561ade23a31dbb19d56b26
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-16T05:38:33Z

    adding userdata to router and ssh pub key to router rules.

commit e191bab06483692dbf36cf49db2198cce26f6f8e
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-16T06:20:52Z

    making instance variables compliant with ACS convention

commit 0321f36ccd6be3c594736cfbea8f5040616e4ec5
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-16T07:30:10Z

    adding user data pwd rules

commit 46ac5762edd68bcfced70c6893370ef37e734139
Author: wrodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-16T12:24:48Z

    adding DHCP entry rules

commit 7759232daf21114e7e4db27508c8b5caca72d157
Author: wrodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-16T13:01:59Z

    fixing injection of beans with a relationship

commit 3df2290e4a4b64da06c62dd6c6a8e577a20a65d0
Author: Daan Hoogland <daan@onecht.net>
Date:   2014-07-16T14:57:54Z

    whitespace

commit 15b4f3075bf220336b5a910885b6627991dcaec5
Author: wrodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-16T15:43:09Z

    fixing the injection of the networkDao

commit e9b1b0461342fa2f9faad858468061ada07fc3b5
Author: Daan Hoogland <daan@onecht.net>
Date:   2014-07-16T15:43:34Z

    mv to better name
    
    oversimplified test added

commit 8af47e4d3cc03ad6f86ca6de890a9f792eaf8c4a
Author: Antonio Fornie <afornie@schubergphilis.com>
Date:   2014-07-16T17:11:47Z

    Deployment more OO - Objects with data and behavior

commit 6a0008bc9e14bdad917d4ae9f256caf9bf7adbb8
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-17T05:41:59Z

    replacing my IP by localhost to avoid problems with my environment

commit a7342720c7f7f565c1fd0ae8643cad69da9858db
Author: Wilder Rodrigues <wrodrigues@schubergphilis.com>
Date:   2014-07-17T05:57:29Z

    fixing import in virtual router element and checkstyle in dhcp entry related changes

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message