Sorry, I mean I want to do fast work on this issue (not make code faster). Your code is strange. You can see my view in my local temp PR:
https://github.com/SharplEr/ignite/pull/4/files This is what I'm meaning. I suppose "volatile" is not need here, because right now if GridFutureAdapter#onDone() called in another thread than GridFutureAdapter#get0, it will produce AssertionError. 2017-02-28 16:57 GMT+03:00 Vladislav Pyatkov <[email protected]>: > Alexander, > > Are you sure, which it will be faster? > The condition > > resFlag == RES and resFlag == ERR > > should be more complicated... like something this: > > getState() != 0 && !resFlag and getState() != 0 && resFlag > > But unlike getState(), restFag is not volatile... > > On Tue, Feb 28, 2017 at 4:26 PM, Александр Меньшиков <[email protected] > > wrote: > >> Alexey, Vladislav, are you agree with me, or not? I want to do it faster >> and move on. >> >> 2017-02-17 17:36 GMT+03:00 Александр Меньшиков <[email protected]>: >> >>> We can check "onDone" method was called with using getState() method. If >>> getState()!=0 then resFlag!=0. Just look at code. >>> >>> >>> 2017-02-17 17:12 GMT+03:00 Александр Меньшиков <[email protected]>: >>> >>>> Like I said, if "resFlag==0" (of course 0 came from initialization) >>>> means "you still haven't called the method onDone()", better make it clear. >>>> >>>> >>>> >>>> 2017-02-17 14:48 GMT+03:00 Vladislav Pyatkov <[email protected]>: >>>> >>>>> Alexander, >>>>> >>>>> I think, the resFlag will be initiated as 0 (new GridFutureAdapter()), >>>>> but >>>>> 1 and 2 states will be acquired on live. >>>>> >>>>> >>>>> On Fri, Feb 17, 2017 at 1:56 PM, Александр Меньшиков < >>>>> [email protected]> >>>>> wrote: >>>>> >>>>> > Alexey, >>>>> > >>>>> > I see only one place where writes in resFlag: >>>>> > >>>>> > if (err != null) { >>>>> > resFlag = ERR; >>>>> > this.res = err; >>>>> > } >>>>> > else { >>>>> > resFlag = RES; >>>>> > this.res = res; >>>>> > } >>>>> > >>>>> > And the comparison with only two values: "ERR" and "RES". Except >>>>> "assert >>>>> > resFlag != 0;". So if this "assert" protect from call "get0" before >>>>> call >>>>> > "onDone" I think will be clearer to set some ready flag or use >>>>> "enum" type. >>>>> > And throw IllegalStateException if condition is false, because right >>>>> now >>>>> > developer will not get clear error massage. >>>>> > >>>>> > 17 февр. 2017 г. 11:34 пользователь "Alexey Goncharuk" < >>>>> > [email protected]> написал: >>>>> > >>>>> > Alexander, >>>>> > >>>>> > This change is not applicable for GridFutureAdapter because resFlag >>>>> can >>>>> > have 3 values there. >>>>> > >>>>> > 2017-02-16 19:58 GMT+03:00 Александр Меньшиков <[email protected] >>>>> >: >>>>> > >>>>> > > Hello. >>>>> > > >>>>> > > I propose to do refactoring of classes "GridFinishedFuture" and >>>>> > > "GridFutureAdapter". There is field "resFlag" which can equals >>>>> "ERR = 1" >>>>> > or >>>>> > > "RES = 2". So I can replace it to one "bool haveResult" field. >>>>> > > >>>>> > > If there are no objections, I'm ready to proceed. If you find more >>>>> such >>>>> > > classes, please write about them. >>>>> > > >>>>> > >>>>> >>>>> >>>>> >>>>> -- >>>>> Vladislav Pyatkov >>>>> >>>> >>>> >>> >> > > > -- > Vladislav Pyatkov >
