<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic StrongUuidGenerator not thread safe in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/stronguuidgenerator-not-thread-safe/m-p/112041#M78823</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Activiti's StrongUuidGenerator uses fasterxml's TimeBasedGenerator to generate unique ids. Today, during performance testing, I encountered a lot of collisions. Diving in the sources I found that TimeBasedGenerator is, contrary to what the documentation suggests, not thread safe.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This can be easily demonstrated using the following test, which will find a collision even with just 2 threads:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;final TimeBasedGenerator timeBasedGenerator = Generators.timeBasedGenerator(EthernetAddress.fromInterface());&lt;BR /&gt;final Set&amp;lt;UUID&amp;gt; ids = new HashSet&amp;lt;UUID&amp;gt;();&lt;BR /&gt;&lt;BR /&gt;Runnable r = new Runnable() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void run() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; 10000; i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UUID id = timeBasedGenerator.generate();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;synchronized (ids) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!ids.add(id)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new RuntimeException("Id not unique: " + id);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;};&lt;BR /&gt;&lt;BR /&gt;ExecutorService executorService = Executors.newFixedThreadPool(5);&lt;BR /&gt;for (int i = 0; i &amp;lt; 2; i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;executorService.execute(r);&lt;BR /&gt;}&lt;BR /&gt;executorService.shutdown();&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;Synchronizing on timeBasedGenerator resolves this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The root problem is in TimeBasedGenerator, where _uuidBytes is shared between calls to generate().&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Edit: I may be using an old version of JUG…&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 14 May 2012 14:58:42 GMT</pubDate>
    <dc:creator>marcus1</dc:creator>
    <dc:date>2012-05-14T14:58:42Z</dc:date>
    <item>
      <title>StrongUuidGenerator not thread safe</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/stronguuidgenerator-not-thread-safe/m-p/112041#M78823</link>
      <description>Activiti's StrongUuidGenerator uses fasterxml's TimeBasedGenerator to generate unique ids. Today, during performance testing, I encountered a lot of collisions. Diving in the sources I found that TimeBasedGenerator is, contrary to what the documentation suggests, not thread safe.This can be easily d</description>
      <pubDate>Mon, 14 May 2012 14:58:42 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/stronguuidgenerator-not-thread-safe/m-p/112041#M78823</guid>
      <dc:creator>marcus1</dc:creator>
      <dc:date>2012-05-14T14:58:42Z</dc:date>
    </item>
    <item>
      <title>Re: StrongUuidGenerator not thread safe</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/stronguuidgenerator-not-thread-safe/m-p/112042#M78824</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Okay, I was indeed using an old version of JUG: 3.1.0. With 3.1.3 it's working fine. Oops, my mistake &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 May 2012 08:12:19 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/stronguuidgenerator-not-thread-safe/m-p/112042#M78824</guid>
      <dc:creator>marcus1</dc:creator>
      <dc:date>2012-05-15T08:12:19Z</dc:date>
    </item>
  </channel>
</rss>

