Hi Alena,

It was a nice to actually meet you during the conference and I updated the
review requests, so please review them and let me know if there is anything
not expected.

Thanks
Alex Ough


On Thu, Apr 3, 2014 at 1:01 PM, Alex Ough <alex.o...@sungardas.com> wrote:

> Well, I'm not sure about that because the help is about how to use @Inject
> in the Spring framework.
>
>
> On Thu, Apr 3, 2014 at 12:49 PM, Alena Prokharchyk <
> alena.prokharc...@citrix.com> wrote:
>
>>  Alex, please feel free to update Wiki docs related to the questions you
>> got Darren's help from. I think this info would be useful for all CS
>> committers.
>>
>>  Thank you,
>> Alena.
>>
>>   From: Alex Ough <alex.o...@sungardas.com>
>> Date: Thursday, April 3, 2014 at 9:22 AM
>> To: Chiradeep Vittal <chiradeep.vit...@citrix.com>, Alena Prokharchyk <
>> alena.prokharc...@citrix.com>, Darren Shepherd <
>> darren.sheph...@citrix.com>
>> Cc: "dev@cloudstack.apache.org" <dev@cloudstack.apache.org>
>>
>> Subject: Re: [DISCUSS]{BEHAVIORAL-CHANGE]Domain-Account-User Sync Up
>> Among Multiple Regions
>>
>>   Forgot to mention this, but it was a great help from Darren.
>> Thanks again, Darren!
>> Alex Ough
>>
>>
>> On Thu, Apr 3, 2014 at 11:56 AM, Alex Ough <alex.o...@sungardas.com>wrote:
>>
>>> All,
>>>
>>>  I updated the patches as per Alena's request.
>>>
>>>  Let me know if there is anything missing/incorrect.
>>> Thanks
>>>  Alex Ough
>>>
>>>
>>> On Wed, Mar 26, 2014 at 1:40 PM, Alex Ough <alex.o...@sungard.com>wrote:
>>>
>>>> Sorry, my bad. I mis-read your comment.
>>>>
>>>>  Thanks for pointing it out.
>>>>  Alex Ough
>>>>
>>>>
>>>> On Wed, Mar 26, 2014 at 12:25 PM, Chiradeep Vittal <
>>>> chiradeep.vit...@citrix.com> wrote:
>>>>
>>>>>  I didn't say "do not use auto wiring". I said the convention is to
>>>>> use @Inject which you didn't have.
>>>>>
>>>>>   From: Alena Prokharchyk <alena.prokharc...@citrix.com>
>>>>> Date: Wednesday, March 26, 2014 at 7:39 AM
>>>>> To: Alex Ough <alex.o...@sungard.com>, "dev@cloudstack.apache.org" <
>>>>> dev@cloudstack.apache.org>
>>>>> Cc: Chiradeep Vittal <chiradeep.vit...@citrix.com>
>>>>>
>>>>> Subject: Re: [DISCUSS]{BEHAVIORAL-CHANGE]Domain-Account-User Sync Up
>>>>> Among Multiple Regions
>>>>>
>>>>>   Alex, I'm attending a conference today, will review the patch
>>>>> tomorrow.
>>>>>
>>>>>  -Alena
>>>>>
>>>>>   From: Alex Ough <alex.o...@sungard.com>
>>>>> Date: Wednesday, March 26, 2014 at 6:35 AM
>>>>> To: Alena Prokharchyk <alena.prokharc...@citrix.com>
>>>>> Cc: "dev@cloudstack.apache.org" <dev@cloudstack.apache.org>,
>>>>> Chiradeep Vittal <chiradeep.vit...@citrix.com>
>>>>> Subject: Re: [DISCUSS]{BEHAVIORAL-CHANGE]Domain-Account-User Sync Up
>>>>> Among Multiple Regions
>>>>>
>>>>>   Alena,
>>>>>
>>>>>  It took a little time to update the patch because I had a vacation
>>>>> last week.
>>>>> Now I uploaded the updated patch for review with below status, so
>>>>> please check them and let me know what you think.
>>>>> I hope it to be merged soon to wrap this up asap.
>>>>>
>>>>>  1. no change with waiting for comments on my recommendation.
>>>>>
>>>>>  2. The two things to turn on the sync-up among multiple regions is
>>>>> to change the class name of "eventNotificationBus" into
>>>>> "MultiRegionEventBus" from "RabbitMQEventBus" as below and change the 
>>>>> value
>>>>> of 'region.full.scan.interval' in Global Settings. And the new classes are
>>>>> never used unless the feature is turned on, so I'm not sure if auto wiring
>>>>> is necessary here and Chiradeep asked not to use @inject in his initial
>>>>> review, so I removed them.
>>>>>       <bean id="eventNotificationBus"
>>>>> class="org.apache.cloudstack.mom.rabbitmq.MultiRegionEventBus">
>>>>>
>>>>>  3. They are not adaptors, but inherited classes to process
>>>>> domain/account/user objects separately.
>>>>>
>>>>>  4. Done
>>>>>
>>>>>  5. Same
>>>>>
>>>>>  6. I removed 'domain path' from AccountResponse & UserResponse.
>>>>>
>>>>>  Thanks
>>>>> Alex Ough
>>>>>
>>>>>
>>>>> On Thu, Mar 13, 2014 at 9:48 PM, Alex Ough <alex.o...@sungard.com>wrote:
>>>>>
>>>>>> What I think based on your comments are
>>>>>>
>>>>>>  1. Well, I have a different thought. I'd rather have separated
>>>>>> classes instead of having a class with lots of methods, which makes the
>>>>>> maintenance easier. And as you show as an example, it is possible to 
>>>>>> create
>>>>>> a method and merge them, but I think it is better to provide separate
>>>>>> methods that are exposed outside so that the callers can know what to 
>>>>>> call
>>>>>> with ease.
>>>>>>
>>>>>>  2. Let me look at that.
>>>>>>
>>>>>>  3. I'm not sure why you think they are adapters, but let me look at
>>>>>> that class.
>>>>>>
>>>>>>  4. OK, let me work on this.
>>>>>>
>>>>>>  5. The urls are stored in the region table along with username and
>>>>>> password. Please see 'RegionVO' under
>>>>>> 'engine/schema/src/org/apache/cloudstack/region'.
>>>>>>
>>>>>>  Thanks
>>>>>>  Alex Ough
>>>>>>
>>>>>>
>>>>>> On Thu, Mar 13, 2014 at 5:49 PM, Alena Prokharchyk <
>>>>>> alena.prokharc...@citrix.com> wrote:
>>>>>>
>>>>>>> Alex,
>>>>>>>
>>>>>>> There are so many classes, and it makes it hard to see/review the
>>>>>>> feature.
>>>>>>> Can you come up with some sort of visual diagram, so its easier to
>>>>>>> see
>>>>>>> which component is responsible for what task, and how they interact
>>>>>>> with
>>>>>>> each other.
>>>>>>>
>>>>>>> My suggestions:
>>>>>>>
>>>>>>> 1) I think it would make sense to merge all the classes doing utils
>>>>>>> tasks
>>>>>>> (forming and sending Apis to CS) - UserInterface, AccountInterface,
>>>>>>> DomainInterface - to a single util class. They do return generic
>>>>>>> types
>>>>>>> anyway - JsonArray/JsonObject, and they do perform a generic util
>>>>>>> task -
>>>>>>> forming and sending the request to the CS. I would merge them all
>>>>>>> with the
>>>>>>> BaseInterface and name it with the name indicating that this class is
>>>>>>> responsible for sending API calls against CS. And this would be your
>>>>>>> util
>>>>>>> class.
>>>>>>>
>>>>>>>
>>>>>>> You should also come up with some generic method that forms the
>>>>>>> requests
>>>>>>> to CS APIs to make the code cleaner.
>>>>>>>
>>>>>>> For example, look at these 2:
>>>>>>>
>>>>>>>
>>>>>>>  public JSONObject lockUser(String userId) throws Exception {
>>>>>>>     String paramStr = "command=lockUser&id=" + userId +
>>>>>>> "&response=json&sessionkey=" + URLEncoder.encode(getSessionKey(),
>>>>>>> "UTF-8");
>>>>>>>     return sendApacheGet(paramStr);
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>> public JSONObject disableUser(String userId) throws Exception {
>>>>>>>
>>>>>>>     String paramStr = "command=disableUser&id=" + userId +
>>>>>>> "&response=json&sessionkey=" + URLEncoder.encode(getSessionKey(),
>>>>>>> "UTF-8");
>>>>>>>     return sendApacheGet(paramStr);
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>> You repeat appending json and session key in all of them. Why not
>>>>>>> create
>>>>>>> some generic method where you pass a) commandName 2) map of
>>>>>>> parameters,
>>>>>>> and make that method return JsonObject/JsonArray?
>>>>>>>
>>>>>>>
>>>>>>> 2) I would suggest you utilize Spring framework in your code and
>>>>>>> auto wire
>>>>>>> all the dependencies by using @Inject rather than locating them with
>>>>>>> the
>>>>>>> components lifecycle. Please refer to Apache Wiki:
>>>>>>>
>>>>>>>
>>>>>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Using+Spring+in+Clou
>>>>>>> dStack
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 3) AccountFullSyncProcessor/DomainFullSyncProcessor/<other
>>>>>>> processors>.
>>>>>>> These looks like adaptors to me. Have you looked at how AdapterBase
>>>>>>> is
>>>>>>> utilized in CS? You should take a look at it.
>>>>>>>
>>>>>>>
>>>>>>> 4) I see that you have a folder called "simulator". Does this folder
>>>>>>> contain Test classes used by some kind of simulator? Or would they
>>>>>>> be used
>>>>>>> in production? If its just for testing, please rename them by
>>>>>>> putting the
>>>>>>> word "Simulator" in the name. Look at how other simulator classes are
>>>>>>> named in CS (SimulatorImageStoreLifeCycleImpl.java for example)
>>>>>>>
>>>>>>> 5) In the code, I haven't noticed where you store/read the end point
>>>>>>> URL
>>>>>>> to the CS Management server - the server address you are gonna send
>>>>>>> your
>>>>>>> requests to. If for example, you have MS1 and MS2, will your plugin
>>>>>>> from
>>>>>>> MS1 ever sends a request to MS2? And if it sends the request only to
>>>>>>> MS1,
>>>>>>> what ip address it uses?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -Alena.
>>>>>>>
>>>>>>> On 3/13/14, 2:58 PM, "Alex Ough" <alex.o...@sungard.com> wrote:
>>>>>>>
>>>>>>> >They are not called outside and only called from 'subscriber'
>>>>>>> classes and
>>>>>>> >FullScanner class.
>>>>>>> >
>>>>>>> >Do you think these name changes are ok?
>>>>>>> >
>>>>>>> >    - BaseInterface - UserInterface, AccountInterface,
>>>>>>> DomainInterface
>>>>>>> >       => APICaller - APIUserCaller, APIAccountCaller,
>>>>>>> APIDomainCaller
>>>>>>> >
>>>>>>> >    - BaseService - UserService, AccountService, DomainService
>>>>>>> >      => RemoteResourceProcessor - RemoteUserProcessor,
>>>>>>> >RemoteAccountProcessor, RemoteDomainProcessor
>>>>>>> >
>>>>>>> >    - FullSyncProcessor - UserFullSyncProcessor,
>>>>>>> AccountFullSyncProcessor,
>>>>>>> >DomainFullSyncProcessor
>>>>>>> >      => no change
>>>>>>> >
>>>>>>> >    - RemoteEventProcessor - RemoteUserEventProcessor,
>>>>>>> >RemoteAccountEventProcessor, RemoteDomainEventProcessor
>>>>>>> >      => no change
>>>>>>> >
>>>>>>> >Thanks
>>>>>>> >Alex Ough
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> >On Thu, Mar 13, 2014 at 3:58 PM, Alena Prokharchyk <
>>>>>>> >alena.prokharc...@citrix.com> wrote:
>>>>>>> >
>>>>>>> >> You extract stuff into interfaces when the methods are meant to be
>>>>>>> >>called
>>>>>>> >> from different classes/Managers. Do you implement to add APIs for
>>>>>>> your
>>>>>>> >> plugins? Can your plugin be used by any other CS manager -
>>>>>>> RegionManager
>>>>>>> >> for example? If the answer is yes, then you would need an
>>>>>>> interface. If
>>>>>>> >> not, abstract class is fine, just remove Interface/Service from
>>>>>>> the
>>>>>>> >>name.
>>>>>>> >> Also rename your classes to reflect the purpose they are
>>>>>>> developed for;
>>>>>>> >> account/user/domain is way too generic and already used in other
>>>>>>> CS
>>>>>>> >> packages.
>>>>>>> >>
>>>>>>> >>
>>>>>>> >>
>>>>>>> >>
>>>>>>> >>
>>>>>>> >> On 3/13/14, 1:50 PM, "Alex Ough" <alex.o...@sungard.com> wrote:
>>>>>>> >>
>>>>>>> >> >Patch B,
>>>>>>> >> >
>>>>>>> >> >1. The reason why I use abstract classes instead of interfaces is
>>>>>>> >>because
>>>>>>> >> >there are some basic methods that are used among the inherited
>>>>>>> >>classes, so
>>>>>>> >> >I'm not sure why it has to be an interface.
>>>>>>> >> >
>>>>>>> >> >2. These are the abstract base classes along with their inherited
>>>>>>> >>classes
>>>>>>> >> >and they are grouped by their behavior.
>>>>>>> >> >    - BaseInterface - UserInterface, AccountInterface,
>>>>>>> DomainInterface
>>>>>>> >> >    - BaseService - UserService, AccountService, DomainService
>>>>>>> >> >    - FullSyncProcessor - UserFullSyncProcessor,
>>>>>>> >>AccountFullSyncProcessor,
>>>>>>> >> >DomainFullSyncProcessor
>>>>>>> >> >    - RemoteEventProcessor - RemoteUserEventProcessor,
>>>>>>> >> >RemoteAccountEventProcessor, RemoteDomainEventProcessor
>>>>>>> >> >
>>>>>>> >> >   => Do you recommend to refactor them into defining interfaces
>>>>>>> and
>>>>>>> >> >creating one class implementing all methods related with each
>>>>>>> user,
>>>>>>> >> >account
>>>>>>> >> >and domain?
>>>>>>> >> >
>>>>>>> >> >3. Let me work on changing names.
>>>>>>> >> >
>>>>>>> >> >Thanks
>>>>>>> >> >Alex Ough
>>>>>>> >> >
>>>>>>> >> >
>>>>>>> >> >
>>>>>>> >> >
>>>>>>> >> >On Thu, Mar 13, 2014 at 3:14 PM, Alena Prokharchyk <
>>>>>>> >> >alena.prokharc...@citrix.com> wrote:
>>>>>>> >> >
>>>>>>> >> >>  Alex, see inline.
>>>>>>> >> >>
>>>>>>> >> >>  -Alena.
>>>>>>> >> >>
>>>>>>> >> >>   From: Alex Ough <alex.o...@sungard.com>
>>>>>>> >> >> Date: Thursday, March 13, 2014 at 1:00 PM
>>>>>>> >> >> To: Alena Prokharchyk <alena.prokharc...@citrix.com>
>>>>>>> >> >> Cc: "dev@cloudstack.apache.org" <dev@cloudstack.apache.org>,
>>>>>>> >>Chiradeep
>>>>>>> >> >> Vittal <chirade...@gmail.com>
>>>>>>> >> >>
>>>>>>> >> >> Subject: Re: [DISCUSS]{BEHAVIORAL-CHANGE]Domain-Account-User
>>>>>>> Sync Up
>>>>>>> >> >> Among Multiple Regions
>>>>>>> >> >>
>>>>>>> >> >>   Hi Alena,
>>>>>>> >> >>
>>>>>>> >> >>  Patch B,
>>>>>>> >> >> I'm not quite familiar with java, so I have a little
>>>>>>> difficulty in
>>>>>>> >> >> following your recommendation.
>>>>>>> >> >> Can you send me an example using 'BaseInterface' and/or
>>>>>>> >> >>'AccountInterface'?
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >>    - What is called an interface in java:
>>>>>>> >> >>
>>>>>>> >>
>>>>>>> http://docs.oracle.com/javase/tutorial/java/concepts/interface.html.
>>>>>>> >> >>    Its a place where all your methods are defined w/o actual
>>>>>>> >> >>implementation.
>>>>>>> >> >>    - Look at any of cloudStack Managers implementation. Take
>>>>>>> for
>>>>>>> >> >>example:
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >>    1. AcccountManagerImpl.java - class where all the methods
>>>>>>> are
>>>>>>> >> >>    implemented. Part of the server package
>>>>>>> >> >>    2. AccountManagerImpl implements 2 interfaces -
>>>>>>> AccountManager and
>>>>>>> >> >>    AccountService. If you want any of your methods to be used
>>>>>>> by
>>>>>>> >> >>    plugins/services, define them in Service interface. If all
>>>>>>> of them
>>>>>>> >> >>are
>>>>>>> >> >>    meant to be used just inside your plugin/or cloudstack
>>>>>>> >>core/server -
>>>>>>> >> >>define
>>>>>>> >> >>    them in Manager interface.
>>>>>>> >> >>    3. I would suggest you rename your classes/interfaces by
>>>>>>> adding
>>>>>>> >>your
>>>>>>> >> >>    feature specific keyword to the name. CloudStack already has
>>>>>>> >> >>AccountService
>>>>>>> >> >>    interface. And BaseInterface name is way too generic. Plus
>>>>>>> you
>>>>>>> >> >>shouldn't
>>>>>>> >> >>    really put an "Interface" to the name.
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >>    It will be very helpful and appreciated.
>>>>>>> >> >>
>>>>>>> >> >>  Patch A,
>>>>>>> >> >> To reduce the number of requests to the remote regions
>>>>>>> >> >> because the syncing is always using the api requests a lot to
>>>>>>> get
>>>>>>> >> >> information of domains/accounts/users from remote regions.
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >>    - you can't ,modify cloudStack core/server code only to fix
>>>>>>> >>problem
>>>>>>> >> >>    that is specific to your plugin/service. The solution for
>>>>>>> your
>>>>>>> >>case
>>>>>>> >> >>will be
>>>>>>> >> >>    - create in memory data structure where you keep
>>>>>>> account/domain
>>>>>>> >> >>    information. Account->domain relationship don't change along
>>>>>>> >>account
>>>>>>> >> >>    lifecycle, as well as the domain path doesn't change for the
>>>>>>> >>domain
>>>>>>> >> >>once
>>>>>>> >> >>    its created. And get the domain path from there.
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >>  And let me change the concatenation into using StringBuilder.
>>>>>>> >> >>
>>>>>>> >> >>  Thanks a lot for your reply.
>>>>>>> >> >> Alex Ough
>>>>>>> >> >>
>>>>>>> >> >>
>>>>>>> >> >> On Thu, Mar 13, 2014 at 2:41 PM, Alena Prokharchyk <
>>>>>>> >> >> alena.prokharc...@citrix.com> wrote:
>>>>>>> >> >>
>>>>>>> >> >>> Alex, I have some comments.
>>>>>>> >> >>>
>>>>>>> >> >>> Patch B.
>>>>>>> >> >>>
>>>>>>> >> >>> * You shouldn't make your service a part of cloud-mom-rabbitmq
>>>>>>> >>plugin.
>>>>>>> >> >>> Your subscribers/implementation are specific to your feature,
>>>>>>> and
>>>>>>> >>you
>>>>>>> >> >>>need
>>>>>>> >> >>> to introduce a special plugin just for your service.
>>>>>>> >> >>> * AccountInterface and BaseInterface are still regular
>>>>>>> classes. You
>>>>>>> >> >>>should
>>>>>>> >> >>> split them into Service interface /ManagerImpl or Manager
>>>>>>> interface
>>>>>>> >> >>> /ManagerImpl as Chiradeep suggested.
>>>>>>> >> >>> * Once you extract services interfaces, make sure you don't
>>>>>>> use VO
>>>>>>> >> >>>objects
>>>>>>> >> >>> in methods signatures.
>>>>>>> >> >>> * You should really get a use of @Manager interface and
>>>>>>> @Inject
>>>>>>> >> >>> annotations for autowiring your managers instead of setting
>>>>>>> them up
>>>>>>> >> >>>using
>>>>>>> >> >>> ComponentContext.getComponent() in each of your manager
>>>>>>> classes.
>>>>>>> >> >>>
>>>>>>> >> >>>
>>>>>>> >> >>>
>>>>>>> >> >>> Patch A.
>>>>>>> >> >>>
>>>>>>> >> >>> * AccountResponse. Why did you add domain path to the account
>>>>>>> >>response?
>>>>>>> >> >>> You can always retrieve it by a) get domain info from account
>>>>>>> >>response
>>>>>>> >> >>>b)
>>>>>>> >> >>> execute listDomains&domainId to get the domain path. Try not
>>>>>>> to
>>>>>>> >> >>>overload
>>>>>>> >> >>> the response with attributes that don't belong to response's
>>>>>>> first
>>>>>>> >> >>>class
>>>>>>> >> >>> object.
>>>>>>> >> >>>
>>>>>>> >> >>>
>>>>>>> >> >>> Generic comments.
>>>>>>> >> >>>
>>>>>>> >> >>> * I can see that you do a lot of string concatenation this
>>>>>>> way:
>>>>>>> >> >>>paramStr
>>>>>>> >> >>> += "&email=" + email + "&firstname=" + firstName +
>>>>>>> "&lastname=" +
>>>>>>> >> >>>lastName
>>>>>>> >> >>> + "&accounttype=" + accountType;
>>>>>>> >> >>> I would suggest to use StringBuilder instead.
>>>>>>> >> >>>
>>>>>>> >> >>>
>>>>>>> >> >>>
>>>>>>> >> >>>
>>>>>>> >> >>> On 3/13/14, 9:33 AM, "Alex Ough" <alex.o...@sungard.com>
>>>>>>> wrote:
>>>>>>> >> >>>
>>>>>>> >> >>> >Chiradeep,
>>>>>>> >> >>> >
>>>>>>> >> >>> >Any comments on them?
>>>>>>> >> >>> >
>>>>>>> >> >>> >Thanks
>>>>>>> >> >>> >Alex Ough
>>>>>>> >> >>> >
>>>>>>> >> >>> >
>>>>>>> >> >>> >On Wed, Mar 12, 2014 at 10:58 AM, Alex Ough <
>>>>>>> alex.o...@sungard.com>
>>>>>>> >> >>> wrote:
>>>>>>> >> >>> >
>>>>>>> >> >>> >> And I also uploaded the patch B that includes new
>>>>>>> implementation
>>>>>>> >>to
>>>>>>> >> >>> >> support multi regions.
>>>>>>> >> >>> >>
>>>>>>> >> >>> >> Thanks
>>>>>>> >> >>> >> Alex Ough
>>>>>>> >> >>> >>
>>>>>>> >> >>> >>
>>>>>>> >> >>> >> On Wed, Mar 12, 2014 at 10:17 AM, Alex Ough
>>>>>>> >><alex.o...@sungard.com>
>>>>>>> >> >>> >>wrote:
>>>>>>> >> >>> >>
>>>>>>> >> >>> >>> I uploaded the patch A that includes only core changes, so
>>>>>>> >>please
>>>>>>> >> >>> >>>review
>>>>>>> >> >>> >>> it and let me know if you have any comments.
>>>>>>> >> >>> >>>
>>>>>>> >> >>> >>> Thanks
>>>>>>> >> >>> >>> Alex Ough
>>>>>>> >> >>> >>>
>>>>>>> >> >>> >>>
>>>>>>> >> >>> >>> On Wed, Mar 12, 2014 at 8:24 AM, Alex Ough
>>>>>>> >><alex.o...@sungard.com>
>>>>>>> >> >>> >>>wrote:
>>>>>>> >> >>> >>>
>>>>>>> >> >>> >>>> Hi Chiradeep,
>>>>>>> >> >>> >>>>
>>>>>>> >> >>> >>>> Can you give me the example of the Singleton service
>>>>>>> class you
>>>>>>> >> >>> >>>>mentioned?
>>>>>>> >> >>> >>>> I'm not sure if you are asking the name changes or else
>>>>>>> because
>>>>>>> >> >>>those
>>>>>>> >> >>> >>>> classes are abstract classes and do not need to be
>>>>>>> singleton
>>>>>>> >> >>>class.
>>>>>>> >> >>> >>>>
>>>>>>> >> >>> >>>> And let me try the refactoring and ask confirmations to
>>>>>>> you,
>>>>>>> >>so I
>>>>>>> >> >>> >>>>hope I
>>>>>>> >> >>> >>>> can get the reply soon.
>>>>>>> >> >>> >>>>
>>>>>>> >> >>> >>>> Thanks
>>>>>>> >> >>> >>>> Alex Ough
>>>>>>> >> >>> >>>>
>>>>>>> >> >>> >>>>
>>>>>>> >> >>> >>>> On Wed, Mar 12, 2014 at 4:13 AM, Daan Hoogland
>>>>>>> >> >>> >>>><daan.hoogl...@gmail.com>wrote:
>>>>>>> >> >>> >>>>
>>>>>>> >> >>> >>>>> H Alex, I considder Chiradeeps comments quite valid and
>>>>>>> >>serious
>>>>>>> >> >>> >>>>>enough
>>>>>>> >> >>> >>>>> to anticipate not making friday 14:00 CET. That would
>>>>>>> mean no
>>>>>>> >> >>>merge
>>>>>>> >> >>> >>>>> before 4.4. Can you live with that?
>>>>>>> >> >>> >>>>>
>>>>>>> >> >>> >>>>> On Wed, Mar 12, 2014 at 6:40 AM, Chiradeep Vittal
>>>>>>> >> >>> >>>>> <chiradeep.vit...@citrix.com> wrote:
>>>>>>> >> >>> >>>>> > Hi Alex,
>>>>>>> >> >>> >>>>> >
>>>>>>> >> >>> >>>>> > If you look at the general design of CloudStack,
>>>>>>> there are
>>>>>>> >> >>> >>>>>Singleton
>>>>>>> >> >>> >>>>> > service interfaces which are then implemented with
>>>>>>> real
>>>>>>> >> >>>classes.
>>>>>>> >> >>> >>>>>This
>>>>>>> >> >>> >>>>> > facilitates easy testing by mocking the interface. In
>>>>>>> your
>>>>>>> >>new
>>>>>>> >> >>> >>>>>files
>>>>>>> >> >>> >>>>> > (BaseInterface, which by the way is NOT an interface,
>>>>>>> >> >>> >>>>>AccountService,
>>>>>>> >> >>> >>>>> > which is NOT a service like other CloudStack
>>>>>>> services, and
>>>>>>> >>so
>>>>>>> >> >>>on),
>>>>>>> >> >>> >>>>> this
>>>>>>> >> >>> >>>>> > design paradigm is not followed. Therefore it is
>>>>>>> >>incongruous to
>>>>>>> >> >>> the
>>>>>>> >> >>> >>>>> rest
>>>>>>> >> >>> >>>>> > of the code base.
>>>>>>> >> >>> >>>>> >
>>>>>>> >> >>> >>>>> > Furthermore this has been plopped right in the middle
>>>>>>> of
>>>>>>> >>other
>>>>>>> >> >>> core
>>>>>>> >> >>> >>>>> > CloudStack code (server/src/com/cloud/region/). If
>>>>>>> you look
>>>>>>> >>at
>>>>>>> >> >>>the
>>>>>>> >> >>> >>>>> > EventBus logic, it has been written as a plugin,
>>>>>>> thereby
>>>>>>> >> >>>enabling
>>>>>>> >> >>> >>>>> users
>>>>>>> >> >>> >>>>> > who do not need it to disable it. This level of
>>>>>>> >>configuration
>>>>>>> >> >>>is
>>>>>>> >> >>> >>>>> needed
>>>>>>> >> >>> >>>>> > and I can't find it.
>>>>>>> >> >>> >>>>> >
>>>>>>> >> >>> >>>>> > So, to  summarize:
>>>>>>> >> >>> >>>>> > 1. Split it into patches. Patch A is the change to
>>>>>>> the core
>>>>>>> >> >>>DAOs,
>>>>>>> >> >>> >>>>>db
>>>>>>> >> >>> >>>>> > logic, schema upgrade code, etc.
>>>>>>> >> >>> >>>>> > 2. Patch B is the actual sync service written as an
>>>>>>> optional
>>>>>>> >> >>> plugin
>>>>>>> >> >>> >>>>> with
>>>>>>> >> >>> >>>>> > the package name space of org.apache.
>>>>>>> >> >>> >>>>> >
>>>>>>> >> >>> >>>>> > On 3/11/14, 3:09 PM, "Alex Ough" <
>>>>>>> alex.o...@sungard.com>
>>>>>>> >> wrote:
>>>>>>> >> >>> >>>>> >
>>>>>>> >> >>> >>>>> >>Hi Daan,
>>>>>>> >> >>> >>>>> >>
>>>>>>> >> >>> >>>>> >>I didn't update the patch after the couple of works
>>>>>>> because
>>>>>>> >>I
>>>>>>> >> >>> >>>>>wanted
>>>>>>> >> >>> >>>>> to do
>>>>>>> >> >>> >>>>> >>it with others Chiradeep asked if any.
>>>>>>> >> >>> >>>>> >>Let me know when you want me to.
>>>>>>> >> >>> >>>>> >>
>>>>>>> >> >>> >>>>> >>Thanks
>>>>>>> >> >>> >>>>> >>Alex Ough
>>>>>>> >> >>> >>>>> >>
>>>>>>> >> >>> >>>>> >>
>>>>>>> >> >>> >>>>> >>On Tue, Mar 11, 2014 at 4:37 PM, Daan Hoogland
>>>>>>> >> >>> >>>>> >><daan.hoogl...@gmail.com>wrote:
>>>>>>> >> >>> >>>>> >>
>>>>>>> >> >>> >>>>> >>> I will call the merge in a moment, but won't do it
>>>>>>> >> >>>immediately.
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>> Be there for me when any issues come up. If not I
>>>>>>> will
>>>>>>> >>revert
>>>>>>> >> >>> it.
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>> @Chiradeep: did Alex answer your concerns
>>>>>>> adequately?
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>> kind regards,
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>> On Tue, Mar 11, 2014 at 6:43 PM, Alex Ough
>>>>>>> >> >>> >>>>><alex.o...@sungard.com>
>>>>>>> >> >>> >>>>> >>>wrote:
>>>>>>> >> >>> >>>>> >>> > I worked on a couple of items, so can you give me
>>>>>>> the
>>>>>>> >> >>> >>>>> confirmation for
>>>>>>> >> >>> >>>>> >>> the
>>>>>>> >> >>> >>>>> >>> > rest items so that I can wrap this up?
>>>>>>> >> >>> >>>>> >>> > I really want to include this into 4.4.
>>>>>>> >> >>> >>>>> >>> >
>>>>>>> >> >>> >>>>> >>> > Thanks
>>>>>>> >> >>> >>>>> >>> > Alex Ough
>>>>>>> >> >>> >>>>> >>> >
>>>>>>> >> >>> >>>>> >>> >
>>>>>>> >> >>> >>>>> >>> > On Mon, Mar 10, 2014 at 3:41 PM, Alex Ough
>>>>>>> >> >>> >>>>><alex.o...@sungard.com
>>>>>>> >> >>> >>>>> >
>>>>>>> >> >>> >>>>> >>> wrote:
>>>>>>> >> >>> >>>>> >>> >
>>>>>>> >> >>> >>>>> >>> >> Please see my reply/question in blue.
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >> Thanks
>>>>>>> >> >>> >>>>> >>> >> Alex Ough
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >> On Mon, Mar 10, 2014 at 1:25 PM, Chiradeep
>>>>>>> Vittal <
>>>>>>> >> >>> >>>>> >>> >> chiradeep.vit...@citrix.com> wrote:
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>> I havenĀ¹t looked at it because it is huge. But
>>>>>>> >> >>>preliminary
>>>>>>> >> >>> >>>>>scan:
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>> - there are unit tests missing for changes to
>>>>>>> core CS
>>>>>>> >> >>>code
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>          Unit tests for only new classes were
>>>>>>> added
>>>>>>> >> >>>because I
>>>>>>> >> >>> >>>>> >>>couldn't
>>>>>>> >> >>> >>>>> >>> >> find unit tests of the ones I modified
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>> - uses com.amazonaws.util.json (why?)
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>          They are used to handle the json
>>>>>>> objects. Let
>>>>>>> >>me
>>>>>>> >> >>> know
>>>>>>> >> >>> >>>>> if you
>>>>>>> >> >>> >>>>> >>> >> want me to replace it with another.
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >> - code format does not follow coding convention (
>>>>>>> >> >>>placement
>>>>>>> >> >>> of
>>>>>>> >> >>> >>>>> {},
>>>>>>> >> >>> >>>>> >>>camel
>>>>>>> >> >>> >>>>> >>> >>> case api_interface )
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>          Done
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>> - package namespace is com.cloud instead of
>>>>>>> org.apache
>>>>>>> >> >>>for
>>>>>>> >> >>> >>>>>new
>>>>>>> >> >>> >>>>> files
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>          I didn't know that. So do I need to use
>>>>>>> >> >>>'org.apache'
>>>>>>> >> >>> >>>>> package
>>>>>>> >> >>> >>>>> >>> for
>>>>>>> >> >>> >>>>> >>> >> all new classes?
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >> - no file-level comments. What does
>>>>>>> LocalAccountManager
>>>>>>> >> >>>do?
>>>>>>> >> >>> >>>>>Why
>>>>>>> >> >>> >>>>> does
>>>>>>> >> >>> >>>>> >>>it
>>>>>>> >> >>> >>>>> >>> >>> exist? Etc.
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>          Done.
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>> - No interfaces, only abstract classes. No use
>>>>>>> of
>>>>>>> >> >>>@Inject.
>>>>>>> >> >>> >>>>>While
>>>>>>> >> >>> >>>>> >>>this
>>>>>>> >> >>> >>>>> >>> >>> might be OK, it does make it harder to test and
>>>>>>> does
>>>>>>> >>not
>>>>>>> >> >>> >>>>>follow
>>>>>>> >> >>> >>>>> the
>>>>>>> >> >>> >>>>> >>> rest
>>>>>>> >> >>> >>>>> >>> >>> of ACS conventions.
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>         I don't think there is any interface,
>>>>>>> but let
>>>>>>> >>me
>>>>>>> >> >>>know
>>>>>>> >> >>> >>>>>if
>>>>>>> >> >>> >>>>> you
>>>>>>> >> >>> >>>>> >>> find
>>>>>>> >> >>> >>>>> >>> >> any.
>>>>>>> >> >>> >>>>> >>> >>         Any recommendation to replace @inject?
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>> I would urge the submitter to break up the
>>>>>>> submission.
>>>>>>> >> >>> >>>>> >>> >>> A) the changes to CS core, with explanations /
>>>>>>> >>comments
>>>>>>> >> >>>and
>>>>>>> >> >>> >>>>> tests
>>>>>>> >> >>> >>>>> >>> >>> B) the sync service should be an interface with
>>>>>>> >>concrete
>>>>>>> >> >>> >>>>> >>> implementations
>>>>>>> >> >>> >>>>> >>> >>> in its own package
>>>>>>> >> >>> >>>>> >>> >>> C) more tests
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>         can you give me a little specific what
>>>>>>> kind of
>>>>>>> >> >>>tests
>>>>>>> >> >>> >>>>>you
>>>>>>> >> >>> >>>>> need
>>>>>>> >> >>> >>>>> >>> >> more?
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>> >>>  On 3/10/14, 3:37 AM, "Daan Hoogland"
>>>>>>> >> >>> >>>>><daan.hoogl...@gmail.com>
>>>>>>> >> >>> >>>>> >>>wrote:
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>> >Hi everyody,
>>>>>>> >> >>> >>>>> >>> >>> >
>>>>>>> >> >>> >>>>> >>> >>> >The people at sungard have been making this
>>>>>>> change
>>>>>>> >>for
>>>>>>> >> >>>4.4
>>>>>>> >> >>> >>>>>and
>>>>>>> >> >>> >>>>> I
>>>>>>> >> >>> >>>>> >>>want
>>>>>>> >> >>> >>>>> >>> >>> >to merge/apply it this week. It is more then a
>>>>>>> >> >>>screenfull
>>>>>>> >> >>> >>>>>and
>>>>>>> >> >>> >>>>> might
>>>>>>> >> >>> >>>>> >>> >>> >cause issue is a setup or two.
>>>>>>> >> >>> >>>>> >>> >>> >
>>>>>>> >> >>> >>>>> >>> >>> >have a look at
>>>>>>> https://reviews.apache.org/r/17790/
>>>>>>> >> >>> >>>>> >>> >>> >
>>>>>>> >> >>> >>>>> >>> >>> >a ref to ticket and fs page are in the review
>>>>>>> >>request.
>>>>>>> >> >>> >>>>> >>> >>> >
>>>>>>> >> >>> >>>>> >>> >>> >kind regards,
>>>>>>> >> >>> >>>>> >>> >>> >--
>>>>>>> >> >>> >>>>> >>> >>> >Daan
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>>
>>>>>>> >> >>> >>>>> >>> >>
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>> --
>>>>>>> >> >>> >>>>> >>> Daan
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >>>
>>>>>>> >> >>> >>>>> >
>>>>>>> >> >>> >>>>>
>>>>>>> >> >>> >>>>>
>>>>>>> >> >>> >>>>>
>>>>>>> >> >>> >>>>> --
>>>>>>> >> >>> >>>>> Daan
>>>>>>> >> >>> >>>>>
>>>>>>> >> >>> >>>>>
>>>>>>> >> >>> >>>>
>>>>>>> >> >>> >>>
>>>>>>> >> >>> >>
>>>>>>> >> >>>
>>>>>>> >> >>>
>>>>>>> >> >>
>>>>>>> >>
>>>>>>> >>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to