Moving the discussion to the mailing list as it doesn’t have to be private. 
Kishan/Murali, can you please follow up on the remaining review for 
https://reviews.apache.org/r/20099/ (see my last comment and the discussion 
below)

Basically what Alex wants to do is – pass the originated region to 
create/update/deleteAccount commands. And the question is – what type this 
parameter should have (see details below)

Thanks,
Alena.

From: Alena Prokharchyk 
<alena.prokharc...@citrix.com<mailto:alena.prokharc...@citrix.com>>
Date: Tuesday, June 24, 2014 at 3:06 PM
To: Alex Ough <alex.o...@sungardas.com<mailto:alex.o...@sungardas.com>>, Kishan 
Kavala <kishan.kav...@citrix.com<mailto:kishan.kav...@citrix.com>>, Murali 
Reddy <murali.re...@citrix.com<mailto:murali.re...@citrix.com>>
Cc: Animesh Chaturvedi 
<animesh.chaturv...@citrix.com<mailto:animesh.chaturv...@citrix.com>>, Ram 
Ganesh <ram.gan...@citrix.com<mailto:ram.gan...@citrix.com>>
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<mailto:alena.prokharc...@citrix.com>>
Date: Tuesday, June 24, 2014 at 2:54 PM
To: Alex Ough <alex.o...@sungardas.com<mailto: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<mailto:alex.o...@sungardas.com>>
Date: Tuesday, June 24, 2014 at 2:33 PM
To: Alena Prokharchyk 
<alena.prokharc...@citrix.com<mailto: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<mailto: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<mailto:alex.o...@sungardas.com>>
Date: Tuesday, June 24, 2014 at 1:57 PM

To: Alena Prokharchyk 
<alena.prokharc...@citrix.com<mailto: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<mailto: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<mailto:alex.o...@sungardas.com>>
Date: Tuesday, June 24, 2014 at 12:47 PM

To: Alena Prokharchyk 
<alena.prokharc...@citrix.com<mailto: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:04 PM, Alena Prokharchyk 
<alena.prokharc...@citrix.com<mailto: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<mailto: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
>





Reply via email to