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 > > >