I have added the Stress test and I see the exception, not sure how to fix yet.
https://github.com/manolo/james-couchdb/commit/cf9a41116fca458c440a28ec937b83aeccd7967a

- Manolo

Exception in thread "pool-5-thread-61"
org.ektorp.UpdateConflictException: document update conflict: id:
5e04b2a2c6fd920bc09af5a675000e7d rev:
3-ce227ff7c45a6905e010684f08011d05
        at 
org.ektorp.impl.StdCouchDbConnector$6.error(StdCouchDbConnector.java:319)
        at 
org.ektorp.impl.StdCouchDbConnector$6.error(StdCouchDbConnector.java:308)
        at org.ektorp.http.RestTemplate.handleResponse(RestTemplate.java:98)
        at org.ektorp.http.RestTemplate.put(RestTemplate.java:38)
        at 
org.ektorp.impl.StdCouchDbConnector.update(StdCouchDbConnector.java:307)
        at 
org.ektorp.support.CouchDbRepositorySupport.update(CouchDbRepositorySupport.java:155)
        at 
org.apache.james.mailbox.couchdb.mail.CouchDbMailboxMapper.save(CouchDbMailboxMapper.java:90)
        at 
org.apache.james.mailbox.couchdb.mail.CouchDbUidProvider.nextUid(CouchDbUidProvider.java:39)
        at 
org.apache.james.mailbox.store.mail.AbstractMessageMapper.add(AbstractMessageMapper.java:125)
        at 
org.apache.james.mailbox.store.StoreMessageManager$4.run(StoreMessageManager.java:532)
        at 
org.apache.james.mailbox.store.StoreMessageManager$4.run(StoreMessageManager.java:1)
        at 
org.apache.james.mailbox.store.transaction.TransactionalMapper.execute(TransactionalMapper.java:38)
        at 
org.apache.james.mailbox.store.StoreMessageManager.appendMessageToStore(StoreMessageManager.java:529)
        at 
org.apache.james.mailbox.store.StoreMessageManager$1.execute(StoreMessageManager.java:326)
        at 
org.apache.james.mailbox.store.StoreMessageManager$1.execute(StoreMessageManager.java:1)
        at 
org.apache.james.mailbox.store.AbstractMailboxPathLocker.executeWithLock(AbstractMailboxPathLocker.java:41)
        at 
org.apache.james.mailbox.store.StoreMessageManager.appendMessage(StoreMessageManager.java:322)
        at 
org.apache.james.mailbox.AbstractStressTest$2.run(AbstractStressTest.java:92)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)

