Did you initialize the STM?

(init-stm client)

You only need to do it the first time, to set up the necessary zookeeper nodes, 
it's described in the main tutorial but not the snippet on the top of the avout 
site.

David

On Dec 1, 2011, at 12:15 PM, Sam Aaron wrote:

> Hi David,
> 
> thanks for looking into this so promptly. Sadly 0.5.1 just throws a different 
> exception:
> 
> user=> (def client (connect "127.0.0.1"))                                     
>                                                                               
>                               
> #'user/client                                                                 
>                                                                               
>                               
> user=> (def r0 (zk-ref client "/r0" 0))                                       
>                                                                               
>                               
> java.lang.RuntimeException: 
> org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = 
> NoNode for /stm/history/t-                                                    
>          
> run-in-transaction exception:  #<RuntimeException java.lang.RuntimeException: 
> org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = 
> NoNode for /stm/history/t-> nil      
>        at clojure.lang.Util.runtimeException(Util.java:165)                   
>                                                                               
>                               
>        at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:35)      
>                                                                               
>                              
>        at avout.transaction$run_in_transaction.invoke(transaction.clj:356)    
>                                                                               
>                              
>        at avout.core$zk_ref.doInvoke(core.clj:51)                             
>                                                                               
>                               
>        at clojure.lang.RestFn.invoke(RestFn.java:445)                         
>                                                                               
>                               
>        at clojure.lang.AFn.applyToHelper(AFn.java:167)                        
>                                                                               
>                              
>        at clojure.lang.RestFn.applyTo(RestFn.java:132)                        
>                                                                               
>                              
>        at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3337)           
>                                                                               
>                               
>        at clojure.lang.Compiler$DefExpr.eval(Compiler.java:375)               
>                                                                               
>                               
>        at clojure.lang.Compiler.eval(Compiler.java:6470)                      
>                                                                               
>                              
>        at clojure.lang.Compiler.eval(Compiler.java:6431)                      
>                                                                               
>                              
>        at clojure.core$eval.invoke(core.clj:2795)                             
>                                                                               
>                               
>        at clojure.main$repl$read_eval_print__5967.invoke(main.clj:244)        
>                                                                               
>                              
>        at clojure.main$repl$fn__5972.invoke(main.clj:265)                     
>                                                                               
>                               
>        at clojure.main$repl.doInvoke(main.clj:265)                            
>                                                                               
>                              
>        at clojure.lang.RestFn.invoke(RestFn.java:512)                         
>                                                                               
>                               
>        at user$eval27$acc__3869__auto____30$fn__32.invoke(NO_SOURCE_FILE:1)   
>                                                                               
>                               
>        at clojure.lang.AFn.run(AFn.java:24)                                   
>                                                                               
>                               
>        at java.lang.Thread.run(Thread.java#'user/r0                           
>                                                                               
>                               
> user=> :680)                                                                  
>                                                                               
>                                
> Caused by: org.apache.zookeeper.KeeperException$NoNodeException: 
> KeeperErrorCode = NoNode for /stm/history/t-                                  
>                                            
>        at 
> org.apache.zookeeper.KeeperException.create(KeeperException.java:102)         
>                                                                               
>                     
>        at 
> org.apache.zookeeper.KeeperException.create(KeeperException.java:42)          
>                                                                               
>                    
>        at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:637)           
>                                                                               
>                               
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         
>                                                                               
>                               
>        at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
>                                                                               
>                     
>        at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>                                                                               
>              
>        at java.lang.reflect.Method.invoke(Method.java:597)                    
>                                                                               
>                              
>        at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>                                                                               
>                              
>        at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30)      
>                                                                               
>                              
>        at zookeeper$create.doInvoke(zookeeper.clj:158)                        
>                                                                               
>                              
>        at clojure.lang.RestFn.invoke(RestFn.java:521)                         
>                                                                               
>                               
>        at avout.transaction$next_point.invoke(transaction.clj:62)             
>                                                                               
>                               
>        at avout.transaction$reincarnate_txn.invoke(transaction.clj:233)       
>                                                                               
>                               
>        at avout.transaction$stop$fn__1104.invoke(transaction.clj:243)         
>                                                                               
>                               
>        at avout.transaction$stop.invoke(transaction.clj:238)                  
>                                                                               
>                              
>        at 
> avout.transaction.LockingTransaction$fn__1117.invoke(transaction.clj:323)     
>                                                                               
>                     
>        at 
> avout.transaction.LockingTransaction.runInTransaction(transaction.clj:303)    
>                                                                               
>                    
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         
>                                                                               
>                               
>        at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
>                                                                               
>                     
>        at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>                                                                               
>              
>        at java.lang.reflect.Method.invoke(Method.java:597)                    
>                                                                               
>                              
>        at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>                                                                               
>                              
>        at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30)      
>                                                                               
>                              
>        ... 17 more    
> 
> 
> also, trying to avoid setting the value on creation of the ref doesn't work 
> either:                                                                       
>                                                                               
>               
> 
> 
> user=> (def r1 (zk-ref client "/r1"))                                         
>                                                                               
>                             
> #'user/r1                                                                     
>                                                                               
>                             
> user=> (dosync!! client (ref-set!! r1 0))                                     
>                                                                               
>                             
> java.lang.RuntimeException: 
> org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = 
> NoNode for /stm/history/t-                                                    
>        
> run-in-transaction exception:  #<RuntimeException java.lang.RuntimeException: 
> org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = 
> NoNode for /stm/history/t-> nil    
> nil                                                                           
>                                                                               
>                             
>        at clojure.lang.Util.runtimeException(Util.java:165)                   
>                                                                               
>                             
>        at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:35)      
>                                                                               
>                            
>        at avout.transaction$run_in_transaction.invoke(transaction.clj:356)    
>                                                                               
>                            
>        at user$eval1426.invoke(NO_SOURCE_FILE:49)                             
>                                                                               
>                             
>        at clojure.lang.Compiler.eval(Compiler.java:6465)                      
>                                                                               
>                            
>        at clojure.lang.Compiler.eval(Compiler.java:6431)                      
>                                                                               
>                            
>        at clojure.core$eval.invoke(core.clj:2795)                             
>                                                                               
>                             
>        at clojure.main$repl$read_eval_print__5967.invoke(main.clj:244)        
>                                                                               
>                            
>        at clojure.main$repl$fn__5972.invoke(main.clj:265)                     
>                                                                               
>                             
>        at clojure.main$repl.doInvoke(main.clj:265)                            
>                                                                               
>                            
>        at clojure.lang.RestFn.invoke(RestFn.java:512)                         
>                                                                               
>                             
>        at user$eval27$acc__3869__auto____30$fn__32.invoke(NO_SOURCE_FILE:1)   
>                                                                               
>                             
>        at clojure.lang.AFn.run(AFn.java:24)                                   
>                                                                               
>                             
>        at java.lang.Thread.run(Thread.java:680)                               
>                                                                               
>                             
> Caused by: org.apache.zookeeper.KeeperException$NoNodeException: 
> KeeperErrorCode = NoNode for /stm/history/t-                                  
>                                          
>        at 
> org.apache.zookeeper.KeeperException.create(KeeperException.java:102)         
>                                                                               
>                   
>        at 
> org.apache.zookeeper.KeeperException.create(KeeperException.java:42)          
>                                                                               
>                  
>        atuser=>  org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:637)    
>                                                                               
>                            
>        at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)         
>                                                                               
>                             
>        at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>                                                                               
>            
>        at java.lang.reflect.Method.invoke(Method.java:597)                    
>                                                                               
>                            
>        at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>                                                                               
>                            
>        at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30)      
>                                                                               
>                            
>        at zookeeper$create.doInvoke(zookeeper.clj:158)                        
>                                                                               
>                            
>        at clojure.lang.RestFn.invoke(RestFn.java:521)                         
>                                                                               
>                             
>        at avout.transaction$next_point.invoke(transaction.clj:62)             
>                                                                               
>                             
>        at avout.transaction$reincarnate_txn.invoke(transaction.clj:233)       
>                                                                               
>                             
>        at avout.transaction$stop$fn__1104.invoke(transaction.clj:243)         
>                                                                               
>                             
>        at avout.transaction$stop.invoke(transaction.clj:238)                  
>                                                                               
>                            
>        at 
> avout.transaction.LockingTransaction$fn__1117.invoke(transaction.clj:323)     
>                                                                               
>                   
>        at 
> avout.transaction.LockingTransaction.runInTransaction(transaction.clj:303)    
>                                                                               
>                  
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         
>                                                                               
>                             
>        at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
>                                                                               
>                   
>        at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>                                                                               
>            
>        at java.lang.reflect.Method.invoke(Method.java:597)                    
>                                                                               
>                            
>        at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>                                                                               
>                            
>        at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30)      
>                                                                               
>                            
>        ... 12 more          
> 
> Sam
> 
> ---
> http://sam.aaron.name
> 
> On 1 Dec 2011, at 17:04, David Edgar Liebke wrote:
> 
>> Thanks Sam and Edmund, 
>> 
>> The stack traces were helpful, I think I understand what the immediate 
>> problem is. It appears that the transaction ID in these cases is not getting 
>> set, and then Avout is trying to write data to the ZooKeeper node 
>> /stm/history/ instead of /stm/history/txid.
>> 
>> Since I can't replicate the problem with my setup, I can't be certain of the 
>> cause, but I've added a patch to make the STM more robust in the face of a 
>> nil transaction ID, and have updated Avout to version 0.5.1.
>> 
>> Can you guys give the version 0.5.1 a try and see if makes a difference?
>> 
>> If you still see the problem, another diagnostic would be to create a ref 
>> without an initial value, and see if that succeeds, then try setting the 
>> value.
>> 
>> (def r1 (zk-ref client "/r1"))
>> (dosync!! client (ref-set!! r1 0))
>> 
>> Thanks again,
>> David
>> 
>> 
>> 
>> On Dec 1, 2011, at 11:20 AM, Sam Aaron wrote:
>> 
>>> Hi David,
>>> 
>>> I nuked all my zookeeper deps in my lib and ~/.m2 dirs, but similar to 
>>> Edmund experience it doesn't fix anything. My stacktrace is also identical:
>>> 
>>> ∴ /Users/sam/tmp/avv                                                        
>>>                                                            
>>> λ lein deps                                                                 
>>>                                                            
>>> Downloading: zookeeper-clj/zookeeper-clj/0.9.0/zookeeper-clj-0.9.0.pom from 
>>> repository clojars at http://clojars.org/repo/             
>>> Transferring 2K from clojars                                                
>>>                                                            
>>> Downloading: zookeeper-clj/zookeeper-clj/0.9.0/zookeeper-clj-0.9.0.jar from 
>>> repository clojars at http://clojars.org/repo/             
>>> Transferring 9K from clojars                                                
>>>                                                            
>>> Copying 8 files to /Users/sam/tmp/avv/lib                                   
>>>                                                            
>>> Copying 5 files to /Users/sam/tmp/avv/lib/dev                               
>>>                                                            
>>> 
>>> ∴ /Users/sam/tmp/avv                                                        
>>>                                                            
>>> λ lein repl                                                                 
>>>                                                            
>>> Listening for transport dt_socket at address: 52602                         
>>>                                                            
>>> REPL started; server listening on localhost port 33063                      
>>>                                                            
>>> user=> (use 'avout.core)                                                    
>>>                                                            
>>> log4j:WARN No appenders could be found for logger 
>>> (org.apache.zookeeper.ZooKeeper).                                           
>>>          
>>> log4j:WARN Please initialize the log4j system properly.                     
>>>                                                            
>>> log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for 
>>> more info.                                                    
>>> nil                                                                         
>>>                                                            
>>> user=> (def client (connect "127.0.0.1"))                                   
>>>                                                            
>>> #'user/client                                                               
>>>                                                            
>>> user=> (def r0 (zk-ref client "/r0" 0))                                     
>>>                                                            
>>> java.lang.IllegalArgumentException: Path must not end with / character      
>>>                                                            
>>> run-in-transaction exception:  #<IllegalArgumentException 
>>> java.lang.IllegalArgumentException: Path must not end with / character> nil 
>>>  
>>>      at 
>>> org.apache.zookeeper.common.PathUtils.validatePath(PathUtils.java:58)       
>>>                                                 
>>>      at org.apache.zookeeper.ZooKeeper.setData(ZooKeeper.java:1025)         
>>>                                                         
>>>      at zookeeper$set_data.doInvoke(zookeeper.clj:394)                      
>>>                                                         
>>>      at clojure.lang.RestFn.invoke(RestFn.java:470)                         
>>>                                                         
>>>      at avout.transaction$update_txn_state.invoke(transaction.clj:82)       
>>>                                                         
>>>      at avout.transaction$stop$fn__1104.invoke(transaction.clj:239)         
>>>                                                         
>>>      at avout.transaction$stop.invoke(transaction.clj:238)                  
>>>                                                         
>>>      at 
>>> avout.transaction.LockingTransaction$fn__1117.invoke(transaction.clj:321)   
>>>                                                 
>>>      at 
>>> avout.transaction.LockingTransaction.runInTransaction(transaction.clj:301)  
>>>                                                 
>>>      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         
>>>                                                         
>>>      at 
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>                                                
>>>      at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>                                        
>>>      at java.lang.reflect.Method.invoke(Method.java:597)                    
>>>                                                         
>>>      at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>>>                                                         
>>>      at 
>>> clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30#'user/r0      
>>>                                                 
>>> user=> )                                                                    
>>>                                                            
>>>      at avout.transaction$run_in_transaction.invoke(transaction.clj:354)    
>>>                                                         
>>>      at avout.core$zk_ref.doInvoke(core.clj:51)                             
>>>                                                         
>>>      at clojure.lang.RestFn.invoke(RestFn.java:445)                         
>>>                                                         
>>>      at clojure.lang.AFn.applyToHelper(AFn.java:167)                        
>>>                                                         
>>>      at clojure.lang.RestFn.applyTo(RestFn.java:132)                        
>>>                                                         
>>>      at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3337)           
>>>                                                         
>>>      at clojure.lang.Compiler$DefExpr.eval(Compiler.java:375)               
>>>                                                         
>>>      at clojure.lang.Compiler.eval(Compiler.java:6470)                      
>>>                                                         
>>>      at clojure.lang.Compiler.eval(Compiler.java:6431)                      
>>>                                                         
>>>      at clojure.core$eval.invoke(core.clj:2795)                             
>>>                                                         
>>>      at clojure.main$repl$read_eval_print__5967.invoke(main.clj:244)        
>>>                                                         
>>>      at clojure.main$repl$fn__5972.invoke(main.clj:265)                     
>>>                                                         
>>>      at clojure.main$repl.doInvoke(main.clj:265)                            
>>>                                                         
>>>      at clojure.lang.RestFn.invoke(RestFn.java:512)                         
>>>                                                         
>>>      at user$eval27$acc__3869__auto____30$fn__32.invoke(NO_SOURCE_FILE:1)   
>>>                                                         
>>>      at clojure.lang.AFn.run(AFn.java:24)                                   
>>>                                                         
>>>      at java.lang.Thread.run(Thread.java:680)                               
>>>                                                         
>>> 
>>> Sam
>>> 
>>> ---
>>> http://sam.aaron.name
>>> 
>>> On 1 Dec 2011, at 15:39, David Edgar Liebke wrote:
>>> 
>>>> Hi Sam,
>>>> 
>>>>> run-in-transaction exception:  #<IllegalArgumentException 
>>>>> java.lang.IllegalArgumentException: Path must not end with / character> 
>>>>> nil 
>>>> 
>>>> Very interesting, I wouldn't expect that particular exception unless you 
>>>> named the zk-ref "/r0/" instead of "/r0", which you apparently didn't. 
>>>> 
>>>> And even when I do call it "/r0/" I get the "Path must not end with / 
>>>> character" exception at a different point in the code, which is probably 
>>>> the result of a patch I added to zookeeper-clj yesterday. 
>>>> 
>>>> Can you try deleting the zookeeper-clj jar file from your dependencies, 
>>>> blowing about your ~/.m2/repository/zookeeper-clj directory, reloading 
>>>> your deps, and trying again?
>>>> 
>>>> David
>>>> 
>>>> 
>>>> On Dec 1, 2011, at 10:04 AM, Sam Aaron wrote:
>>>> 
>>>>> Hi David,
>>>>> 
>>>>> I'm super excited by Avout. It seems *better* than magic in that it not 
>>>>> only appears to make complicated things possible, but also in a 
>>>>> conceptually transparent way. Crazy cool.
>>>>> 
>>>>> I'm about to look into this in detail, but I thought I'd just post an 
>>>>> issue I'm having with the basic example just on the off-chance that I'm 
>>>>> doing something obviously wrong.
>>>>> 
>>>>> I have zookeeper 3.3.3 installed running on port 2181 with a valid 
>>>>> dataDir path with the appropriate permissions. I'm got avout 0.5.0 and in 
>>>>> a REPL session I do the following:
>>>>> 
>>>>> ; SLIME 2009-10-15                                                        
>>>>>                                                            
>>>>> user> (use 'avout.core)                                                   
>>>>>                                                             
>>>>> nil                                                                       
>>>>>                                                             
>>>>> user> (def client (connect "127.0.0.1"))                                  
>>>>>                                                            
>>>>> #'user/client                                                             
>>>>>                                                             
>>>>> user> (def r0 (zk-ref client "/r0" 0))                                    
>>>>>                                                            
>>>>> run-in-transaction exception:  #<IllegalArgumentException 
>>>>> java.lang.IllegalArgumentException: Path must not end with / character> 
>>>>> nil 
>>>>> #'user/r0                                                                 
>>>>>                                                             
>>>>> user> r0                                                                  
>>>>>                                                            
>>>>> #<DistributedReference@761b2f32: nil>                                     
>>>>>                                                             
>>>>> user> @r0                                                                 
>>>>>                                                             
>>>>> nil                                                                       
>>>>>                                            
>>>>> 
>>>>> Sam
>>>>> 
>>>>> ---
>>>>> http://sam.aaron.name
>>>>> 
>>>>> 
>>>>> On 29 Nov 2011, at 17:38, liebke wrote:
>>>>> 
>>>>>> Today we are releasing Avout, which brings Clojure's in-memory model
>>>>>> of state to distributed application development by providing a
>>>>>> distributed implementation of Clojure's Multiversion Concurrency
>>>>>> Control (MVCC) STM along with distributable, durable, and extendable
>>>>>> versions of Clojure's Atom and Ref concurrency primitives.
>>>>>> 
>>>>>> Here's the post announcing the project: 
>>>>>> http://clojure.com/blog/2011/11/29/avout.html
>>>>>> 
>>>>>> And here's the project's website: http://avout.io
>>>>>> 
>>>>>> 
>>>>>> David
>>>>>> 
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Clojure" group.
>>>>>> To post to this group, send email to clojure@googlegroups.com
>>>>>> Note that posts from new members are moderated - please be patient with 
>>>>>> your first post.
>>>>>> To unsubscribe from this group, send email to
>>>>>> clojure+unsubscr...@googlegroups.com
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/clojure?hl=en
>>>>> 
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clojure@googlegroups.com
>>>>> Note that posts from new members are moderated - please be patient with 
>>>>> your first post.
>>>>> To unsubscribe from this group, send email to
>>>>> clojure+unsubscr...@googlegroups.com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/clojure?hl=en
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clojure@googlegroups.com
>>>> Note that posts from new members are moderated - please be patient with 
>>>> your first post.
>>>> To unsubscribe from this group, send email to
>>>> clojure+unsubscr...@googlegroups.com
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/clojure?hl=en
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clojure@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with 
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+unsubscr...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>> 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to