"Sorry for the discussion" for me, this discussion is interesting and important because I need a solution. :-) Thank you for the discussion! I tried following ideas but they have been up to 4 times slower than the original: 1) I tried to remember the last seed in an inst var of UUIDGenerator and create it new if it was the same as the last one. 2) wait for 1 millisecond before create new seed. As third, I tried adding a (random nextInt: 100000). This did not work, there have been also doouble numbers. So, perhaps the counter is a good idea but is it fast? Again, I work on windows and so I get nil as answer to makeUnixSeed. makeSeed | seed | seed := self makeUnixSeed. seed ifNotNil: [^seed]. [seed := (Time millisecondClockValue bitAnd: 16r3FFFFFFF) bitXor: self hash. seed := seed bitXor: (Time totalSeconds bitAnd: 16r3FFFFFFF). seed = 0] whileTrue: ["Try again if ever get a seed = 0"]. ^seed On Fri, Aug 30, 2013 at 5:15 PM, Sven Van Caekenberghe-2 [via Smalltalk] < ml-node+s1294792n4705817h22@n4.nabble.com> wrote:
On 30 Aug 2013, at 16:54, Esteban Lorenzano <[hidden email]<http://user/SendEmail.jtp?type=node&node=4705817&i=0>> wrote:
On Aug 30, 2013, at 4:49 PM, Sven Van Caekenberghe <[hidden email]<http://user/SendEmail.jtp?type=node&node=4705817&i=1>>
wrote:
On 30 Aug 2013, at 16:35, Esteban Lorenzano <[hidden email]<http://user/SendEmail.jtp?type=node&node=4705817&i=2>>
wrote:
On Aug 29, 2013, at 5:08 PM, Sven Van Caekenberghe <[hidden email]<http://user/SendEmail.jtp?type=node&node=4705817&i=3>>
wrote:
On 29 Aug 2013, at 16:51, Esteban Lorenzano <[hidden email]<http://user/SendEmail.jtp?type=node&node=4705817&i=4>>
wrote:
hi
well... I've never been happy on using the UUID generator for my
keys, but is the fastest option I found.
There are, of course, alternatives:
1) Using your own number generator (sequential, or whatever). Problem with that is that is image based, then you need a persistence strategy... then you are slow. 2) then you can use your own procedure in mongo... with same problem than (1) 3) you could use timestamp. but TimeStamps are slow :(
anyway... I open to ideas :)
in the mean time, you can check if your UUID generator is using the primitive or not. In you are not, you have more possibilities of having a collision.
Yes, the Smalltalk code (type 4 UUID) is just a random number that is computed in a complex way.
What does the primitive actually do ? Is it different ?
the primitive uses the clock ticks to produce an UUID... you shouldn't have repeated numbers that way... but well, it depends on the platform implementation also.
I don't like plugins because it is some much harder for everyone to look at the implementation, while everybody thinks some magic happens there, and often the truth is quite disappointing.
Maybe the resolution of #primUTCMicrosecondsClock is not high enough ?
I tried... not enough :(
I understand: the clock is not fast enough for the request rate. But then what is there against some counter as part of a UUID ?
Sorry for the discussion, I find it an interesting subject. I'll have to read a bit about UUIDs. Can anyone point to the plugin implementation code ?
Esteban
On Aug 29, 2013, at 11:27 AM, Sabine Knöfel <[hidden email]<http://user/SendEmail.jtp?type=node&node=4705817&i=5>> wrote:
Hi Esteban, All,
I was proceeding to seach for the reason of the problem I described yesterday.
I added some debugging code into VOMongoSerializer>>ensurePersisted: and the problem I described, did NOT occur.
That made the whole process slower...and I had an idea....
I was looking into >>UUIDGenerator default makeSeed. Then I tried the following code:
|theOld theNew|
100000000 timesRepeat: [ theNew := UUIDGenerator default makeSeed. theNew = theOld ifTrue: [self halt]. theOld := theNew]
The debugger came up! Doesn't that mean that, if the code is run very fast, there are double OIDs generated?!
In my case, the objects for country and currency are very lightweight and so, they are created very fast. Also, the error occured much more often within my fast production EC2 instance as at my (old and slow) development pc.
Important: I work with windows and so >>makeUnixSeed returns nil... :-)
What is your opinion about that?
Sabine
-- View this message in context: http://forum.world.st/voyage-mongo-randomly-wrong-OIDs-tp4705396p4705603.htm... Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
------------------------------ If you reply to this email, your message will be added to the discussion below:
http://forum.world.st/voyage-mongo-randomly-wrong-OIDs-tp4705396p4705817.htm... To unsubscribe from voyage/mongo randomly wrong OIDs, click here<http://forum.world.st/template/NamlServlet.jtp?macro=unsubscribe_by_code&nod...> . NAML<http://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant...>
-- View this message in context: http://forum.world.st/voyage-mongo-randomly-wrong-OIDs-tp4705396p4705819.htm... Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.