RE: Question about ObjectStoreDriver for implementing Ceph driver

2023-12-12 Thread Kishan Kavala
Yes Rohit. TO is the correct way to send details to Resource layer.

@Wido Looking forward to the commits. Let me know if you have any questions.

 


-Original Message-
From: Wido den Hollander  
Sent: Tuesday, December 12, 2023 2:28 PM
To: dev@cloudstack.apache.org; Rohit Yadav ; 
kis...@apache.org
Subject: Re: Question about ObjectStoreDriver for implementing Ceph driver



Op 12/12/2023 om 04:45 schreef Rohit Yadav:
> Hi Wido,
> 
> I think when the minio object storage plugin was written we didn’t have the 
> limitations or foresight on how to structure the code, I would agree in 
> refactoring the interface enough to allow what you’re trying to achieve.
> 
> Typically to a plugin you don’t want to pass database objects (Dao or VO) but 
> a transform them as transfer object (TO) that doesn’t introduce dao or schema 
> pkg dependencies to the plugin and TOs are kept as simple Java object. In the 
> TO you can introduce fields and getters that suit your use cases.
> 

Got it, thanks for the feedback! I'll work on this in two different commits.

Wido

> Regards.
> 
> Regards.
> 
> From: Wido den Hollander 
> Sent: Tuesday, December 12, 2023 1:28:56 AM
> To: dev@cloudstack.apache.org ; 
> kis...@apache.org 
> Subject: Question about ObjectStoreDriver for implementing Ceph driver
> 
> Hi (Kishan),
> 
> I am making a first attempt [0] to implement a Ceph RGW [1] Object 
> Store Driver for CloudStack and I have a few questions about the code.
> 
> While implementing the Ceph RGW driver I have noticed that some 
> methods are provided the bucket's name (as a String) as an argument, 
> but I'd rather have a 'Bucket' object, for example:
> 
> public AccessControlList getBucketAcl(String bucketName, long storeId) 
> public boolean setBucketEncryption(String bucketName, long storeId)
> 
> In Ceph's case it would be better if these methods would get a Bucket 
> object, like:
> 
> 
> public AccessControlList getBucketAcl(Bucket bucket, long storeId)
> 
> The reason is that I need to access the Account the bucket belongs to.
> With Minio there is an 'Admin' client which allows you to do all these 
> operations as an Admin, but with Ceph there isn't. With Ceph you are 
> supposed to obtain the credentials (access + secret) via an Admin API 
> [2] and then execute these commands as the user.
> 
> Now, we have the access + secret key from the account recorded under 
> the account and we can access that from the Bucket object:
> 
> bucket.getAccessKey()
> bucket.getSecretKey()
> 
> My proposal would be to change the signature of these methods, but 
> before I do so, is there any particular reason the String was passed 
> and not the whole Bucket object?
> 
> Thanks,
> 
> Wido
> 
> [0]: https://github.com/wido/cloudstack/commits/ceph-object-store
> [1]: https://ceph.io/en/discover/technology/#object
> [2]:
> https://www.javadoc.io/doc/io.github.twonote/radosgw-admin4j/latest/or
> g/twonote/rgwadmin4j/RgwAdmin.html
> 
>   
> 
> 


Re: Question about ObjectStoreDriver for implementing Ceph driver

2023-12-12 Thread Wido den Hollander




Op 12/12/2023 om 04:45 schreef Rohit Yadav:

Hi Wido,

I think when the minio object storage plugin was written we didn’t have the 
limitations or foresight on how to structure the code, I would agree in 
refactoring the interface enough to allow what you’re trying to achieve.

Typically to a plugin you don’t want to pass database objects (Dao or VO) but a 
transform them as transfer object (TO) that doesn’t introduce dao or schema pkg 
dependencies to the plugin and TOs are kept as simple Java object. In the TO 
you can introduce fields and getters that suit your use cases.



Got it, thanks for the feedback! I'll work on this in two different commits.

Wido


Regards.

Regards.

From: Wido den Hollander 
Sent: Tuesday, December 12, 2023 1:28:56 AM
To: dev@cloudstack.apache.org ; kis...@apache.org 

Subject: Question about ObjectStoreDriver for implementing Ceph driver

Hi (Kishan),

I am making a first attempt [0] to implement a Ceph RGW [1] Object Store
Driver for CloudStack and I have a few questions about the code.

While implementing the Ceph RGW driver I have noticed that some methods
are provided the bucket's name (as a String) as an argument, but I'd
rather have a 'Bucket' object, for example:

public AccessControlList getBucketAcl(String bucketName, long storeId)
public boolean setBucketEncryption(String bucketName, long storeId)

In Ceph's case it would be better if these methods would get a Bucket
object, like:


public AccessControlList getBucketAcl(Bucket bucket, long storeId)

