+1 (non-binding) for gRPC only.

On 11-Aug-2022 at 8:42:52 AM, Ash Berlin-Taylor <a...@apache.org> wrote:

> +1 (binding) now with that change. Thank you very much.
>
> I'm also okay with us to proceed with only gRPC for now -- with this
> architectural change it's much easier to replace it in future if we
> want/need to, and for others (such as service providers like
> Google/Amazon/Astronomer) to experiment with custom API implementations.
>
> I'm not able to point at any examples, as the ones I know of personally
> aren't open source; they were all written for companies projects/products.
>
> I'm am sorry that we missed it -- speaking personally I've had _a lot_
> going on at home and I've barely had time to "look around" at what else is
> going on in Airflow over the last few months. I'm only now just having the
> head space to actually think in detail about other things that what is
> right in front of me, hence why it came now.
>
> -ash
>
> On Thu, Aug 11 2022 at 09:27:39 +02:00:00, Jarek Potiuk <ja...@potiuk.com>
> wrote:
>
> I made the updates in
> https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-44+Airflow+Internal+API
> to reflect the above. As I suspected, there were really very few changes
> needed, to make it "GRPC/JSON OpenAPI" agnostic. Ir does not change the
> "gist" and "purpose" of the AIP and we can easily turn it into
> implementation detail after extended POC is complete.
>
> On Thu, Aug 11, 2022 at 9:08 AM Jarek Potiuk <ja...@potiuk.com> wrote:
>
>> Hey Ash, Andrew,
>>
>> TL;DR; I slept over it to try to understand what just happened, and I
>> have a proposal.
>>
>> * I am happy to extend my POC with the pure JSon/Open API approach -
>> providing that Andrew/Ash point me to some good examples where the RPC
>> style API has been implemented. If you could point me in the right
>> direction, I am a maverick kind of person and just find my ways there.
>> * I propose we conclude the vote (with added reservation in it, that
>> final choice of the transport will be based on the extended POC) as planned.
>> * I am rather curious to try the things that both of you mentioned you
>> are concerned about (threading/multiprocessing/load balancing) and see how
>> they compare in both approaches - before making final decision and doing
>> first, founding PR
>>
>> More comments (personal feeling):
>>
>> I really treat your comments - (now that they finally came), seriously.
>> And value your expert knowledge and experience. And I personally expect the
>> same in return. I always respond to any AIPs/discussions when I am given
>> enough time and opportunity to comment, I do - In due time. This time it
>> did not happen  - not sure why. I personally feel this is a little
>> disrespectful to my work, but I do not hold any grudges. I am happy to put
>> that completely aside - now that I have your attention and can use
>> your experience, the goal is that we do not make any personal complaints or
>> escalations here, we are all here to make Airflow a better product.
>> Community is the most important, respect for each other's work is an
>> important part of it. And I hope this can improve in the future AIP
>> discussions.
>>
>> But going back to the merit of the discussion:
>>
>> Just to let everyone know I am not too "vested" in gRPC . I spend a
>> little time on implementing the POC with it and after doing the POC and
>> reading testimonies of people I feel this is the right choice. But for this
>> AIP. I made deliberate decisions in the way that the transport can be
>> swapped out if we find reasons we should.
>>
>> I am reasonably happy with the way proposed by Ash (In fact I am going to
>> update the AIP with it in a moment). For me the way how we actually
>> implement the "if"  is an implementation detail that will be worked out on
>> the first PR. The way proposed is good for me, though I would rather
>> experiment a bit with decorators and see if we can make it a bit nicer -
>> but  this is not a dealbreaker at all for me. One concern I have is that we
>> will have another abstraction layer (possibly needless) and that we will
>> have to again repeat all the methods signatures and parameters and keep
>> them in sync (they will now be repeated in 4 or 5 places). But again - this
>> is something that can be likely done in the first "founding" PR we are
>> going to iterate on and work out the best balance between duplication and
>> flexibility/maintainability. And we can always update the AIP with this
>> implementation detail later - very much like it happend with a number of
>> AIPs before - including AIP-39, AIP-40, AIP-42 - all of them went through
>> similar rounds of updates and clarifications as implementation was
>> progressing. It's hard to work out all the details "on paper" or even in
>> "POC". Also I would REALLY love to tap in the experience of people like the
>> both of you, but it seems that the only way to get some good and serious
>> feedback is to call a vote (or make a PR with the intention of merging it).
>>
>> But I even can go further than that - I think independently from voting
>> whether the whole AIP-44 is a good or bad idea. I think there is no doubt
>> we need it, and the "general scope" and approach seems to already reach
>> general consensus, so if we can just continue and complete the vote. I am
>> happy to continue running the POC on using OpenAPI spec and gRPC in
>> parallel and see how they compare. I am always eager to learn and try other
>> things, and if you have valid concerns I am happy to address them by trying
>> out. I would personally like to compare both from the development
>> "friction" point of view, performance, as well as doing some tests trying
>> to address and test the operational (process/thread/load balancing)
>> concerns you both have and see how they can be solved in both and compare.
>> I think there is nothing like "show me the code" and performing
>> actual working POC.
>>
>> And I am super happy to continue with the POC and extend it with a pure
>> JSON/OpenAPI based proposal after voting completes and make the final
>> decision during the first founding PR. And we can even arrange extra votes
>> or lazy consensus before the first PR lands - after seeing all the
>> "ins/outs".
>> The Founding PR is still quite a bit away - I do not want to make any
>> commits before we branch-off the 2.4 - and I don't even want to take too
>> much of your time for that other than discussion and raising concerns and
>> commenting on my findings. I am happy to do all the ground-work here.
>>
>> That's all I ask for. Just treating the work I do seriously.
>>
>> So Ash, Andrew
>>
>> Can you please point me to some examples where RPC-API like ours has been
>> implemented with Open API/JSON? I am curious to learn from those and turn
>> them into POC.
>>
>> And I propose - let's just continue the vote as planned. We already have
>> 3 binding votes, and more +1s than -1s and the time has already passed, but
>> I am happy to let it run till the end of day tomorrow to see if my proposal
>> above will be good to conclude the vote with more consent from all the
>> people involved.
>>
>> J.
>>
>>
>>
>>
>> On Thu, Aug 11, 2022 at 7:49 AM Eugen Kosteev <eu...@kosteev.com> wrote:
>>
>>> +1 (non-binding)
>>>
>>> On Thu, Aug 11, 2022 at 12:08 AM Ash Berlin-Taylor <a...@apache.org>
>>> wrote:
>>>
>>>> So my concerns (in addition to the ones Andrew already pointed out)
>>>> with gRPC: it uses threads! Threads + python always makes me nervous.
>>>> Doubly so when you then couple that with DB access via sqlalchemy - we're
>>>> heading down paths less well travelled if we do this.
>>>>
>>>> From https://github.com/grpc/grpc/blob/master/doc/fork_support.md
>>>>
>>>> > gRPC Python wraps gRPC core, which uses multithreading for
>>>> performance, and hence doesn't support fork(). Historically, we didn't
>>>> support forking in gRPC, but some users seemed to be doing fine until their
>>>> code started to break on version 1.6. This was likely caused by the
>>>> addition of background c-threads and a background Python thread
>>>>
>>>> And there's https://github.com/grpc/grpc/issues/16001 which may or may
>>>> not be a problem for us, I'm unclear:
>>>>
>>>> > The main constraint that must be satisified is that your process must
>>>> only invoke the fork() syscall *before* you create your gRPC server(s).
>>>>
>>>>
>>>> But anyway, the only change I'd like to see is to make the internal API
>>>> more pluggable.
>>>>
>>>> So instead of something like this:
>>>>
>>>>     def process_file(
>>>>         self,
>>>>         file_path: str,
>>>>         callback_requests: List[CallbackRequest],
>>>>         pickle_dags: bool = False,
>>>>     ) -> Tuple[int, int]:
>>>>         if self.use_grpc:
>>>>             return self.process_file_grpc(
>>>>                 file_path=file_path,
>>>> callback_requests=callback_requests, pickle_dags=pickle_dags
>>>>             )
>>>>         return self.process_file_db(
>>>>             file_path=file_path, callback_requests=callback_requests,
>>>> pickle_dags=pickle_dags
>>>>         )
>>>>
>>>> I'd very much like us to have it be something like this:
>>>>
>>>>     def process_file(
>>>>         self,
>>>>         file_path: str,
>>>>         callback_requests: List[CallbackRequest],
>>>>         pickle_dags: bool = False,
>>>>     ) -> Tuple[int, int]:
>>>>         if settings.DATABASE_ACCESS_ISOLATION:
>>>>             return InternalAPIClient.dagbag_process_file(
>>>>                 file_path=file_path,
>>>> callback_requests=callback_requests, pickle_dags=pickle_dags
>>>>             )
>>>>         return self.process_file_db(
>>>>             file_path=file_path, callback_requests=callback_requests,
>>>> pickle_dags=pickle_dags
>>>>         )
>>>>
>>>> i.e. all API access is "marshalled" (perhaps the wrong word) via a
>>>> single pluggable (and eventually configurable/replaceable) API client.
>>>> Additionally (though less important) `self.use_grpc` is changed to a
>>>> property on the `airflow.settings` module (as it is a global setting, not
>>>> an attribute/property of any single instance.)
>>>>
>>>> (In my mind the API client would include the
>>>> from_protobuff/to_protobuff methods that you added to TaskInstance on your
>>>> POC PR. Or the from_protbuff could live in the FileProcessorServiceServicer
>>>> class in your example, but that probably doesn't scale when multiple
>>>> services would take a TI/SimpleTI. I guess they could still also live on
>>>> TaskInstance et al and just not be used - but that doesn't feel as clean to
>>>> me is all)
>>>>
>>>> Thoughts? It's not too big change to encapsulate things like this I
>>>> hope?
>>>>
>>>> Sorry again that we didn't look at the recent work on this AIP sooner.
>>>>
>>>> -ash
>>>>
>>>>
>>>>
>>>> On Wed, Aug 10 2022 at 13:51:02 -06:00:00, Andrew Godwin
>>>> <andrew.god...@astronomer.io.INVALID> wrote:
>>>>
>>>> I also wish we'd had this discussion before!
>>>>
>>>> I've converted several million lines of code into API-driven
>>>> services over the past decade so I have my ways and I'm set in them, I
>>>> guess :)
>>>>
>>>> Notice that I didn't say "use REST" - I don't think REST maps well to
>>>> RPC style codebases, and agree the whole method thing is confusing. I just
>>>> mean "ship JSON in a POST and receive JSON in the response".
>>>>
>>>> As you said before though, the line where you draw the abstraction is
>>>> what matters more than the transport layer, and "fat endpoints" (doing
>>>> transactions and multiple calls on the API server etc.) is, I agree, the
>>>> way this has to go, so it's not like this is something I think is totally
>>>> wrong, just that I've repeatedly tried gRPC on projects like this and been
>>>> disappointed with what it actually takes to ship changes and
>>>> prototype things quickly. Nothing beats the ability to just throw curl at a
>>>> problem - or maybe that's just me.
>>>>
>>>> Anyway, I'll leave you to it - I have my own ideas in this area I'll be
>>>> noodling on, but it's a bit of a different take and aimed more at execution
>>>> as a whole, so I'll come back and discuss them if they're successful.
>>>>
>>>> Andrew
>>>>
>>>> On Wed, Aug 10, 2022 at 1:36 PM Jarek Potiuk <ja...@potiuk.com> wrote:
>>>>
>>>>> 1st of all - I wish we had this discussion before :)
>>>>>
>>>>> > The autogenerated code also is available from OpenAPI specs, of
>>>>> course, and the request/response semantics in the same thread are 
>>>>> precisely
>>>>> what make load balancing these calls a little harder, and horizontal
>>>>> scaling to multiple threads comes with every HTTP server, but I digress -
>>>>> clearly you've made a choice here to write an RPC layer rather than a
>>>>> lightweight API layer, and go with the more RPC-style features, and I get
>>>>> that.
>>>>>
>>>>> OpenAPI is REST not RPC and it does not map well to RPC style calls. I
>>>>> tried to explain in detail in the AIP (and in earlier discussions). And 
>>>>> the
>>>>> choice is basically made for us because of our expectation to have
>>>>> minimal impact on the existing code (and ability to switch off the remote
>>>>> part). We really do not want to introduce new API calls.  We want to make
>>>>> sure that existing "DB transactions" (i.e. coarse grained calls) are
>>>>> remotely executed. So we are not really talking about lightweight API
>>>>> almost by definition. Indeed, Open API also maps a definition described in
>>>>> a declarative way to python code.  but it has this non-nice part that
>>>>> OpenAPI/REST, it is supposed to be run on some resources. We have no
>>>>> resources to run it on - every single method we call is doing something.
>>>>> Even from the REST/OpenAPI semantics I'd have a really hard time to decide
>>>>> whether it should be GET, POST or PUT or DELETE. In most cases this will 
>>>>> be
>>>>> a combination of those 4 on several different resources. All the "nice
>>>>> parts" of Open API (Swagger UI etc.) become next to useless if you try to
>>>>> map such remote procedures we have, to REST calls.
>>>>>
>>>>>
>>>>> > I still think it's choosing something that's more complex to
>>>>> maintain over a simpler, more accessible option, but since I won't be the
>>>>> one writing it, that's not really for me to worry about. I am very curious
>>>>> to see how this evolves as the work towards multitenancy really kicks in
>>>>> and all the API schemas need to change to add namespacing!
>>>>>
>>>>> The gRPC (proto) is designed from ground-up with maintainability in
>>>>> mind. The ability to evolve the API, add new parameters etc. is built-in
>>>>> the protobuf definition. From the user perspective it's actually easier to
>>>>> use than OpenAPI when it comes to remote method calls, because you
>>>>> basically - call a method.
>>>>>
>>>>> And also coming back to monitoring - literally every monitoring
>>>>> platform supports gRPC to monitor. Grafana, NewRelic, CloudWatch, Datadog,
>>>>> you name it. In our case.
>>>>>
>>>>> Also load-balancing:
>>>>>
>>>>> Regardless of the choice we talk about HTTP request/response happening
>>>>> for 1 call. This is the boundary. Each of the calls we have will be a
>>>>> separate transaction, separate call, not connected to any other call. The
>>>>> server handling it will be stateless (state will be stored in a DB when
>>>>> each call completes). I deliberately put the "boundary" of each of
>>>>> the remotely callable methods, to be a complete DB transaction to achieve
>>>>> it.
>>>>>
>>>>> So It really does not change whether we use gRPC or REST/JSON.
>>>>> REST/JSON vs. gRPC is just the content of the message, but this is the 
>>>>> very
>>>>> same HTTP call, with same authentication added on top, same headers - just
>>>>> how the message is encoded is different. The same tools for load balancing
>>>>> works in the same way regardless if we use gRPC or REST/JSON. This is
>>>>> really a higher layer than the one involved in load balancing.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Aug 10, 2022 at 9:10 PM Andrew Godwin
>>>>> <andrew.god...@astronomer.io.invalid> wrote:
>>>>>
>>>>>> Well, binary representation serialization performance is worse for
>>>>>> protobuf than for JSON in my experience (in Python specifically) - unless
>>>>>> you mean size-on-the-wire, which I can agree with but tend to not worry
>>>>>> about very much since it's rarely a bottleneck.
>>>>>>
>>>>>> The autogenerated code also is available from OpenAPI specs, of
>>>>>> course, and the request/response semantics in the same thread are 
>>>>>> precisely
>>>>>> what make load balancing these calls a little harder, and horizontal
>>>>>> scaling to multiple threads comes with every HTTP server, but I digress -
>>>>>> clearly you've made a choice here to write an RPC layer rather than a
>>>>>> lightweight API layer, and go with the more RPC-style features, and I get
>>>>>> that.
>>>>>>
>>>>>> I still think it's choosing something that's more complex to maintain
>>>>>> over a simpler, more accessible option, but since I won't be the one
>>>>>> writing it, that's not really for me to worry about. I am very curious to
>>>>>> see how this evolves as the work towards multitenancy really kicks in and
>>>>>> all the API schemas need to change to add namespacing!
>>>>>>
>>>>>> Andrew
>>>>>>
>>>>>> On Wed, Aug 10, 2022 at 12:52 PM Jarek Potiuk <ja...@potiuk.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Sure I can explain - the main reasons are:
>>>>>>>
>>>>>>> - 1) binary representation performance - impact of this is
>>>>>>> rather limited because our API calls are doing rather heavy processing
>>>>>>> compared to the data being transmitted. But I believe it's not 
>>>>>>> negligible.
>>>>>>> - 2) automated tools to automatically generate strongly typed Python
>>>>>>> code (that's the ProtoBuf part). The strongly typed Python code is what
>>>>>>> convinced me (see my POC). The tooling we got for that is excellent. Far
>>>>>>> more superior than dealing with json-encoded data even with schema.
>>>>>>> - 2) built-in "remote procedure" layer - where we have
>>>>>>> request/response semantics optimisations (for multiple calls over the 
>>>>>>> same
>>>>>>> chanel) and exception handling done for us (This is basically what 
>>>>>>> "Remote
>>>>>>> Procedure" interface provide us)
>>>>>>> - 3) built-in server that efficiently distributes the method called
>>>>>>> from multiple client into a multi-threaded/multi-threaded execution (all
>>>>>>> individual calls are stateless so multi-processing can be added on top
>>>>>>> regardless from the "transport" chosen).
>>>>>>>
>>>>>>> BTW. If you look at my POC code, there is nothing that strongly
>>>>>>> "binds" us to gRPC. The nice thing is that once it is implemented, it 
>>>>>>> can
>>>>>>> be swapped out very easily. The only Proto/gRPC code that "leaks" to
>>>>>>> "generic" Airflow code is mapping of some (most complex) parameters to
>>>>>>> Proto . And this is only for most complex cases - literally only few of 
>>>>>>> our
>>>>>>> types require custom serialisation - most of the mapping is handled
>>>>>>> automatically by generated protobuf code. And we can easily put
>>>>>>> the "complex" mapping in a separate package. Plus there is an "if"
>>>>>>> statement for each of the ~ 30 or so methods that we will have to turn 
>>>>>>> into
>>>>>>> remotely-callable. We can even (as I proposed it as an option) add a 
>>>>>>> little
>>>>>>> python magic and add a simple decorator to handle the "ifs". Then the
>>>>>>> decorator "if" can be swapped with some other "remote call" 
>>>>>>> implementation.
>>>>>>>
>>>>>>> The actual bulk of the implementation is to make sure that all the
>>>>>>> places are covered (that's the testing harness).
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Aug 10, 2022 at 8:25 PM Andrew Godwin
>>>>>>> <andrew.god...@astronomer.io.invalid> wrote:
>>>>>>>
>>>>>>>> Hi Jarek,
>>>>>>>>
>>>>>>>> Apologies - I was as not involved as I wanted to be in the AIP-44
>>>>>>>> process, and obviously my vote is non-binding anyway - but having done 
>>>>>>>> a
>>>>>>>> lot of Python API development over the past decade or so I wanted to 
>>>>>>>> know
>>>>>>>> why the decision was made to go with gRPC over just plain HTTP+JSON 
>>>>>>>> (with a
>>>>>>>> schema, of course).
>>>>>>>>
>>>>>>>> The AIP covers why XMLRPC and Thrift lost out to gRPC, which I
>>>>>>>> agree with - but does not go into the option of using a standard Python
>>>>>>>> HTTP server with JSON schema enforcement, such as FastAPI. In my
>>>>>>>> experience, the tools for load balancing, debugging, testing and 
>>>>>>>> monitoring
>>>>>>>> JSON/HTTP are superior and more numerous than those for gRPC, and in
>>>>>>>> addition the asynchronous support for gRPC servers is lacking compared 
>>>>>>>> to
>>>>>>>> their plain HTTP counterparts, and the fact that you can interact and 
>>>>>>>> play
>>>>>>>> with the APIs in prototyping stages without having to handle obtaining
>>>>>>>> correct protobuf versions for the Airflow version you're using.
>>>>>>>>
>>>>>>>> I wouldn't go so far as to suggest a veto, but I do want to see the
>>>>>>>> AIP address why gRPC would win over this option. Apologies again for 
>>>>>>>> the
>>>>>>>> late realisation that gRPC got chosen and was being voted on - it's 
>>>>>>>> been a
>>>>>>>> very busy summer.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Andrew
>>>>>>>>
>>>>>>>> On Wed, Aug 10, 2022 at 12:12 PM Jarek Potiuk <ja...@potiuk.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Just let me express my rather strong dissatisfaction with the way
>>>>>>>>> this "last minute" is raised.
>>>>>>>>>
>>>>>>>>> It is very late to come up with such a statement - not that it
>>>>>>>>> comes at all, but when it comes when everyone had a chance to take a 
>>>>>>>>> look
>>>>>>>>> and comment, including taking a look at the POC and result of checks. 
>>>>>>>>> This
>>>>>>>>> has never been raised even 4 months ago where the only choices were 
>>>>>>>>> Thrift
>>>>>>>>> and gRPc).
>>>>>>>>>
>>>>>>>>> I REALLY hope the arguments are very strong and backed by real
>>>>>>>>> examples and data why it is a bad choice rather than opinions.
>>>>>>>>>
>>>>>>>>> J,.
>>>>>>>>>
>>>>>>>>> On Wed, Aug 10, 2022 at 7:50 PM Ash Berlin-Taylor <a...@apache.org>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Sorry to weigh in at the last minute, but I'm wary of gRPC over
>>>>>>>>>> just JSON, so -1 to that specific choice. Everything else I'm happy 
>>>>>>>>>> with.
>>>>>>>>>>
>>>>>>>>>> I (or Andrew G) will follow up with more details shortly.
>>>>>>>>>>
>>>>>>>>>> -ash
>>>>>>>>>>
>>>>>>>>>> On Wed, Aug 10 2022 at 19:38:59 +02:00:00, Jarek Potiuk <
>>>>>>>>>> ja...@potiuk.com> wrote:
>>>>>>>>>>
>>>>>>>>>> Oh yeah :)
>>>>>>>>>>
>>>>>>>>>> On Wed, Aug 10, 2022 at 7:23 PM Ping Zhang <pin...@umich.edu>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> ah, good call.
>>>>>>>>>>>
>>>>>>>>>>> I guess the email template can be updated:
>>>>>>>>>>>
>>>>>>>>>>> Only votes from PMC members are binding, but members of the
>>>>>>>>>>>> community are encouraged to check the AIP and vote with 
>>>>>>>>>>>> "(non-binding)".
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> +1 (binding)
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>>
>>>>>>>>>>> Ping
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Aug 10, 2022 at 10:20 AM Jarek Potiuk <ja...@potiuk.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Thank you . And BTW. It's binding Ping :). For AIP's commiter's
>>>>>>>>>>>> votes are binding. See
>>>>>>>>>>>> https://github.com/apache/airflow/blob/main/CONTRIBUTING.rst#commit-policy
>>>>>>>>>>>> :D
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Aug 10, 2022 at 7:16 PM Ping Zhang <pin...@umich.edu>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> +1 (non-binding)
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Ping
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Aug 4, 2022 at 1:42 AM Jarek Potiuk <ja...@potiuk.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hey everyone,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I would like to cast a vote for "AIP-44 - Airflow Internal
>>>>>>>>>>>>>> API".
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The AIP-44 is here:
>>>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-44+Airflow+Internal+API
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Discussion thread:
>>>>>>>>>>>>>> https://lists.apache.org/thread/nsmo339m618kjzsdkwq83z8omrt08zh3
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The voting will last for 5 days (until 9th of August 2022
>>>>>>>>>>>>>> 11:00 CEST), and until at least 3 binding votes have been
>>>>>>>>>>>>>> cast.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Please vote accordingly:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> [ ] + 1 approve
>>>>>>>>>>>>>> [ ] + 0 no opinion
>>>>>>>>>>>>>> [ ] - 1 disapprove with the reason
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Only votes from PMC members are binding, but members of the
>>>>>>>>>>>>>> community are encouraged to check the AIP and vote with
>>>>>>>>>>>>>> "(non-binding)".
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ----
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Just a summary of where we are:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> It's been long in the making, but I think it might be a great
>>>>>>>>>>>>>> step-forward to our long-term multi-tenancy goal. I believe the 
>>>>>>>>>>>>>> proposal I
>>>>>>>>>>>>>> have is quite well thought out and discussed a lot in the past:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> * we have a working POC for implementation used for
>>>>>>>>>>>>>> performance testing:
>>>>>>>>>>>>>> https://github.com/apache/airflow/pull/25094
>>>>>>>>>>>>>> * it is based on on industry-standard open-source gRPC (which
>>>>>>>>>>>>>> is already our dependency) which fits better the RPC "model" we 
>>>>>>>>>>>>>> need than
>>>>>>>>>>>>>> our public REST API.
>>>>>>>>>>>>>> * it has moderate performance impact and rather good
>>>>>>>>>>>>>> maintainability features (very little impact on regular 
>>>>>>>>>>>>>> development effort)
>>>>>>>>>>>>>> * it is fully backwards compatible - the new DB isolation
>>>>>>>>>>>>>> will be an optional feature
>>>>>>>>>>>>>> * has a solid plan for full test coverage in our CI
>>>>>>>>>>>>>> * has a backing and plans for more extensive complete testing
>>>>>>>>>>>>>> in "real" environment with Google Composer team support
>>>>>>>>>>>>>> * allows for further extensions as part of AIP-1 (I am
>>>>>>>>>>>>>> planning to re-establish sig-multitenancy effort for follow up 
>>>>>>>>>>>>>> AIPs once
>>>>>>>>>>>>>> this one is well in progress).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> J.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>
>>> --
>>> Eugene
>>>
>>

Reply via email to