-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/72448/#review220548
-----------------------------------------------------------



Thanks for handling this bug!

At this point, the main issue with this patch is that it doesn't discern 
between declined authorization and authorization failure (see below).
To address this, you'll likely have to extend/change the interface provided by 
ObjectApprover**s** (plural) so that they don't disguise authorization errors 
as declined authorization.

Also, please link MESOS-10085 to this review ("Bugs:" on the right or 
`support/post-reviews.py --bugs-closed MESOS-10085`) and don't forget the 
"testing done" section.


include/mesos/master/master.proto
Lines 732 (patched)
<https://reviews.apache.org/r/72448/#comment309034>

    Do we really need `required` here?
    
    By labelling this field as `required`, we imply that `Error` without a 
`message` will always be ill-formed and introduce a guarantee that all future 
versions of Mesos will be setting this field (see "Required is Forever" in 
https://developers.google.com/protocol-buffers/docs/proto)
    
    Given that in distant future a need to provide more information in `Error` 
might arise, and this might lead to making `message` string optional or even 
deprecated, I would suggest marking it as `optional` right now, because there 
is no compatible way back from `required`.
    
    Additionally, I'm not actually sure this should be a string - see below.



src/master/master.cpp
Lines 12264 (patched)
<https://reviews.apache.org/r/72448/#comment309036>

    As implemented now, `false` returned by `ObjectApprovers::approved()` is 
not necessarily an error case. This might just be a declined authorization, 
i.e. the  subscriber is not even allowed to see the object in question due to 
the missing permissions. Events for such objects should just be not sent to the 
subscriber.
    
    To distinguish between **declined authorization** and **authorization 
error** here, you will have to change/extend the interface provided by 
`ObjectApprovers` (plural) so that it doesn't hide `Error`s returned by 
`approved()` method of `ObjectApprover`(singular).



src/master/master.cpp
Lines 12266 (patched)
<https://reviews.apache.org/r/72448/#comment309037>

    The messages in your patch seem to be rather uniform: they include a type 
of error ("Event Unapproved", you will need to change this after addressing the 
denied vs error issue above) and a type of event.
    
    Sending a type of event is definitely a good idea:  if the subscriber does 
not really care about frameworks and only wants to know the state of tasks, and 
sending `FRAMEWORK_ADDED` fails, it could just proceed without worrying that it 
missed some update it needed.
    
    Probably, instead of a single `message` string, we could just have two enum 
fields? Like
    ```
    message Error {
      enum ErrorType {
        UNKNOWN = 0;
        AUTHORIZATION_FAILURE = 1;
      }
      optional ErrorType error_type;
      optional Type event_type;
    }
    ```
    
    This could help the subscriber, if it wants, to extract the type of the 
event that was dropped and act (or not act) accordingly.
    
    I doubt this will impact error message readability on the subscriber side: 
subscribers receiving JSON will have no problems with this, and subscribers  
that receive protobuf have to use protobuf reflection to log anything 
meaningful anyway.



src/master/master.cpp
Lines 12268 (patched)
<https://reviews.apache.org/r/72448/#comment309038>

    Given that now we are sending `Error` event, the subscribers that are aware 
of this event can do whatever they want (proceed as if nothing happened; close 
connection and subscribe again, etc.)
    
    Are we aiming to fix inconsistency created by dropped events for existing 
subscribers, that do not handle `Error` event? If yes, then one (and probably 
the only) option for fixing this for existing subscribers is to close 
connection and drop the subscriber after sending `Error`.
    
    Probably, at this point we could just always close after Error. In a 
distant future, when the subsrcibers become aware of `Error`, we will probably 
want to add a flag to `SUBSCRIBE` so that, if the flag is set,  disconnection 
doesn't happen, and the subscriber resubscribes on its own if it wants to.



src/tests/master/mock_master_api_subscriber.cpp
Lines 242 (patched)
<https://reviews.apache.org/r/72448/#comment309035>

    Given that we will need to add a test for this fix, doesn't it make sense 
to add one more callback, for `ERROR`? 
    This way, tests will be able to use `EXPECT_CALL` when they need to check 
that the error was sent.


- Andrei Sekretenko


On April 29, 2020, 6:18 a.m., Dong Zhu wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/72448/
> -----------------------------------------------------------
> 
> (Updated April 29, 2020, 6:18 a.m.)
> 
> 
> Review request for mesos, Andrei Sekretenko and Benjamin Mahler.
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch intends to fix issue MESOS-10085.
> 
> When the authorization failed happens master return nothing to the
> subscriber, subscriber isn't aware of what is happening, this issue
> can lead to inconsistencies in Event stream.
> 
> 
> Diffs
> -----
> 
>   include/mesos/master/master.proto 021dadcea026da41347b3aaee5ddd12f4f14fa29 
>   include/mesos/v1/master/master.proto 
> 488fe294e8bfe8e0c6fc23c88f06c0d41169b96d 
>   src/master/master.cpp a8cca622ff0bd172300b9a2717b4860ed06b620c 
>   src/tests/master/mock_master_api_subscriber.cpp 
> 893d3e366164ccebd2847ed4c2874ab00e0e5b7b 
> 
> 
> Diff: https://reviews.apache.org/r/72448/diff/1/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Dong Zhu
> 
>

Reply via email to