The reason is that I need to access the Account the bucket belongs to.
With Minio there is an 'Admin' client which allows you to do all these
operations as an Admin, but with Ceph there isn't. With Ceph you are
supposed to obtain the credentials (access + secret) via an Admin API
[2] and then execute these commands as the user.

Now, we have the access + secret key from the account recorded under the
account and we can access that from the Bucket object:

bucket.getAccessKey()
bucket.getSecretKey()

My proposal would be to change the signature of these methods, but
before I do so, is there any particular reason the String was passed and
not the whole Bucket object?

Thanks,

Wido

[0]: https://github.com/wido/cloudstack/commits/ceph-object-store
[1]: https://ceph.io/en/discover/technology/#object
[2]:
https://www.javadoc.io/doc/io.github.twonote/radosgw-admin4j/latest/org/twonote/rgwadmin4j/RgwAdmin.html

  





Re: Question about ObjectStoreDriver for implementing Ceph driver

2023-12-11 Thread Rohit Yadav
Hi Wido,

I think when the minio object storage plugin was written we didn’t have the 
limitations or foresight on how to structure the code, I would agree in 
refactoring the interface enough to allow what you’re trying to achieve.

Typically to a plugin you don’t want to pass database objects (Dao or VO) but a 
transform them as transfer object (TO) that doesn’t introduce dao or schema pkg 
dependencies to the plugin and TOs are kept as simple Java object. In the TO 
you can introduce fields and getters that suit your use cases.

Regards.

Regards.

From: Wido den Hollander 
Sent: Tuesday, December 12, 2023 1:28:56 AM
To: dev@cloudstack.apache.org ; kis...@apache.org 

Subject: Question about ObjectStoreDriver for implementing Ceph driver

Hi (Kishan),

I am making a first attempt [0] to implement a Ceph RGW [1] Object Store
Driver for CloudStack and I have a few questions about the code.

While implementing the Ceph RGW driver I have noticed that some methods
are provided the bucket's name (as a String) as an argument, but I'd
rather have a 'Bucket' object, for example:

public AccessControlList getBucketAcl(String bucketName, long storeId)
public boolean setBucketEncryption(String bucketName, long storeId)

In Ceph's case it would be better if these methods would get a Bucket
object, like:


public AccessControlList getBucketAcl(Bucket bucket, long storeId)

The reason is that I need to access the Account the bucket belongs to.
With Minio there is an 'Admin' client which allows you to do all these
operations as an Admin, but with Ceph there isn't. With Ceph you are
supposed to obtain the credentials (access + secret) via an Admin API
[2] and then execute these commands as the user.

Now, we have the access + secret key from the account recorded under the
account and we can access that from the Bucket object:

bucket.getAccessKey()
bucket.getSecretKey()

My proposal would be to change the signature of these methods, but
before I do so, is there any particular reason the String was passed and
not the whole Bucket object?

Thanks,

Wido

[0]: https://github.com/wido/cloudstack/commits/ceph-object-store
[1]: https://ceph.io/en/discover/technology/#object
[2]:
https://www.javadoc.io/doc/io.github.twonote/radosgw-admin4j/latest/org/twonote/rgwadmin4j/RgwAdmin.html

 



Question about ObjectStoreDriver for implementing Ceph driver

2023-12-11 Thread Wido den Hollander

Hi (Kishan),

I am making a first attempt [0] to implement a Ceph RGW [1] Object Store 
Driver for CloudStack and I have a few questions about the code.


While implementing the Ceph RGW driver I have noticed that some methods 
are provided the bucket's name (as a String) as an argument, but I'd 
rather have a 'Bucket' object, for example:


public AccessControlList getBucketAcl(String bucketName, long storeId)
public boolean setBucketEncryption(String bucketName, long storeId)

In Ceph's case it would be better if these methods would get a Bucket 
object, like:



public AccessControlList getBucketAcl(Bucket bucket, long storeId)

The reason is that I need to access the Account the bucket belongs to. 
With Minio there is an 'Admin' client which allows you to do all these 
operations as an Admin, but with Ceph there isn't. With Ceph you are 
supposed to obtain the credentials (access + secret) via an Admin API 
[2] and then execute these commands as the user.


Now, we have the access + secret key from the account recorded under the 
account and we can access that from the Bucket object:


bucket.getAccessKey()
bucket.getSecretKey()

My proposal would be to change the signature of these methods, but 
before I do so, is there any particular reason the String was passed and 
not the whole Bucket object?


Thanks,

Wido

[0]: https://github.com/wido/cloudstack/commits/ceph-object-store
[1]: https://ceph.io/en/discover/technology/#object
[2]: 
https://www.javadoc.io/doc/io.github.twonote/radosgw-admin4j/latest/org/twonote/rgwadmin4j/RgwAdmin.html