Thanks for the expanded info, very useful.

With respect to SDK vs REST API this is something we'll have to explore during 
development. We have working code today. It uses the SDK for (potentially) 
equally good reasons to those for JClouds preferring a standard way of doing 
things. At this time it is not our intention to move this code over to use the 
REST API, but we acknowledge that this means it is unlikely to move out of 
labs. Once the community can get their hands on the code we can see where it 
goes. If the momentum is such that it moves to the REST API then all good and 
we'll work with that momentum.
 
In other words, lets allow the code to do the talking (again acknowledging that 
the current position of the project is that the current code will not move from 
labs as a result of the existing policy on REST API).

Eduard (who has also joined this list) will work on the initial contribution in 
the coming days and we can start doing concrete stuff.

Thanks again for the great summary below.

Ross

Microsoft Open Technologies, Inc.
A subsidiary of Microsoft Corporation

-----Original Message-----
From: Ignasi Barrera [mailto:n...@apache.org] 
Sent: Thursday, February 5, 2015 2:02 AM
To: dev@jclouds.apache.org
Subject: Re: Contributing Azure support

Hi!

Many thanks for reaching us and for willing to help with Azure. We really look 
forward to having good support for it, so all contributions are very welcome.

As you already summarized, the right place to start is in jclouds-labs. There 
we can discuss all the implementation details and start testing and using the 
provider while it is under development, and once it is in a good shape, it will 
get promoted to the main repo.
To make that happen, the following must happen:

* It is being maintained: This usually means that we need to be able to run 
live tests against the provider and someone takes care of it.
In the case of Azure this shouldn't be an issue, as Microsoft provides limited 
free accounts for ASF committers that are enough to run the tests and hack on 
the provider. I've been using such an account while helping Adrian when he 
started the Azure compute provider, and it provides all we need, so I'd say 
this won't be an issue.

* It has an abstraction. This is the important point. We need the 
ComputeService abstraction implemented in order promote the provider.
jclouds is all about the abstractions and common interfaces, and this is the 
one that has to be implemented. That means:
  - The interface itself has to be implemented, like in other compute providers.
  - The AzureComputeServiceLiveTest must be created and should extend the 
BaseComputeServiceLiveTest [1]. You can look at the DigitalOcean one [2] for an 
example.
  - The AzureTemplateBuilderLiveTest must be created and should extend the 
BaseTemplateBuilderLiveTest [3]. You can have a look at the HPCloud one [4] for 
an example.
These test classes are the "ComputeService contract". Once those live tests are 
passing, we know the abstraction is properly implemented and working as 
expected.

* Code is up-to-date (tests, style, best practices). This is also important, 
and is especially relevant the fact that your implementation is currently using 
the Azure SDK. I completely understand that it can be more convenient to use 
it, but I have to say that the implementation should use the existing jclouds 
HTTP layer in order to be promoted. It is not just because "we do it this way"; 
there are several reasons behind this:
  - jclouds provides a driver mechanism that allows users to choose their 
preferred HTTP driver. Currently we support the Java default HttpUrlConnection, 
the Apache HTTP Client, and OkHttp. This one allows us to be Android friendly 
and use PATCH verbs and other stuff that is not supported in the default JRE 
implementation, so we need to make sure that users still have this choice when 
using Azure. The driver mechanism must work.
  - jclouds also provides a generic way of handling failure at the HTTP layer. 
It provides a generic fallback mechanism that allows every provider to 
configure the behavior when failure happens. This fallback delegation is 
generic and all providers benefit from it, and Azure shouldn't be an exception. 
We should be able to provide custom fallbacks to customize the behavior upon 
failure.
  - jclouds provides a generic retry policy that allows users to configure how 
and when failed request are retried. There are several implementations, but 
users can configure a more convenient one, if needed.
  - It also provides a generic way to configure request timeouts "per API 
method". Users can configure the timeout for each call, if they need to.

