> On April 29, 2020, 2:58 p.m., Andrei Sekretenko wrote:
> > 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.

Thanks for your info, I replied them one by one as below.


> On April 29, 2020, 2:58 p.m., Andrei Sekretenko wrote:
> > include/mesos/master/master.proto
> > Lines 732 (patched)
> > <https://reviews.apache.org/r/72448/diff/1/?file=2229244#file2229244line732>
> >
> >     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.

Sure. Let me change it.


> On April 29, 2020, 2:58 p.m., Andrei Sekretenko wrote:
> > src/master/master.cpp
> > Lines 12264 (patched)
> > <https://reviews.apache.org/r/72448/diff/1/?file=2229246#file2229246line12264>
> >
> >     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).

Why will we need to distinguish those two circumstances ? 
`ObjectApprovers::approved()` returned with `false` when **declined 
authorization** or **authorization error** happens. The purpose of this patch 
just handling the `false` part by sending a notification to the subscriber.


> On April 29, 2020, 2:58 p.m., Andrei Sekretenko wrote:
> > src/master/master.cpp
> > Lines 12266 (patched)
> > <https://reviews.apache.org/r/72448/diff/1/?file=2229246#file2229246line12266>
> >
> >     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.

```
message Error {
  enum ErrorType {
    UNKNOWN = 0;
    AUTHORIZATION_FAILURE = 1;
  }
  optional ErrorType error_type;
  optional Type event_type;
}
```

This form of message is better and this is one thing that I want to confirm 
with. I will make change to the patch.


> On April 29, 2020, 2:58 p.m., Andrei Sekretenko wrote:
> > src/master/master.cpp
> > Lines 12268 (patched)
> > <https://reviews.apache.org/r/72448/diff/1/?file=2229246#file2229246line12268>
> >
> >     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.

OK, close this http connection after sending the `Error` Event.


> On April 29, 2020, 2:58 p.m., Andrei Sekretenko wrote:
> > src/tests/master/mock_master_api_subscriber.cpp
> > Lines 242 (patched)
> > <https://reviews.apache.org/r/72448/diff/1/?file=2229247#file2229247line242>
> >
> >     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.

Can I send subsequent patch for adding test ?


- Dong


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


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