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 > >>> >>>>> > >>> >>>>> > >>> >>>> > >>> >>> > >>> >> > >>> > >>> > >> > >