We can use the same ids & names, but we don't have to use the same ids if we use names, which is a little easier because names are user readable but ids are not, so we don't need to memorize/check all the ids when we add new regions in multiple regions, which can be confusing.
Thanks Alex Ough On Tue, Jun 24, 2014 at 8:33 PM, Alena Prokharchyk < alena.prokharc...@citrix.com> wrote: > Aren’t we supposed to sync the regions across the multiple regions Dbs? > Because that’s what region FS states: > > > https://cwiki.apache.org/confluence/display/CLOUDSTACK/AWS-Style+Regions+Functional+Spec, > “Adding 2nd region” paragraph, bullet #4: > > 1. Install a 2nd CS instance. > > 2. While installing database set region_id using -r option in > cloud-setup-databases script (Make sure *database_key* is same across all > regions). > > *cloud-setup-databases cloud:**<**dbpassword**>**@localhost > --deploy-as=root:**<**password**>** -e **<**encryption_type**>** -m **<* > *management_server_key**>** -k **<**database_key**> **-r <region_id>* > > 3. Start mgmt server > > 4. *Using addRegion API, add region 1 to region 2 and also region 2 to > region 1.* > > > I assume that we expect the admin to add the region with the same name > and the same id to ALL regions Dbs (both id and name should be passed to > createRegion call). So they are all in sync. Isn’t it the requirement? If > so, we should rely on the fact that all regions Dbs will have the same set > of regions having the same ids and names cross regions. > > > Thanks, > > Alena. > From: Alex Ough <alex.o...@sungardas.com> > Date: Tuesday, June 24, 2014 at 5:17 PM > To: Alena Prokharchyk <alena.prokharc...@citrix.com> > Cc: "dev@cloudstack.apache.org" <dev@cloudstack.apache.org>, Kishan > Kavala <kishan.kav...@citrix.com>, Murali Reddy <murali.re...@citrix.com>, > Ram Ganesh <ram.gan...@citrix.com>, Animesh Chaturvedi < > animesh.chaturv...@citrix.com> > > Subject: Re: Review Request 20099: Domain-Account-User Sync Up Among > Multiple Regions (Core Changes) > > What I'm trying to say is that when we pass the ids of regions, the > receivers do not know what the originated region is and the id of each > region is not same across all the regions. > > Thanks > Alex Ough > > > On Tue, Jun 24, 2014 at 7:35 PM, Alena Prokharchyk < > alena.prokharc...@citrix.com> wrote: > >> Alex, thank you for summarizing. >> >> I still don’t see why id can’t be unique across regions as you can >> control the id assignment – id is required when createRegion call is made. >> And that’s how the region should be represented in other region’s Dbs – by >> its id that is unique across the regions. Kishan/Murali, please confirm. >> >> Thank you, >> Alena. >> >> From: Alex Ough <alex.o...@sungardas.com> >> Date: Tuesday, June 24, 2014 at 4:22 PM >> To: "dev@cloudstack.apache.org" <dev@cloudstack.apache.org> >> Cc: Alena Prokharchyk <alena.prokharc...@citrix.com>, Kishan Kavala < >> kishan.kav...@citrix.com>, Murali Reddy <murali.re...@citrix.com>, Ram >> Ganesh <ram.gan...@citrix.com>, Animesh Chaturvedi < >> animesh.chaturv...@citrix.com> >> >> Subject: Re: Review Request 20099: Domain-Account-User Sync Up Among >> Multiple Regions (Core Changes) >> >> All, >> >> There is one open question in this topic, which is to figure out which >> value is appropriate to pass the region object, id or name? >> During this implementation, we decided to add the information of regions >> where user/account/domain objects have been originally >> created/modified/removed. >> But the ids of regions are not same across the regions and currently the >> regions do not have uuids(they will not be same either if we add them to >> regions), so I'd like to use names. >> >> Please let me know what you think. >> Thanks >> Alex Ough >> >> >> On Tue, Jun 24, 2014 at 7:05 PM, Animesh Chaturvedi < >> animesh.chaturv...@citrix.com> wrote: >> >>> Let’s have the discussion on dev mailing list >>> >>> >>> >>> Thanks >>> >>> Animesh >>> >>> >>> >>> *From:* Alena Prokharchyk >>> *Sent:* Tuesday, June 24, 2014 3:06 PM >>> *To:* Alex Ough; Kishan Kavala; Murali Reddy >>> *Cc:* Animesh Chaturvedi; Ram Ganesh >>> >>> *Subject:* Re: Review Request 20099: Domain-Account-User Sync Up Among >>> Multiple Regions (Core Changes) >>> >>> >>> >>> Adding Kishan to the thread as he was the one who implemented the region >>> feature originally. >>> >>> >>> >>> Kishan, in a situation when there are 2 regions in the system, we expect >>> “region” table to be populated with the same id/name in both Dbs for both >>> regions, right? So my question is – what uniquely identifies the region in >>> CS system in cross region setup – id/name? >>> >>> >>> >>> That unique identifier should be the value that is passed to the calls >>> you modify, Alex. WE can’t just pass some random name to the call without >>> making any further verification. >>> >>> >>> >>> Kishan/Murali, please help to verify this part of Alex’s fix as it >>> should really be someone with an expertise in Regions. I’ve reviewed the >>> rest of the feature, just this one item is open. See my latest comment to >>> the https://reviews.apache.org/r/17790/diff/?page=1#0 as well as refer >>> to this email thread for the context. >>> >>> >>> >>> -Alena. >>> >>> >>> >>> *From: *Alena Prokharchyk <alena.prokharc...@citrix.com> >>> *Date: *Tuesday, June 24, 2014 at 2:54 PM >>> *To: *Alex Ough <alex.o...@sungardas.com> >>> *Subject: *Re: Review Request 20099: Domain-Account-User Sync Up Among >>> Multiple Regions (Core Changes) >>> >>> >>> >>> That what would everybody assume 100% just by looking at the parameter >>> description and parameter – that you refer to region UUID : "Region where >>> this account is created.”/ORIGINATEDREGIONUUID >>> >>> In CS the UUID has a special meaning. It has to have the UUID format, >>> and its randomly generated value that is stored in the DB along with the >>> actual db id. I can see that regionVO lacks UUID field. Looks like existing >>> RegionVO object lacks this filed unlike other CS objects (uservm, etc). I >>> will follow up with Murali on that. >>> >>> >>> >>> Alex, so originatedRegionUUID refers to the region name, correct?. Why >>> don’t use the region id instead? That’s what we do when refer to CS objects >>> – we always refer to them by id which is unique. Which is true even for the >>> region: >>> >>> >>> >>> mysql> show create table region; >>> >>> >>> >>> UNIQUE KEY `id` (`id`), >>> >>> UNIQUE KEY `name` (`name`) >>> >>> >>> >>> >>> >>> That’s what you do when you manipulate the region itself >>> (delete/updateRegion) - refer to the region by its id. And this field is >>> returned to you when you call listRegions API: >>> >>> >>> >>> http://localhost:8096/?command=listRegions >>> >>> <region> >>> >>> <id>1</id> >>> >>> <name>Local</name> >>> >>> <endpoint>http://localhost:8080/client/</endpoint> >>> >>> <gslbserviceenabled>true</gslbserviceenabled> >>> >>> <portableipserviceenabled>false</portableipserviceenabled> >>> >>> </region> >>> >>> >>> >>> >>> >>> Please correct if I miss something. >>> >>> -Alena. >>> >>> >>> >>> *From: *Alex Ough <alex.o...@sungardas.com> >>> *Date: *Tuesday, June 24, 2014 at 2:33 PM >>> *To: *Alena Prokharchyk <alena.prokharc...@citrix.com> >>> *Subject: *Re: Review Request 20099: Domain-Account-User Sync Up Among >>> Multiple Regions (Core Changes) >>> >>> >>> >>> Thanks for the clarification, but here is a thing. >>> >>> >>> >>> I'm passing names as the values of originatedRegionUuids because the >>> uuids are randomly generated and the same regions do NOT have the same >>> uuidss. >>> >>> So I'd like to change the parameter types into String. >>> >>> Let me know if you think otherwise. >>> >>> >>> >>> Thanks >>> >>> Alex Ough >>> >>> >>> >>> On Tue, Jun 24, 2014 at 5:17 PM, Alena Prokharchyk < >>> alena.prokharc...@citrix.com> wrote: >>> >>> Alex, >>> >>> >>> >>> take a look at ParamProcessWorker class, and how API parameters are >>> being dispatched/verified. >>> >>> >>> >>> >>> >>> 1) public void processParameters(final BaseCmd cmd, final Map params) >>> method >>> >>> >>> >>> First of all, EntityType parameter should be defined in the @Parameter >>> annotation for the originatedRegionID field. This parameter is used by >>> paramProcessWorker to make "if entity exists" validation >>> >>> >>> >>> >>> >>> 2) Check another method in the same class: >>> >>> >>> >>> private void setFieldValue(final Field field, final BaseCmd cmdObj, >>> final Object paramObj, final Parameter annotation) throws >>> IllegalArgumentException, ParseException { >>> >>> >>> >>> Thats the method responsible for dispatching/setting the field values. >>> Here is the snippet of the code for the case when UUID is defined: >>> >>> >>> >>> case UUID: >>> >>> if (paramObj.toString().isEmpty()) >>> >>> break; >>> >>> final Long internalId = >>> translateUuidToInternalId(paramObj.toString(), annotation); >>> >>> field.set(cmdObj, internalId); >>> >>> break; >>> >>> >>> >>> it always transforms the UUID to Long id, not string. And at the end, it >>> will be internal DB UUID, not the UUID. If you need the UUID, you have to >>> get it by a) retrieving the object from the DB by id b) Getting its UUID >>> property. >>> >>> >>> >>> If you leave it as a String, you will hit IllegalArgumentException at >>> "field.set(cmdObj, internalId);" line. >>> >>> >>> >>> >>> >>> Hope it answers your questions, and let me know if anything else needs >>> to be clarified. >>> >>> >>> >>> -alena. >>> >>> >>> >>> *From: *Alex Ough <alex.o...@sungardas.com> >>> *Date: *Tuesday, June 24, 2014 at 1:57 PM >>> >>> >>> *To: *Alena Prokharchyk <alena.prokharc...@citrix.com> >>> *Subject: *Re: Review Request 20099: Domain-Account-User Sync Up Among >>> Multiple Regions (Core Changes) >>> >>> >>> >>> Why do you want to change UUID to 'Long'? >>> >>> Can you just correct what I fixed? >>> >>> >>> >>> On Tue, Jun 24, 2014 at 4:21 PM, Alena Prokharchyk < >>> alena.prokharc...@citrix.com> wrote: >>> >>> You need to put: >>> >>> >>> >>> * the entityType parameter to the annotation. >>> >>> - Change the type to Long as I’ve already mentioned. Check how other >>> commands handle the parameters (networkId, vpcId, etc) >>> >>> —Alena. >>> >>> >>> >>> *From: *Alex Ough <alex.o...@sungardas.com> >>> *Date: *Tuesday, June 24, 2014 at 12:47 PM >>> >>> >>> *To: *Alena Prokharchyk <alena.prokharc...@citrix.com> >>> *Subject: *Re: Review Request 20099: Domain-Account-User Sync Up Among >>> Multiple Regions (Core Changes) >>> >>> >>> >>> Will this change work? >>> >>> >>> >>> @Parameter(name = ApiConstants.ORIGINATED_REGION_ID, type = >>> CommandType.UUID, description = "Region UUID where this account is >>> created.", since = "4.5") >>> >>> private String originatedRegionUUID; >>> >>> >>> >>> >>> >>> On Tue, Jun 24, 2014 at 3:25 PM, Alex Ough <alex.o...@sungardas.com> >>> wrote: >>> >>> Alena, >>> >>> >>> >>> This is what really frustrates me, but can you give the final items >>> instead of keeping adding more items whenever I post a review, please? >>> >>> Can you gurantee that this is the only item you want me to fix? >>> >>> >>> >>> On Tue, Jun 24, 2014 at 3:04 PM, Alena Prokharchyk < >>> alena.prokharc...@citrix.com> wrote: >>> >>> Alex, as a part of the fix, also change the param name to be regionId >>> (there should be a value in apiconstants already) as the parameter really >>> reflects CS region object, and we usually refer to those as networkID, >>> vpcID (not uuid) although uuid are passed in. Check if the rest of the api >>> changes you've done, respect this rule. Sorry, out of the office now and >>> cant check myself if there are any. >>> >>> -alena >>> >>> >>> > On Jun 24, 2014, at 11:12 AM, "Alena Prokharchyk" < >>> alena.prokharc...@citrix.com> wrote: >>> > >>> > >>> > ----------------------------------------------------------- >>> >>> > This is an automatically generated e-mail. To reply, visit: >>> >>> > https://reviews.apache.org/r/20099/#review46557 >>> > ----------------------------------------------------------- >>> >>> > >>> > >>> > Alex, one small thing. >>> > >>> > Just noticed that in the API commands you pass regionUUID as a string. >>> You should pass it as a type of UUID and specify the entityType parameter >>> in @Parameter so the entity validation is done correctly. Example: >>> > >>> > @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, >>> entityType = ZoneResponse.class, >>> > required=true, description="the Zone ID for the network") >>> > private Long zoneId; >>> > >>> > That is the rule when passing id/uuid of the first class CS object to >>> the API call >>> > >>> > Then be aware of the fact that the APIDispatcher will transform UUID >>> to the actual DB id, and that would be the Id that you pass to the services >>> call. If what you need is UUID, not the actual id, to be saved in the >>> callContext, you have to transform it explicitly. >>> > >>> > - Alena Prokharchyk >>> > >>> > >>> >>> >> On June 24, 2014, 3:54 p.m., Alex Ough wrote: >>> >> >>> >> ----------------------------------------------------------- >>> >>> >> This is an automatically generated e-mail. To reply, visit: >>> >> https://reviews.apache.org/r/20099/ >>> >>> >> ----------------------------------------------------------- >>> >> >>> >> (Updated June 24, 2014, 3:54 p.m.) >>> >> >>> >> >>> >> Review request for cloudstack. >>> >> >>> >> >>> >> Repository: cloudstack-git >>> >> >>> >> >>> >> Description >>> >> ------- >>> >>> >> >>> >> This is the review request for the core changes related with #17790 >>> that has only the new plugin codes. >>> >> >>> >> >>> >>> >> Diffs >>> >> ----- >>> >> >>> >> api/src/com/cloud/event/EventTypes.java 0fa3cd5 >>> >>> >> api/src/com/cloud/user/AccountService.java eac8a76 >>> >> api/src/com/cloud/user/DomainService.java 4c1f93d >>> >> api/src/org/apache/cloudstack/api/ApiConstants.java adda5f4 >>> >> api/src/org/apache/cloudstack/api/BaseCmd.java ac9a208 >>> >> >>> >>> api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java >>> 50d67d9 >>> >> >>> >>> api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java >>> 5754ec5 >>> >> >>> >>> api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java >>> 3e5e1d3 >>> >> >>> >>> api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java >>> f30c985 >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java >>> 3c185e4 >>> >> >>> >>> api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java >>> a7ce74a >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java >>> 312c9ee >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java >>> a6d2b0b >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java >>> 409a84d >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/region/AddRegionCmd.java >>> f6743ba >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/region/UpdateRegionCmd.java >>> b08cbbb >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java >>> 8f223ac >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java >>> 08ba521 >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java >>> c6e09ef >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java >>> d69eccf >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java >>> 69623d0 >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java >>> 2090d21 >>> >> >>> api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java >>> f21e264 >>> >> api/src/org/apache/cloudstack/api/response/RegionResponse.java >>> 6c74fa6 >>> >> api/src/org/apache/cloudstack/region/Region.java df64e44 >>> >> api/src/org/apache/cloudstack/region/RegionService.java afefcc7 >>> >> api/test/org/apache/cloudstack/api/command/test/RegionCmdTest.java >>> 10c3d85 >>> >> client/pom.xml 29fef4f >>> >> >>> >>> engine/schema/resources/META-INF/cloudstack/core/spring-engine-schema-core-daos-context.xml >>> 2ef0d20 >>> >> engine/schema/src/com/cloud/user/AccountVO.java 0f5a044 >>> >> engine/schema/src/org/apache/cloudstack/region/RegionVO.java 608bd2b >>> >> >>> >>> plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java >>> 4136b5c >>> >> plugins/pom.xml b5e6a61 >>> >> >>> >>> plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapCreateAccountCmd.java >>> b753952 >>> >> >>> >>> plugins/user-authenticators/ldap/src/org/apache/cloudstack/api/command/LdapImportUsersCmd.java >>> 6f7be90 >>> >>> >> server/src/com/cloud/api/ApiResponseHelper.java f1f0d2c >>> >> server/src/com/cloud/api/dispatch/ParamProcessWorker.java 1592b93 >>> >> server/src/com/cloud/event/ActionEventUtils.java 2b3cfea >>> >> server/src/com/cloud/projects/ProjectManagerImpl.java d10c059 >>> >> server/src/com/cloud/user/AccountManager.java 194c5d2 >>> >> server/src/com/cloud/user/AccountManagerImpl.java 7a889f1 >>> >> server/src/com/cloud/user/DomainManager.java f72b18a >>> >> server/src/com/cloud/user/DomainManagerImpl.java fbbe0c2 >>> >> server/src/org/apache/cloudstack/region/RegionManager.java 6f25481 >>> >> server/src/org/apache/cloudstack/region/RegionManagerImpl.java >>> 8910714 >>> >> server/src/org/apache/cloudstack/region/RegionServiceImpl.java >>> 98cf500 >>> >> server/test/com/cloud/user/AccountManagerImplTest.java 176cf1d >>> >> server/test/com/cloud/user/MockAccountManagerImpl.java 746fa1b >>> >> server/test/com/cloud/user/MockDomainManagerImpl.java 7dddefb >>> >> server/test/org/apache/cloudstack/region/RegionManagerTest.java >>> d7bc537 >>> >> setup/db/db/schema-440to450.sql ee419a2 >>> >> ui/scripts/regions.js 368c1bf >>> >> >>> >> Diff: https://reviews.apache.org/r/20099/diff/ >>> >> >>> >> >>> >> Testing >>> >> ------- >>> >> >>> >>> >> 1. Successfully tested real time synchronization as soon as resources >>> are created/deleted/modified in one region. >>> >> 2. Successfully tested full scans to synchronize resources that were >>> missed during real time synchronization because of any reasons like network >>> connection issues. >>> >> 3. The tests were done manually and also automatically by randomly >>> generating changes each region. >>> >> >>> >> >>> >>> >> Thanks, >>> >> >>> >> Alex Ough >>> > >>> >>> >>> >>> >>> >>> >>> >>> >>> >> >> >