These are the most relevant points (there are more but I think there's no need 
to enumerate everything here) that illustrate why we *need* and *require* 
providers and apis to use the jclouds built-in HTTP layer. Using the Azure SDK 
would mean that none of the above would be available, and that is something we 
can't justify just because "Azure was developed that way".



So, to summarize, the development of the provider should be started in 
jclouds-labs, and the goals should be to implement the ComputeService interface 
and have the mentioned tests passing. Once that is working, we can safely say 
the provider works as expected.

Regarding the usage of the Azure API, I'd say we can live with it in labs, but 
changing the provider to use the jclouds HTTP mechanisms is a must to have it 
promoted. I don't really know what is the best way to proceed: have the 
provider "as-is" now merged into labs and start working from there, or adapt 
what you already have and contribute to the existing azure provider. Take into 
account that we are trying to use the "labs" repo just for development, and 
providers should have a limited TTL there. We should try to avoid partially 
developed providers from staying there forever, so let's use this thread to 
come up with a plan to put Azure in the path to promotion


Thanks again for your intereset!

And please, don't take this email as a "no" or "not this way at all".
I've just tried to explain the reasons behind what we require. We really look 
forward to having Azure in and your intereset in contributing is very much 
appreciated.

I'll be more than happy to help with the development of the provider, provide 
guidance, and to align the code with what jclouds needs.


Thanks!

Ignasi



[1] 
https://github.com/jclouds/jclouds/blob/master/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java
[2] 
https://github.com/jclouds/jclouds-labs/blob/master/digitalocean/src/test/java/org/jclouds/digitalocean/compute/DigitalOceanComputeServiceLiveTest.java
[3] 
https://github.com/jclouds/jclouds/blob/master/compute/src/test/java/org/jclouds/compute/internal/BaseTemplateBuilderLiveTest.java
[4] 
https://github.com/jclouds/jclouds/blob/master/providers/hpcloud-compute/src/test/java/org/jclouds/hpcloud/compute/compute/HPCloudComputeTemplateBuilderLiveTest.java


On 5 February 2015 at 07:29, Ross Gardler (MS OPEN TECH) 
<ross.gard...@microsoft.com> wrote:
> Great thanks for the pointer. Even more thanks to Zack who took the 
> time to summarize that thread (if only more folks did that in other 
> projects I work on, including me!)
>
> Zacks summary, for the purposes of the archives is:
>
> Currently, most of us agree that the following criteria should be met, at a 
> minimum, before an API is promoted to jclouds/jclouds:
> - It is being maintained
> - It has an abstraction
> - Code is up-to-date (tests, style, best practices)
>
> This all seems sensible. I don't want to start that thread again but I 
> would point out that the first criteria (it is being maintained) might 
> be true on promotion to core but no longer be true in x months time. 
> Not a problem today, but one day it is possible there will need to be 
> a process for retirement from core too. For the Azure support we'll 
> focus on getting it into core though :-)
>
> Looking at other modules that are in core I see there isn't a consistent 
> level of support for compute and storage (our current area of focus). Is 
> there a minimum bar at this point? Perhaps a test suite? No problem if this 
> is still being defined, we can use the Azure support as a use case for 
> defining that minimum bar if it is appropriate.
>
> Ross
>
> -----Original Message-----
> From: Andrew Phillips [mailto:aphill...@qrmedia.com]
> Sent: Wednesday, February 4, 2015 4:31 PM
> To: dev@jclouds.apache.org
> Subject: RE: Contributing Azure support
>
> Hi Ross
>
>> Thanks for the pointer John. Why is Blob in core and Compute in Labs? 
>> What is the criteria for leaving labs?
>
> See http://markmail.org/thread/zvsytdvzfeg4w2zi. In short, it's still an 
> ongoing discussion, but support for one of the abstraction layers (which is 
> true for both Azure BlobStore and Compute) is likely to be one of the key 
> ones.
>
> Great to see interest from your side in contributing!
>
> Regards
>
> ap

Reply via email to