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