Mark,

Can you give concrete examples in the API?

On Thu, Aug 31, 2017 at 11:11 AM Mark Hanson <mhan...@pivotal.io> wrote:

> This basic problem exists with the following cases.
> Interval: to do something at an interval
> Wait: to wait a certain length of time
> Retry: to retry a certain number of times
> Attempts: to make a certain number of attempts (similar to retry)
> Sets of objects: to iterate through an unscoped set of objects.
>
> On Thu, Aug 31, 2017 at 11:04 AM, Jacob Barrett <jbarr...@pivotal.io>
> wrote:
>
> > I should have scoped it to the native API.
> >
> > > On Aug 31, 2017, at 10:30 AM, Bruce Schuchardt <bschucha...@pivotal.io
> >
> > wrote:
> > >
> > > The DistributedLockService uses -1/0/n
> > >
> > >
> > >> On 8/31/17 10:21 AM, Jacob Barrett wrote:
> > >> In relation to this particular example you provided the discussion of
> > removing it is valid as an alternative to fixing it.
> > >>
> > >> Are there other examples of this -1/0/n parameter style we should
> > discuss?
> > >>
> > >> -Jake
> > >>
> > >>
> > >> Sent from my iPhone
> > >>
> > >>> On Aug 31, 2017, at 10:15 AM, Mark Hanson <mhan...@pivotal.io>
> wrote:
> > >>>
> > >>> As I understand it here, the question is when the first server is no
> > longer
> > >>> available, do we retry on another server. I would say the answer is
> > clearly
> > >>> yes and we in the name of controlling load want to have an API that
> > >>> controls the timing of how that is done. The customer can say no
> > retries
> > >>> and they can right their own........
> > >>>
> > >>> This is a little bit off the topic of the much larger topic though.
> The
> > >>> reason I was told to send this email was to broach the larger
> > discussion of
> > >>> iteration and the overloading to use -1 to mean infinite. At least
> > that is
> > >>> my understanding...
> > >>>
> > >>>
> > >>> On Thu, Aug 31, 2017 at 9:32 AM, Udo Kohlmeyer <
> ukohlme...@pivotal.io>
> > >>> wrote:
> > >>>
> > >>>> +1 to removing retry,
> > >>>>
> > >>>> Imo, the retry should made the responsibility of the submitting
> > >>>> application. When an operation fails, the user should have to decide
> > if
> > >>>> they should retry or not. It should not be default behavior of a
> > connection
> > >>>> pool.
> > >>>>
> > >>>> --Udo
> > >>>>
> > >>>>
> > >>>>
> > >>>>> On 8/31/17 09:26, Dan Smith wrote:
> > >>>>>
> > >>>>> The java client does still have a retry-attempts setting - it's
> > pretty
> > >>>>> much
> > >>>>> the same as the C++ API.
> > >>>>>
> > >>>>> I agree with Bruce though, I think the current retry behavior is
> not
> > >>>>> ideal.
> > >>>>> I think it only really makes sense for the client to retry an
> > operation
> > >>>>> that it actually sent to the server if the server stops responding
> to
> > >>>>> pings. The believe the current retry behavior just waits the
> > read-timeout
> > >>>>> and then retries the operation on a new server.
> > >>>>>
> > >>>>> -Dan
> > >>>>>
> > >>>>> On Thu, Aug 31, 2017 at 8:08 AM, Bruce Schuchardt <
> > bschucha...@pivotal.io
> > >>>>> wrote:
> > >>>>>
> > >>>>> Does anyone have a good argument for clients retrying operations?
> I
> > can
> > >>>>>> see doing that if the server has died but otherwise it just
> > overloads the
> > >>>>>> servers.
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>> On 8/30/17 8:36 PM, Dan Smith wrote:
> > >>>>>>
> > >>>>>> In general, I think we need making the configuration of geode less
> > >>>>>>> complex,
> > >>>>>>> not more.
> > >>>>>>>
> > >>>>>>> As far as retry-attempts goes, maybe the best thing to do is to
> > get rid
> > >>>>>>> of
> > >>>>>>> it. The P2P layer has no such concept. I don't think users should
> > really
> > >>>>>>> have to care about how many servers an operation is attempted
> > against. A
> > >>>>>>> user may want to specify how long an operation is allowed to
> take,
> > but
> > >>>>>>> that
> > >>>>>>> could be better specified with an operation timeout rather than
> the
> > >>>>>>> current
> > >>>>>>> read-timeout + retry-attempts.
> > >>>>>>>
> > >>>>>>> -Dan
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> On Wed, Aug 30, 2017 at 2:08 PM, Patrick Rhomberg <
> > prhomb...@pivotal.io
> > >>>>>>> wrote:
> > >>>>>>>
> > >>>>>>> Personally, I don't much like sentinel values, even if they have
> > their
> > >>>>>>>
> > >>>>>>>> occasional use.
> > >>>>>>>>
> > >>>>>>>> Do we need to provide an authentic infinite value?  64-bit
> MAXINT
> > is
> > >>>>>>>> nearly
> > >>>>>>>> 10 quintillion.  At 10GHz, that still takes almost three years.
> > If
> > >>>>>>>> each
> > >>>>>>>> retry takes as much as 10ms, we're still looking at "retry for
> as
> > long
> > >>>>>>>> as
> > >>>>>>>> the earth has existed."  32-bit's is much more attainable, of
> > course,
> > >>>>>>>> but I
> > >>>>>>>> think the point stands -- if you need to retry that much,
> > something
> > >>>>>>>> else
> > >>>>>>>> is
> > >>>>>>>> very wrong.
> > >>>>>>>>
> > >>>>>>>> In the more general sense, I struggle to think of a context
> where
> > an
> > >>>>>>>> authentic infinity is meaningfully distinct in application from
> a
> > >>>>>>>> massive
> > >>>>>>>> finite like MAXINT.  But I could be wrong and would love to hear
> > what
> > >>>>>>>> other
> > >>>>>>>> people think.
> > >>>>>>>>
> > >>>>>>>> On Wed, Aug 30, 2017 at 1:26 PM, Mark Hanson <
> mhan...@pivotal.io>
> > >>>>>>>> wrote:
> > >>>>>>>>
> > >>>>>>>> Hi All,
> > >>>>>>>>
> > >>>>>>>>> *Question: how should we deal in a very forward and clean
> > fashion with
> > >>>>>>>>>
> > >>>>>>>>> the
> > >>>>>>>> implicit ambiguity of -1 or all, or infinite, or forever?*
> > >>>>>>>>>
> > >>>>>>>>> *Background:*
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> We are looking to get some feedback on the subject of
> > >>>>>>>>>
> > >>>>>>>>> infinite/all/forever
> > >>>>>>>> in the geode/geode-native code.
> > >>>>>>>>>
> > >>>>>>>>> In looking at the code, we see an example function,
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> setRetryAttempts
> > >>>>>>>>> <https://github.com/apache/geode-native/blob/
> > >>>>>>>>> 006df0e70eeb481ef5e9e821dba0050dee9c6893/cppcache/include/
> > >>>>>>>>> geode/PoolFactory.hpp#L327>()
> > >>>>>>>>> [1] currently -1 means try all servers before failing. 0 means
> > try 1
> > >>>>>>>>>
> > >>>>>>>>> server
> > >>>>>>>> before failing, and a number greater than 0 means try number of
> > servers
> > >>>>>>>>> +1
> > >>>>>>>> before failing. In the case of setRetryAttempts, we don’t know
> > how many
> > >>>>>>>>> servers there are. This means that -1 for "All" servers has no
> > >>>>>>>>> relation
> > >>>>>>>>>
> > >>>>>>>>> to
> > >>>>>>>> the actual number of servers that we have. Perhaps
> > setRetryAttempts
> > >>>>>>>>> could
> > >>>>>>>>> be renamed to setNumberOfAttempts to clarify as well, but the
> > problem
> > >>>>>>>>>
> > >>>>>>>>> still
> > >>>>>>>> stands...
> > >>>>>>>>>
> > >>>>>>>>> *Discussion:*
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> In an attempt to provide the best code possible to the geode
> > >>>>>>>>> community,
> > >>>>>>>>> there has been some discussion of the use of
> > infinite/all/forever as
> > >>>>>>>>> an
> > >>>>>>>>> overload of a count. Often -1 indicates infinite, while 0
> > indicates
> > >>>>>>>>>
> > >>>>>>>>> never,
> > >>>>>>>> and 1 to MAXINT, inclusive, indicates a count.
> > >>>>>>>>>
> > >>>>>>>>> There are three obvious approaches to solve the problem of the
> > >>>>>>>>>
> > >>>>>>>>> overloading
> > >>>>>>>> of -1. The first approach is do nothing… Status quo.
> > >>>>>>>>>
> > >>>>>>>>> The second approach to clarify things would be to create an
> > >>>>>>>>> enumeration
> > >>>>>>>>> that would be passed in as well as the number or an object..
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> struct Retries
> > >>>>>>>>>
> > >>>>>>>>> {
> > >>>>>>>>>
> > >>>>>>>>>    typedef enum { eINFINITE, eCOUNT, eNONE} eCount;
> > >>>>>>>>>
> > >>>>>>>>>    eCount approach;
> > >>>>>>>>>
> > >>>>>>>>>    unsigned int count;
> > >>>>>>>>>
> > >>>>>>>>> };
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> The third approach would be to pass a continue object of some
> > sort
> > >>>>>>>>> such
> > >>>>>>>>> that it tells you if it is ok to continue through the use of an
> > >>>>>>>>>
> > >>>>>>>>> algorithm.
> > >>>>>>>> An example would be
> > >>>>>>>>>
> > >>>>>>>>> class Continue
> > >>>>>>>>>
> > >>>>>>>>> {
> > >>>>>>>>>
> > >>>>>>>>> virtual bool Continue() = 0;
> > >>>>>>>>>
> > >>>>>>>>> }
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> class InfiniteContinue : public Continue
> > >>>>>>>>>
> > >>>>>>>>> {
> > >>>>>>>>>
> > >>>>>>>>> bool Continue()
> > >>>>>>>>>
> > >>>>>>>>> {
> > >>>>>>>>>
> > >>>>>>>>> return true;
> > >>>>>>>>>
> > >>>>>>>>> }
> > >>>>>>>>>
> > >>>>>>>>> }
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> Continue co = InfiniteContinue;
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> while( co.Continue() )
> > >>>>>>>>>
> > >>>>>>>>> {
> > >>>>>>>>>
> > >>>>>>>>> //do a thing
> > >>>>>>>>>
> > >>>>>>>>> }
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> Another example would be a Continue limited to 5 let’s say,
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> class CountContinue : public Continue
> > >>>>>>>>>
> > >>>>>>>>> {
> > >>>>>>>>>
> > >>>>>>>>> private:
> > >>>>>>>>>
> > >>>>>>>>> int count;
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> public:
> > >>>>>>>>>
> > >>>>>>>>> CountContinue(int count)
> > >>>>>>>>>
> > >>>>>>>>> {
> > >>>>>>>>>
> > >>>>>>>>> this.count = count;
> > >>>>>>>>>
> > >>>>>>>>> }
> > >>>>>>>>>
> > >>>>>>>>> bool Continue()
> > >>>>>>>>>
> > >>>>>>>>> {
> > >>>>>>>>>
> > >>>>>>>>>    return count— > 0;
> > >>>>>>>>>
> > >>>>>>>>> }
> > >>>>>>>>>
> > >>>>>>>>> }
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> In both of these cases what is happening is that the algorithm
> is
> > >>>>>>>>> being
> > >>>>>>>>> outsourced.
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> *Conclusion:*
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> We are putting this out, to start a discussion on the best way
> > to move
> > >>>>>>>>>
> > >>>>>>>>> this
> > >>>>>>>> forward… *What do people think? What direction would be the best
> > going
> > >>>>>>>>> forward?*
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> [1]
> > >>>>>>>>> https://github.com/apache/geode-native/blob/
> > >>>>>>>>>
> > >>>>>>>>> 006df0e70eeb481ef5e9e821dba005
> > >>>>>>>> 0dee9c6893/cppcache/include/geode/PoolFactory.hpp#L327
> > >>>>>>>>>
> > >>>>>>>>>
> > >
> >
>

Reply via email to