On Sun, Oct 16, 2011 at 6:24 PM, Pepijn de Vos <pepijnde...@yahoo.com> wrote:
> Thanks man, really appreciated.
>
> I too think my ModSeq impl looks good, but incrementing the modSeq 4 times in 
> parallel, I noticed that
>
> the value is incremented only 2-3 times.
> _rev is incremented even less.
> additional documents get created.
>
> What happens is that the same mailbox object gets passed to all invocations 
> of nextModSeq. This means that incrementing them in one increments it 
> everywhere. Normally this would only create conflicts in all but one, but 
> because this mailbox does not have an id yet, it creates a new mailbox for 
> every conflict.
>
> So I assume this is not a problem in practice? Because after your fix, all 
> created mailboxes actually do have an id. I'll test that later, and then try 
> to figure out JUnit.
>
> Pepijn
>
> On Oct 16, 2011, at 4:23 PM, Manuel Carrasco Moñino wrote:
>
>> On Sat, Oct 15, 2011 at 5:40 PM, Pepijn de Vos <pepijnde...@yahoo.com> wrote:
>>> So, the result and questions for today:
>>>
>>> https://github.com/pepijndevos/james-couchdb
>>>
>>> What is serialVersionUID?
>>
>> It is a good practice to define it for serializable classes
>> http://www.javapractices.com/topic/TopicAction.do?Id=45
>>
>>>
>>> Is UidValidity something else than what is provided by CouchDbUidProvider?
>>
>> It's a number that changes when all uids become invalid. The server
>> cannot update this number during a session.
>> http://www.afterlogic.com/mailbee-net/docs/MailBee.ImapMail.Imap.UidValidity.html
>>
>>>
>>> I had a look at the InMemory test, and it seems to fail on remainders of 
>>> the InMemory implementation(mentions of ConcurrentHashmap). I'm not sure 
>>> what it tests, but I think it's more than just CouchDbMailboxManager.
>>>
>>> Today I tried to implement ModSeq and Uid. They work fine until you 
>>> introduce concurrency. I'd be glad if someone would take a look at 
>>> nextModSeq.
>>
>> Your implementation looks good.
>>
>>>
>>> I'll try to write a test for it tomorrow. The thing is that the test would 
>>> need the database, right? How do you handle that?
>>
>> Difficult since it seems there is no way to install couchdb and start
>> it from maven.
>> Right now tests should be ignored when ddbb is not running (see
>> maildir tests which are omitted in windows systems)
>> I've added in the setup a call to empty the 'james' database when the
>> test run, also I have added  initStandardDesignDocument() to
>> initialize database.
>> Be careful before run the test if you do not want the ddbb be re-created.
>>
>> Happy coding.
>> - Manolo
>>
>>>
>>> Pepijn
>>>
>>> On Oct 15, 2011, at 11:41 AM, Pepijn de Vos wrote:
>>>
>>>> Thanks! :)
>>>>
>>>> I have no idea what you did with the generics though. I read an article 
>>>> about them, and thought I understood them.
>>>>
>>>> Basically they are just statically checked casts, right? So what does it 
>>>> mean to write X implements Y<Z>?
>>>>
>>>> The tests are just leftovers from InMemory. I'm not doing TDD, but I 
>>>> rather see tests as a frozen REPL. I write code, test it in the REPL, if I 
>>>> find myself repeating pieces in the REPL, I make them into a test. I 
>>>> didn't get to the stage where I could even compile anything.
>>>>
>>>> Pepijn
>>>>
>>>> On Oct 14, 2011, at 8:14 PM, Manuel Carrasco Moñino wrote:
>>>>
>>>>> You are right, you already sent the github link.
>>>>>
>>>>> I've checked out the code and I've made some changes to make it
>>>>> compile, also I have changed id signature in messages and mailboxes to
>>>>> String since couchdb uses string. I have hardcoded a user and password
>>>>> in the Utils class, it should go in the configuration files though.
>>>>>
>>>>> I just have sent you a pull request
>>>>> https://github.com/manolo/james-couchdb/commit/2b6b0ebce5c78198b14d1e7ec05c178d56482919
>>>>>
>>>>> The unique Test in the tree do no pass, I think you can start fixing
>>>>> the test so as it should be easier to follow the code taking a look to
>>>>> tests.
>>>>>
>>>>> - Manolo
>>>>>
>>>>>
>>>>> On Thu, Oct 13, 2011 at 9:54 PM, Pepijn de Vos <pepijnde...@yahoo.com> 
>>>>> wrote:
>>>>>> I added the github link to the beautifully formatted original email, but 
>>>>>> I think Google mistreated my message.
>>>>>>
>>>>>> Her it is again: https://github.com/pepijndevos/james-couchdb
>>>>>>
>>>>>> Pepijn
>>>>>>
>>>>>> On Oct 13, 2011, at 9:28 PM, Manuel Carrasco Moñino wrote:
>>>>>>
>>>>>>> Hi Pepjin, could be possible to share your code anywhere, so as I
>>>>>>> could checkout it and take a look?
>>>>>>>
>>>>>>> Don't worry about if the code is ok or not, I think github could be
>>>>>>> ok, but you could send a compressed file via email or whatever you
>>>>>>> prefer.
>>>>>>>
>>>>>>> - Manolo
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Oct 13, 2011 at 8:12 PM, Pepijn de Vos <pepijnde...@yahoo.com> 
>>>>>>> wrote:
>>>>>>>> Okay, I put up the result for the day.
>>>>>>>> I made a CouchDbMailbox with Ektorp @annotations.
>>>>>>>> I made an attempt to make the MailboxMapper, but I got stuck at the 
>>>>>>>> <type> casting sugar which I don't grok. My IDE keeps complaining it 
>>>>>>>> can't resolve the incompatible types, while both are just Mailboxes.
>>>>>>>> I stuffed the CouchDB connection in a class, not happy with it.
>>>>>>>> I'm not sure how to implement the findMailboxWithPathLike and 
>>>>>>>> hasChildren methods.
>>>>>>>> Any help appreciated, especially with the... <> things. list() is the 
>>>>>>>> only one that's red wiggly lines, the others are just unchecked casts. 
>>>>>>>> I've been adding random casts and <> left and right.
>>>>>>>>
>>>>>>>> https://github.com/pepijndevos/james-couchdb
>>>>>>>>
>>>>>>>> Pepijn
>>>>>>>>
>>>>>>>> On Oct 13, 2011, at 6:23 PM, Pepijn de Vos wrote:
>>>>>>>>
>>>>>>>>> More questions. I started hacking!
>>>>>>>>>
>>>>>>>>> I'm going with Ektorp. I figured out most of it, I think. Except that 
>>>>>>>>> I don't understand the configuration. It does have a Spring module. 
>>>>>>>>> Any pointers on how to organize the config and connections?
>>>>>>>>>
>>>>>>>>> What does findMailboxWithPathLike do? The implementations seem to do 
>>>>>>>>> weird things with regexes. Preferably I make that into a nice CouchDB 
>>>>>>>>> view. CouchDB can't do fulltext search. As far as I can tell, the 
>>>>>>>>> IMAP RFC doesn't say anything about it.
>>>>>>>>>
>>>>>>>>> To have custom message and mailbox classes, do I need to do anything 
>>>>>>>>> else besides subclassing the corresponding *Manager class to return 
>>>>>>>>> one?
>>>>>>>>>
>>>>>>>>> I'm getting there!
>>>>>>>>>
>>>>>>>>> Pepijn
>>>>>>>>>
>>>>>>>>> On Oct 12, 2011, at 9:35 PM, Manuel Carrasco Moñino wrote:
>>>>>>>>>
>>>>>>>>>> Actually Ektorp is not a full implementation of JPA, but it provides 
>>>>>>>>>> a
>>>>>>>>>> JPA like API with support to many of its annotations etc.
>>>>>>>>>>
>>>>>>>>>> Anyway, based on my experience, Ektorp simplifies the access from 
>>>>>>>>>> java
>>>>>>>>>> to couchdb and the bootstrap of couchdb, so as theoretically when
>>>>>>>>>> James starts the first time, the database, views, design, mapreduce,
>>>>>>>>>> etc should be created.
>>>>>>>>>>
>>>>>>>>>> - Manolo
>>>>>>>>>>
>>>>>>>>>> On Wed, Oct 12, 2011 at 1:05 PM, Pepijn de Vos 
>>>>>>>>>> <pepijnde...@yahoo.com> wrote:
>>>>>>>>>>> Ektorp seems nice, but I'm more comfortable just using something 
>>>>>>>>>>> that resembles the HTTP API, since I'm not familiar with JPA. 
>>>>>>>>>>> Haven't decided yet.
>>>>>>>>>>>
>>>>>>>>>>> Pepijn
>>>>>>>>>>>
>>>>>>>>>>> On Oct 11, 2011, at 5:08 PM, Manuel Carrasco Moñino wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Pepijn
>>>>>>>>>>>>
>>>>>>>>>>>> Which java library are you considering to use to connect with 
>>>>>>>>>>>> couchdb?
>>>>>>>>>>>> I'm using [1] ektorp and makes really easy to map domain models.
>>>>>>>>>>>>
>>>>>>>>>>>> - Manolo
>>>>>>>>>>>>
>>>>>>>>>>>> [1] http://www.ektorp.org/reference_documentation.html#d0e532
>>>>>>>>>>>>
>>>>>>>>>>>> On Mon, Oct 10, 2011 at 10:44 PM, Pepijn de Vos 
>>>>>>>>>>>> <pepijnde...@yahoo.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks a lot.
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Oct 10, 2011, at 8:24 PM, Ioan Eugen Stan wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Have patience. You will need it if you wish to complete 
>>>>>>>>>>>>>> something.
>>>>>>>>>>>>>> Patience and perseverance or else you'll be just another one who
>>>>>>>>>>>>>> tried.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I don't expect to have it finished by the end of the week, but if 
>>>>>>>>>>>>> I'm still completely clueless by then, it's just not worth the 
>>>>>>>>>>>>> effort.
>>>>>>>>>>>>> I don't have the ambition to become a James commiter or even a 
>>>>>>>>>>>>> Java dev, I just thought it would be nice to use CouchDB for my 
>>>>>>>>>>>>> application.
>>>>>>>>>>>>> Somewhere is a point where pragmatism beats learning. There isn't 
>>>>>>>>>>>>> any technical reason why I can't use JPA.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Can I just copy an existing one and rename stuff? In other 
>>>>>>>>>>>>>>> words, how are the modules glued into the whole? How does the 
>>>>>>>>>>>>>>> server know which class to load? It's not in the pom.xml, 
>>>>>>>>>>>>>>> afaict.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Not sure what you mean by that. It uses dependency injection 
>>>>>>>>>>>>>> provided
>>>>>>>>>>>>>> by Spring framework (and soon Guice) to inject object references 
>>>>>>>>>>>>>> into
>>>>>>>>>>>>>> other objects at runtime.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Ah, dependency injection. *googles* So just the fact that I 
>>>>>>>>>>>>> implement the interface is enough to @autowire it into James?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> The sample config is gone btw: 
>>>>>>>>>>>>>>> http://james.apache.org/server/3/config-mailbox.html
>>>>>>>>>>>>>>> Do I inherit tests as well? I would imagine that a lot of tests 
>>>>>>>>>>>>>>> are common to all mailbox implementations.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I think this is because the configuration changed and now it's 
>>>>>>>>>>>>>> spring
>>>>>>>>>>>>>> based, and more modular. I see you are very ambitious but I 
>>>>>>>>>>>>>> sense you
>>>>>>>>>>>>>> have a lot of catching up. James is complex so give it time, if 
>>>>>>>>>>>>>> you
>>>>>>>>>>>>>> expect too much from yourself and fail you will probably be too
>>>>>>>>>>>>>> disappointed.
>>>>>>>>>>>>> Yea, I read a Java book long ago, never did any big projects with 
>>>>>>>>>>>>> it.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Make a public repo, commit something and ask if you get stuck. I 
>>>>>>>>>>>>>> will
>>>>>>>>>>>>>> try to help when/if I can. I suggest you start with simple
>>>>>>>>>>>>>> implementation that passes some unit tests.
>>>>>>>>>>>>>
>>>>>>>>>>>>> So If I take any mailbox impl, put it in a separate repo, will it 
>>>>>>>>>>>>> work? All sorts of things refer to the parent pom. I'll put 
>>>>>>>>>>>>> something on github once I figure it out. I think it'll work out 
>>>>>>>>>>>>> once I get to the point where I can write some code.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> See for example the unit tests I did for Mailbox interface in 
>>>>>>>>>>>>>> HBase
>>>>>>>>>>>>>> implementation:
>>>>>>>>>>>>>> http://svn.apache.org/repos/asf/james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/model/HBaseMailboxTest.java
>>>>>>>>>>>>> What I mean with inheriting tests is that these all look very 
>>>>>>>>>>>>> generic. They look like they could test any mailbox 
>>>>>>>>>>>>> implementation.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Pepijn
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Ioan Eugen Stan
>>>>>>>>>>>>>> http://ieugen.blogspot.com/
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>>>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to