Yes - that is a good idea -- probably a few ways to work around it…

However - been using this code for years -- all the sudden pops up -- weird.

I will write back with the findings.

Thanks for the help/comments.

-John




On Wed, Jun 12, 2013 at 2:59 PM, Longwing, Lj <[email protected]> wrote:

> **
> John,
> You may try creating a new 'Entry' object for the update instead of using
> the same one from the Create?
>
>
> On Wed, Jun 12, 2013 at 1:53 PM, John Sundberg <
> [email protected]> wrote:
>
>> **
>> Good info.
>>
>> I referenced create_date -- since that is what we see in the log -- and
>> just assumed last_mod would be the same.
>>
>> We are not really setting/dealing with the last_modified date/time --
>> however I suspect the Java API holds that data internally in the
>> EntryObject… so when we update the EntryObject with our new field
>> name/value pairs I suspect the last_modified date/time is contained in
>> there and is passed along.
>>
>> The fundamental thing we are looking at is -- is our problem client or
>> server side?
>>
>> With the info you gave - I suspect client side -- since no changes or
>> manipulation or state info is stored server side.
>> (We were sort of wondering -- since we never explicitly set the last_mod
>> date in our update call. So - did not even know where that was coming from)
>>
>>
>> We have had lots of transactions happening with this code -- however -
>> have only seen this issue at this one customer and the "odd thing" was the
>> 8.0 client api and 7.6.4 sp2 server. So -- sort of jumped to that area.
>> Also -- replaced with 7.6.4 client -- and it did not come up again (but
>> eventually did). So -- throws a wrench into that thought :)
>>
>> However -- the fact that nobody else said "me too" … is also helpful.
>>
>> Will do some more digging - and return the findings…
>>
>>
>> -John
>>
>>
>> On Wed, Jun 12, 2013 at 2:21 PM, Mueller, Doug <[email protected]>wrote:
>>
>>> **
>>>
>>> First, let's review what the logic of the system is.****
>>>
>>> ** **
>>>
>>> Create-date is completely uninvolved in the discussion here.****
>>>
>>> Modified-date is the date that is significant.****
>>>
>>> ** **
>>>
>>> What occurs is the following:****
>>>
>>> ** **
>>>
>>> A record is created.  The create-date and modified-date should be
>>> identical because the time of create and****
>>>
>>> the time of last modify is the same at this point.****
>>>
>>> ** **
>>>
>>> A record may be modified, in that case, the create-date is unchanged,
>>> but the modified-date is updated to****
>>>
>>> reflect the new date.****
>>>
>>> ** **
>>>
>>> This defines the records we may be interacting with.  There is no
>>> difference in handling regardless of which****
>>>
>>> scenario above was used.****
>>>
>>> ** **
>>>
>>> Now, we get to the logic around updates.****
>>>
>>> ** **
>>>
>>> The server gets an update request.  It has no clue about when you may
>>> have last touched it or when you****
>>>
>>> retrieved it because there is no state information in the server.  There
>>> is a parameter to the API that the****
>>>
>>> client program sets to indicate "when did I retrieve this record". THAT
>>> value is the one the server uses in****
>>>
>>> its check.  It tests the value that the client gave it to see if the
>>> record was changed since that date.  It checks****
>>>
>>> the Modified-date (C4 is the Modified-date, C3 is the Create-date) in
>>> the test.****
>>>
>>> ** **
>>>
>>> Now, in the current version, it also tests the Last-modified-by field
>>> and if it is the same user, it will not return****
>>>
>>> the error (because YOU are the same user so it is not modified by a
>>> "different" user).  There is also ignoring****
>>>
>>> of things like AR_ESCALATOR or maybe configurable ignoring of that user
>>> I think so you don't get warnings****
>>>
>>> about things escalations are the one who changed but I am not sure about
>>> that and that is not the focus of****
>>>
>>> this explanation.  Now, I thought that the user test was also in 7.6.04
>>> but I cannot remember for sure what****
>>>
>>> version it was added in.  Again, just clarification, not critical for
>>> this explanation.****
>>>
>>> ** **
>>>
>>> You can specify a time of 0 for when it was retrieved to indicate you
>>> don't want the test for whether changed****
>>>
>>> run at all and just to modify the record without testing.****
>>>
>>> ** **
>>>
>>> In the clients supplied by BMC, we either put 0 for that time if we
>>> didn't retrieve them or we put the****
>>>
>>> retrieve time that we got from the GetEntry call (there is a time of
>>> retrieval in that call that we use as that****
>>>
>>> ensures we are using SERVER timestamp and not client timestamp to
>>> eliminate issues with clock drift between****
>>>
>>> client and server).****
>>>
>>> ** **
>>>
>>> So, this is how everything is designed to work.****
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> Now, I have not worked directly with the API for a while and am more
>>> familiar with the C API where this time****
>>>
>>> value is an explicit parameter to the call.  I am not sure how it is set
>>> in the Java API.****
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> Scenario 1 – Is your code creating and then modifying the entry?  Where
>>> do you get the timestamp you are****
>>>
>>> using to pass to the modify call for when the entry was "retrieved"?
>>> Since you are not doing a "get" of the****
>>>
>>> entry, the server cannot be giving you a server timestamp, are you using
>>> a client timestamp of when you****
>>>
>>> created it and if the server clock is a second or two different (ahead)
>>> or the entry is created over the****
>>>
>>> boundary of a second since you saved the timestamp….  You can see the
>>> problem you are having.****
>>>
>>> ** **
>>>
>>> Scenario 2 – Is your code "getting" the entry that was created by
>>> someone else and then updating it?  If so,****
>>>
>>> what timestamp are you using for the "retrieved" time?  Are you using
>>> the client time or a time returned from****
>>>
>>> the "get" API call?  see above for issues if it is the client time.****
>>>
>>> ** **
>>>
>>> Scenario 3 – Are you worried about whether the entry has been changed by
>>> someone else since the time****
>>>
>>> you retrieved it?  If not, why aren't you setting the retrieved time to
>>> 0 to eliminate the test that is done on****
>>>
>>> the modify as you don't need the test run, you are just modifying
>>> without checking if someone else has****
>>>
>>> changed the record.****
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> We have seen absolutely no issue with any program that is using the Java
>>> API correctly in this area.  We have****
>>>
>>> hundreds of customers using 8.0 and 8.1 programs and mid-tiers against
>>> 7.6.04 (and 7.6.03 and 7.6 and 7.5****
>>>
>>> and …) servers and none have reported an issue in this area.  And, as
>>> you have found, it isn't about the 8.1****
>>>
>>> API as the issue occurs when using 7.6.04 as well.****
>>>
>>> ** **
>>>
>>> Now, there is always a chance that no other customer has encountered an
>>> issue with any of their programs****
>>>
>>> and there is something wrong in the code.  It is software and you can
>>> never discount things.  But, the logic****
>>>
>>> around this area has been stable for many releases and there have been
>>> no reports of problems.****
>>>
>>> ** **
>>>
>>> Do you fall into one of the 3 scenarios I noted above?  Should you be a
>>> scenario 3?****
>>>
>>> ** **
>>>
>>> But, regardless, it is modified-date that is involved so create-date is
>>> a distraction.  And, one second off is****
>>>
>>> no kind of an "off by one" error within the API/server as there is never
>>> any manipulation of the date, just****
>>>
>>> what date and from where is used.  There is no processing of the data
>>> value itself.****
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> I hope this helps explain the process that the system uses and points to
>>> some ideas for solution within your****
>>>
>>> code.****
>>>
>>> ** **
>>>
>>> Doug Mueller****
>>>
>>> ** **
>>>
>>> *From:* Action Request System discussion list(ARSList) [mailto:
>>> [email protected]] *On Behalf Of *John Sundberg
>>> *Sent:* Wednesday, June 12, 2013 8:51 AM
>>> *To:* [email protected]
>>> *Subject:* 8.0 Java API to 7.6.4 server - update records issue****
>>>
>>> ** **
>>>
>>> ** ****
>>>
>>> ** **
>>>
>>> We have recently seen a sporadic issue with the 8.0 Java API against a
>>> 7.6.4 server…****
>>>
>>> ** **
>>>
>>> The issue is -- a record is created at 2013-06-10T12:00:00 … (call this
>>> 123456789)****
>>>
>>> ** **
>>>
>>> However ****
>>>
>>> ** **
>>>
>>> when the record gets updated…****
>>>
>>> ** **
>>>
>>> The log shows ****
>>>
>>> ** **
>>>
>>> update T1 where c4 <= 123456788 ……****
>>>
>>> ** **
>>>
>>> (Notice - the one second less than the create time)****
>>>
>>> ** **
>>>
>>> So I think what is happening is that the client library is somehow
>>> losing a second (off by one error???) on the update. So - the update fails
>>> with "This record has been updated since you last touched it"…****
>>>
>>> ** **
>>>
>>> However -- if you drop in the 7.6.4 client library -- it works fine.****
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> So … 8.0 client bug ??? or something else?****
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> -John****
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> -- ****
>>>
>>> *John Sundberg*****
>>>
>>> *Kinetic Data, Inc.*****
>>>
>>> *"Your Business. Your Process."*****
>>>
>>> ** **
>>>
>>> 651-556-0930 I* *[email protected] ****
>>>
>>> www.kineticdata.com I* *community.kineticdata.com ****
>>>
>>> ** **
>>>
>>> ** **
>>>
>>> _ARSlist: "Where the Answers Are" and have been for 20 years_ ****
>>> _ARSlist: "Where the Answers Are" and have been for 20 years_
>>>
>>
>>
>>
>> --
>>
>> *John Sundberg*
>> Kinetic Data, Inc.
>> "Your Business. Your Process."
>>
>> 651-556-0930 I [email protected]
>>  www.kineticdata.com I community.kineticdata.com
>>
>>
>>  _ARSlist: "Where the Answers Are" and have been for 20 years_
>>
>
> _ARSlist: "Where the Answers Are" and have been for 20 years_
>



-- 

*John Sundberg*
Kinetic Data, Inc.
"Your Business. Your Process."

651-556-0930 I [email protected]
www.kineticdata.com I community.kineticdata.com

_______________________________________________________________________________
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org
"Where the Answers Are, and have been for 20 years"

Reply via email to