@Udo-

That is the thing.  It is not just UI; the ping Thread is also there to
properly set the state of *Gfsh* such that certain commands are not
inappropriately made available as well (think *Gfsh* scripting, which if I
remember correctly leads to a different type of error...
NotConnectedException (with an appropriate message) vs. whatever the 404
translated to), regardless of the polling time.

On Thu, Feb 2, 2017 at 12:22 PM, Udo Kohlmeyer <ukohlme...@pivotal.io>
wrote:

> Not sure what the correct polling time would be... But we'd want to avoid
> the situation where we poll too often. We could launch our own ping-attack.
>
> Also, this UX is not UI, so the difference between updating a screen with
> new information vs checking if the connection is still valid... I'd err on
> the side of caution and say... poll 2s and elgantly deal with a connection
> failure when submitting an operation.
>
> --Udo
>
>
>
> On 2/2/17 12:07, Michael William Dodge wrote:
>
>> A rule I've heard for UX is that anything over 200 ms is noticeable and
>> anything over 2 s is slow. Unless polling every 500 ms is causing problems,
>> it might be best to leave it at 500 ms as a decent compromise between
>> efficiency and responsiveness.
>>
>> Sarge
>>
>> On 2 Feb, 2017, at 12:04, John Blum <jb...@pivotal.io> wrote:
>>>
>>> The connection probably doesn't need to poll every 500ms.
>>>>
>>> 500 ms provided a good (nearly consistent) UX for the user to know almost
>>> instantly that the Manager went away, like the JMX counterpart.  2s is
>>> arguable; 5s is probably too long as the user could already be typing
>>> another command that is not available.  In that case they might get
>>> another
>>> kind of error (don't recall for sure).  Anyway, food for thought.
>>>
>>> If another endpoint is needed (though I cannot imagine why) perhaps `
>>> securePing()` would be more descriptive and still offer up an alternative
>>> route.
>>>
>>>
>>>
>>> On Thu, Feb 2, 2017 at 11:55 AM, Kevin Duling <kdul...@pivotal.io>
>>> wrote:
>>>
>>> Good to know some history on it.  The connection probably doesn't need to
>>>> poll every 500ms.  I would think 2 seconds or even 5 seconds would be
>>>> sufficient in the general case.
>>>>
>>>> If we make ping require authentication, it may resolve the issue.  But
>>>> I'm
>>>> not sure that's the right thing to do.  We could create a 'ping2'
>>>> endpoint
>>>> (with some better name that I cannot currently think of) that does
>>>> require
>>>> auth for this thread to validate the connection.
>>>>
>>>> On Thu, Feb 2, 2017 at 11:49 AM, John Blum <jb...@pivotal.io> wrote:
>>>>
>>>> Back in the day, I introduced this "polling thread" to determine whether
>>>>> *Gfsh* was still connected, since as you say, in a HTTP "stateless"
>>>>> environment and in the absence of a "persistent" connection, it
>>>>> otherwise
>>>>> does not know.
>>>>>
>>>>> So, to simulate the behavior of *Gfsh* when connected via JMX RMI, I
>>>>>
>>>> needed
>>>>
>>>>> to poll the Manager.  That way when the Manager was no longer
>>>>> available,
>>>>>
>>>> it
>>>>
>>>>> would display that *Gfsh* was no longer connected AND that the commands
>>>>> that "require a connection" (e.g. `list region`) were no longer
>>>>> available... again preserving the existing behavior in HTTP mode.
>>>>>
>>>>> Security (basic auth) had not been implemented in *Gfsh* at that time
>>>>>
>>>> when
>>>>
>>>>> I created the Management REST API (or rather, it is more accurate to
>>>>>
>>>> say...
>>>>
>>>>> REST-like; it's not a true REST-ful interface to be precise, which is
>>>>> one
>>>>> reason it never was made public for users to consume, though it could
>>>>>
>>>> have
>>>>
>>>>> been, providing we introduce the proper notion of  REST-ful resources
>>>>> abstractions and change the endpoints (URIs) appropriately; anyway...).
>>>>>
>>>>> -j
>>>>>
>>>>>
>>>>> On Thu, Feb 2, 2017 at 11:08 AM, Kevin Duling <kdul...@pivotal.io>
>>>>>
>>>> wrote:
>>>>
>>>>> Yes it does, immediately on the connect.  So the behavior is different.
>>>>>>
>>>>>> On Thu, Feb 2, 2017 at 10:48 AM, Anthony Baker <aba...@pivotal.io>
>>>>>>
>>>>> wrote:
>>>>>
>>>>>> Seems odd to me that the ‘connect’ command is where the credentials
>>>>>>>
>>>>>> are
>>>>
>>>>> supplied but the failures are only realized when invoking a secure
>>>>>>> command.  So I would need to go back and disconnect / reconnect to
>>>>>>>
>>>>>> fix
>>>>
>>>>> a
>>>>>
>>>>>> password typo.
>>>>>>>
>>>>>>> As a reference point, does ‘connect’ over JMX surface authentication
>>>>>>> errors?
>>>>>>>
>>>>>>> Anthony
>>>>>>>
>>>>>>> On Feb 2, 2017, at 10:37 AM, Kevin Duling <kdul...@pivotal.io>
>>>>>>>>
>>>>>>> wrote:
>>>>>
>>>>>> It's been reported in GEODE-2247 that gfsh can connect in a secured
>>>>>>>> environment without a username/password when using the --use-http
>>>>>>>>
>>>>>>> flag.
>>>>>
>>>>>> When using a jmx connection, this would immediately prompt for
>>>>>>>> user/password.
>>>>>>>>
>>>>>>>> In the http environment, the connection isn't any less secure.  The
>>>>>>>>
>>>>>>> moment
>>>>>>>
>>>>>>>> one attempts to execute a command that an "anonymous user" cannot
>>>>>>>>
>>>>>>> execute,
>>>>>>>
>>>>>>>> they will receive a failure with a message informing them that the
>>>>>>>>
>>>>>>> user
>>>>>
>>>>>> (in
>>>>>>>
>>>>>>>> this case anonymous) cannot execute that command.  That's all fine
>>>>>>>>
>>>>>>> and
>>>>>
>>>>>> good, but the UX should probably be to fail instead on the
>>>>>>>>
>>>>>>> 'connect'
>>>>
>>>>> when
>>>>>>
>>>>>>> in a secure environment.
>>>>>>>>
>>>>>>>> Opinions?
>>>>>>>>
>>>>>>>> The issue is that gfsh uses the 'ping' endpoint to determine
>>>>>>>>
>>>>>>> connectivity,
>>>>>>>
>>>>>>>> which is not secured.  Moreover, it starts a connection poll,
>>>>>>>>
>>>>>>> hitting
>>>>
>>>>> that
>>>>>>>
>>>>>>>> endpoint every 500ms to ensure the connection is still alive.  I
>>>>>>>>
>>>>>>> can't
>>>>>
>>>>>> determine why it's doing this other than to try to wrap an
>>>>>>>>
>>>>>>> artificial
>>>>
>>>>> 'state' in to the stateless nature of REST.  The only advantage I
>>>>>>>>
>>>>>>> see
>>>>
>>>>> is
>>>>>>
>>>>>>> that if I kill my server, gfsh knows right away that it's been
>>>>>>>>
>>>>>>> disconnected
>>>>>>>
>>>>>>>> from it.
>>>>>>>>
>>>>>>>> I have not yet determined whether or not the socket stays open
>>>>>>>>
>>>>>>> through
>>>>>
>>>>>> all
>>>>>>>
>>>>>>>> of this.  I suspect that it does or otherwise I'd see a lot of
>>>>>>>>
>>>>>>> FIN_WAIT
>>>>>
>>>>>> entries in my netstat results.
>>>>>>>>
>>>>>>>> One possible solution to this is to implement security in the
>>>>>>>>
>>>>>>> endpoint.
>>>>>
>>>>>> But ShellCommandsContoller.java doesn't have any security in it.
>>>>>>>>
>>>>>>> Security
>>>>>>>
>>>>>>>> is handled further downstream.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>>> --
>>>>> -John
>>>>> john.blum10101 (skype)
>>>>>
>>>>>
>>>
>>> --
>>> -John
>>> john.blum10101 (skype)
>>>
>>
>


-- 
-John
john.blum10101 (skype)

Reply via email to