From: james a. <jam...@se...> - 2011-09-11 18:48:07
|
good evening; on several occasions in the recent past, i have observed a type test of the form (TYPEP CHANNEL 'AMQP:CHANNEL) to return false, when the respective 'channel' value was, as indicated by the stack trace, ostensibly of the specified type. this occurs after an image has been running for varying lengths of time - sometimes minutes, sometimes hours. i now suspect, it occasionally triggers an aver. the error message at such a point is of the form Error at toplevel: SHARED-INITIALIZE: the CHANNEL argument (#<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/>].1 {10091BBCF1}>) must be of type AMQP:CHANNEL.. despite that * (sb-mop:class-precedence-list (find-class 'AMQP-1-1-0-9-1:CHANNEL)) (#<STANDARD-CLASS AMQP-1-1-0-9-1:CHANNEL> #<STANDARD-CLASS AMQP-1-1-0-9-1:OBJECT> #<STANDARD-CLASS AMQP:CHANNEL> #<STANDARD-CLASS DE.SETF.AMQP.IMPLEMENTATION::AMQP-CONNECTED-OBJECT> #<STANDARD-CLASS AMQP:OBJECT> #<STANDARD-CLASS DE.SETF.AMQP.UTILITY:AMQP-CONNECTION-DEVICE> #<STANDARD-CLASS DE.SETF.AMQP.UTILITY:AMQP-DEVICE> #<STANDARD-CLASS SB-SIMPLE-STREAMS:DUAL-CHANNEL-SIMPLE-STREAM> #<STANDARD-CLASS SB-SIMPLE-STREAMS:SIMPLE-STREAM> #<STANDARD-CLASS STANDARD-OBJECT> #<SB-PCL::SLOT-CLASS SB-PCL::SLOT- OBJECT> #<BUILT-IN-CLASS STREAM> #<BUILT-IN-CLASS T>) * and the equivalent appears for class-of the respective channel variable value in that dynamic context. i have seen what now appear to be related errors in the past, to the effect, that an (aver (< i 2)) failed, but not known which site it was. this time, i traced the operation of typep through to classoid- typep, and observed that the function contains one such aver. when tracing at a time when the error occurs, it was the case, that classoid-typep would return nil for a typep call although the precedence list was as illustrated above. my attempt to follow the workings of classoid-typep was confounded by the variations in class instances, designators, and wrappers upon which it operates, but it appeared that it was presented with one form of the amqp:channel class, but expected some other. there is no intentional class re-definition in the running system. once it is loaded this class hierarchy does not change. is there some way in which the various class instances, designators, and wrappers can evolve into a state where they are not synchronized? can anyone can suggest what one might check, trace, or gather as background information to explain what is happening here? thanks, |
From: Nikodemus S. <nik...@ra...> - 2011-09-19 16:20:36
|
On 11 September 2011 21:14, james anderson <jam...@se...> wrote: > can anyone can suggest what one might check, trace, or gather as > background information to explain what is happening here? No immediate theories, but a backtrace would be helpful in generating such. Cheers, -- nikodemus |
From: james a. <jam...@se...> - 2011-09-22 09:47:57
|
good morning; On 2011-09-19, at 18:20 , Nikodemus Siivola wrote: > On 11 September 2011 21:14, james anderson <jam...@se...> > wrote: > >> can anyone can suggest what one might check, trace, or gather as >> background information to explain what is happening here? > > No immediate theories, but a backtrace would be helpful in > generating such. i attach one below, with the proviso, that it does little to indicate the operation of the type predicates. by this point (frames 5/6), the typep call has returned nil, and logic in the explicit type check signals the error. the object at issue is the "CHANNEL argument" which was determine to be not of type "AMQP:CHANNEL". this despite that the argument's class was fdefined to be, and subtypep confirmed that it remained in some way, a specialization of the CHANNEL class. the next time it should happen in a context where i can debug, i will attempt to instrument the type operators and produce more details. --- [20110911T170927Z00 15316] Error at toplevel: SHARED-INITIALIZE: the CHANNEL argument (#<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/>].1 {100AFAD8B1}>) must be of type AMQP:CHANNEL.. 0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {100B067139}> :START 0 :COUNT 1152921504606846975) 1: (ORG.DATAGRAPH.SPOCQ.IMPLEMENTATION::PRINT-STACKTRACE #<SB-SYS:FD-STREAM for "file /var/tmp/logs/spocq.log" {100B065CE1}> :START 0 :COUNT 1152921504606846975) 2: ((FLET ORG.DATAGRAPH.SPOCQ.IMPLEMENTATION::CALL-WRITE-LOG)) 3: ((FLET #:LAMBDA670) #<SIMPLE-TYPE-ERROR expected-type: AMQP:CHANNEL datum: #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}>>) 4: (SIGNAL #<SIMPLE-TYPE-ERROR expected-type: AMQP:CHANNEL datum: #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}>>) 5: (ERROR SIMPLE-TYPE-ERROR :DATUM #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}> :EXPECTED-TYPE AMQP:CHANNEL :FORMAT-CONTROL "SHARED-INITIALIZE: the CHANNEL argument (~s) must be of type AMQP:CHANNEL." :FORMAT-ARGUMENTS (#<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}>)) 6: ((SB-PCL::FAST-METHOD SHARED-INITIALIZE (AMQP:BASIC T)) #<unused argument> #S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION #> :PV NIL :NEXT-METHOD-CALL NIL :ARG-INFO (2 . T)) #<AMQP-1-1-0-9-1:BASIC {100B063041}> T :CONTEXT #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}> :DELIVERY-MODE 1) 7: ((SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) #<unused argument> #<unused argument> #<STANDARD-CLASS AMQP-1-1-0-9-1:BASIC> #<unavailable &REST argument>) 8: ((SB-PCL::FAST-METHOD AMQP:CHANNEL.BASIC (AMQP:CHANNEL)) #<unused argument> #<unused argument> #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}> :DELIVERY-MODE 1) 9: ((SB-PCL::FAST-METHOD AMQP:CHANNEL.BASIC (AMQP:CHANNEL)) #<unavailable argument> #<unavailable argument> #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}> :DELIVERY-MODE 1)[:OPTIONAL] 10: ((SB-PCL::FAST-METHOD AMQP:ENSURE-OBJECT (AMQP:CHANNEL (EQL 'AMQP:BASIC))) #<unavailable argument> #<unavailable argument> #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}> #<unavailable argument> :DELIVERY-MODE 1)[:OPTIONAL] 11: ((SB-PCL::FAST-METHOD AMQP:BASIC (AMQP:OBJECT)) #<unavailable argument> #<unavailable argument> #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}> :DELIVERY-MODE 1)[:OPTIONAL] 12: ((FLET _::WITH-OPEN-CHANNEL-BODY) #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}>) 13: ((SB-PCL::FAST-METHOD DE.SETF.AMQP.IMPLEMENTATION::CALL-WITH-OPEN- CHANNEL (T AMQP:CHANNEL)) #<unused argument> #<unused argument> #<CLOSURE (FLET _::WITH-OPEN-CHANNEL-BODY) {7FFFF0EF6409}> #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >].1 {100AFAD8B1}> :ELEMENT-TYPE (UNSIGNED-BYTE 8) :CONTENT-TYPE #<MIME:APPLICATION/SPARQL-RESULTS+JSON-COLUMNS {10007A5B71}>) 14: (ORG.DATAGRAPH.SPOCQ.IMPLEMENTATION::RUN-RESPONSE-THREAD :BROKER-URI NIL :SERVICE-CHANNEL NIL :RESPONSE-CONTENT-TYPE NIL) 15: (ORG.DATAGRAPH.SPOCQ.IMPLEMENTATION::SPOCQ-TOPLEVEL) 16: (ORG.DATAGRAPH.SPOCQ.IMPLEMENTATION::RUN-THREAD-LOOP) 17: ((LAMBDA ())) 18: ((FLET #:WITHOUT-INTERRUPTS-BODY-[BLOCK360]365)) 19: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 20: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]300)) 21: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK) {7FFFF0EF6CB9}> #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER #<SB-THREAD:THREAD "response2" RUNNING {10071A8131}> :STATE 1) #<SB-THREAD:THREAD "response2" RUNNING {10071A8131}> T) 22: (SB-THREAD::INITIAL-THREAD-FUNCTION) 23: ("foreign function: call_into_lisp") 24: ("foreign function: new_thread_trampoline") |
From: Nikodemus S. <nik...@ra...> - 2011-10-30 10:15:02
|
On 22 September 2011 12:47, james anderson <jam...@se...> wrote: > i attach one below, with the proviso, that it does little to indicate > the operation of the type predicates. Thanks. Getting back on this... > 5: (ERROR > SIMPLE-TYPE-ERROR > :DATUM > #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ > >].1 {100AFAD8B1}> > :EXPECTED-TYPE > AMQP:CHANNEL > :FORMAT-CONTROL > "SHARED-INITIALIZE: the CHANNEL argument (~s) must be of type > AMQP:CHANNEL." > :FORMAT-ARGUMENTS > (#<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ > >].1 {100AFAD8B1}>)) I presume your SHARED-INITIALIZE has something like (unless (typep x 'channel) (error ...)) in it. Can you send the exact source for the method in question -- or at least the parts up to this point. Results of (describe 'channel) could be of interest as well. Cheers, -- nikodemus |
From: james a. <jam...@se...> - 2011-10-30 11:17:00
|
good morning; On 2011-10-30, at 11:14 , Nikodemus Siivola wrote: > On 22 September 2011 12:47, james anderson <jam...@se...> > wrote: > >> i attach one below, with the proviso, that it does little to indicate >> the operation of the type predicates. > > Thanks. > > Getting back on this... > >> 5: (ERROR >> SIMPLE-TYPE-ERROR >> :DATUM >> #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >> >].1 {100AFAD8B1}> >> :EXPECTED-TYPE >> AMQP:CHANNEL >> :FORMAT-CONTROL >> "SHARED-INITIALIZE: the CHANNEL argument (~s) must be of type >> AMQP:CHANNEL." >> :FORMAT-ARGUMENTS >> (#<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/ >> >].1 {100AFAD8B1}>)) > > I presume your SHARED-INITIALIZE has something like > > (unless (typep x 'channel) > (error ...)) > > in it. Can you send the exact source for the method in question -- or > at least the parts up to this point. the system in question is on github [https://github.com/lisp/ de.setf.amqp]. that function is the shared-initialize for amqp:basic [https://github.com/lisp/de.setf.amqp/blob/master/classes.lisp] > > Results of > > (describe 'channel) > > could be of interest as well. in the abstract, that would be * (describe 'amqp:channel) AMQP:CHANNEL [symbol] CHANNEL names a generic function: Lambda-list: (DESIGNATOR &REST ARGS) Derived type: (FUNCTION (T &REST T) *) Documentation: Construct a CHANNEL given initialization arguments. The first argument may be a keyword, in which case the value of *CLASS.CHANNEL* designate the class, or it may be a class designator. In other cases, the first argument is interpreted as a context to dereference the respective CHANNEL. Method-combination: STANDARD Methods: (CHANNEL (AMQP:OBJECT)) (CHANNEL ((EQL T))) (CHANNEL (AMQP:CHANNEL)) (CHANNEL (LIST)) Documentation: given a list, spread it and recurse. (CHANNEL (SYMBOL)) Source file: SYS:SRC;PCL;DFUN.LISP.NEWEST CHANNEL names the standard-class #<STANDARD-CLASS AMQP:CHANNEL>: Documentation: The abstract channel class is specialized for each protocol version. Each channel is associated with a connection and identified by channel-number. Once a channel is opened, it serves as the context for message- and stream-based operations. Class precedence-list: AMQP:CHANNEL, DE.SETF.AMQP.IMPLEMENTATION::AMQP-CONNECTED- OBJECT, AMQP:OBJECT, DE.SETF.AMQP.UTILITY:AMQP-CONNECTION-DEVICE, DE.SETF.AMQP.UTILITY:AMQP-DEVICE, SB-SIMPLE-STREAMS:DUAL-CHANNEL-SIMPLE-STREAM, SB-SIMPLE-STREAMS:SIMPLE-STREAM, STANDARD-OBJECT, SB-PCL::SLOT-OBJECT, STREAM, T Direct superclasses: DE.SETF.AMQP.IMPLEMENTATION::AMQP-CONNECTED- OBJECT, DE.SETF.AMQP.UTILITY:AMQP-CONNECTION-DEVICE Direct subclasses: AMQP-1-1-0-8-0:CHANNEL, AMQP-1-1-0-9-1:CHANNEL Direct slots: DE.SETF.AMQP.IMPLEMENTATION::CONTEXT Readers: DE.SETF.AMQP.UTILITY:CHANNEL-CONNECTION PURI:URI Readers: DE.SETF.AMQP.UTILITY:CHANNEL-URI DE.SETF.AMQP.IMPLEMENTATION::NAME Initform: (GENSYM "channel") Readers: DE.SETF.AMQP.UTILITY:CHANNEL-NAME NUMBER Type: FIXNUM Initargs: :NUMBER Initform: (ERROR "number required") Readers: DE.SETF.AMQP.UTILITY:CHANNEL-NUMBER Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-NUMBER DE.SETF.AMQP.IMPLEMENTATION::TRACK Initargs: :TRACK Initform: 0 Readers: DE.SETF.AMQP.UTILITY:CHANNEL-TRACK DE.SETF.AMQP.IMPLEMENTATION::STATE Type: AMQP.S:CHANNEL-STATE Initform: AMQP.S:OPEN-CHANNEL DE.SETF.AMQP.IMPLEMENTATION::THREAD Initform: (BORDEAUX-THREADS:CURRENT-THREAD) Readers: DE.SETF.AMQP.UTILITY:CHANNEL-THREAD Documentation: The thread which processes this channel. Likely, the thread which created it. DE.SETF.AMQP.IMPLEMENTATION::CONDITIONS Readers: DE.SETF.AMQP.UTILITY:CHANNEL-CONDITIONS Writers: (SETF DE.SETF.AMQP.UTILITY:CHANNEL-CONDITIONS) Documentation: Caches conditions raised on the channel for re-use. DE.SETF.AMQP.IMPLEMENTATION::COMMAND-HANDLER Documentation: Binds a handler function, with the signature (class method &rest arguments), which are applied when handle-channel-methods. DE.SETF.AMQP.IMPLEMENTATION::REALM Initargs: :REALM Readers: DE.SETF.AMQP.UTILITY:CHANNEL-REALM Documentation: Should the protocol support/reauire realms, the channel negotiates access as a late step in the device-open procedure and bind both the realm and the tick for future use. The channel's realm comprises the realm proper +value exclusive passive active write read DE.SETF.AMQP.IMPLEMENTATION::TICKET Initargs: :TICKET Readers: DE.SETF.AMQP.UTILITY:CHANNEL-TICKET Writers: (SETF DE.SETF.AMQP.UTILITY:CHANNEL-TICKET) Documentation: Should the protocol support/reauire realms, the channel negotiates access as a late step in the device-open procedure and bind both the realm and the tick for future use. DE.SETF.AMQP.IMPLEMENTATION::CONTENT-OBJECT Readers: DE.SETF.AMQP.UTILITY:CHANNEL-CONTENT-OBJECT Writers: (SETF DE.SETF.AMQP.UTILITY:CHANNEL-CONTENT-OBJECT) Documentation: The most recent class which contained (the current) content. Updated by respond to typed-frame, but not cleared. DE.SETF.AMQP.IMPLEMENTATION::ACKNOWLEDGE-MESSAGES Readers: DE.SETF.AMQP.UTILITY:CHANNEL-ACKNOWLEDGE-MESSAGES Writers: (SETF DE.SETF.AMQP.UTILITY:CHANNEL-ACKNOWLEDGE-MESSAGES) Documentation: Indicates whether no-ack was selected when a a message was requested via Consume or Get. If selected, then each receipt is automatically acknowledged as the last step of the respond-to operation. DE.SETF.AMQP.IMPLEMENTATION::AMQP-BASIC Type: (OR NULL AMQP:BASIC) Readers: DE.SETF.AMQP.IMPLEMENTATION::GET-CHANNEL-BASIC Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-BASIC Documentation: Caches the channel basic instance. DE.SETF.AMQP.IMPLEMENTATION::AMQP-BODY Type: (OR NULL AMQP:BODY) Readers: DE.SETF.AMQP.IMPLEMENTATION::GET-CHANNEL-BODY Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-BODY Documentation: Caches the channel body instance. DE.SETF.AMQP.IMPLEMENTATION::AMQP-EXCHANGES Type: LIST Readers: DE.SETF.AMQP.IMPLEMENTATION::GET-CHANNEL-EXCHANGES Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-EXCHANGES Documentation: Caches the channel exchange instances by exchange name. DE.SETF.AMQP.IMPLEMENTATION::AMQP-FILE Type: (OR NULL AMQP:FILE) Readers: DE.SETF.AMQP.IMPLEMENTATION::GET-CHANNEL-FILE Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-FILE Documentation: Caches the channel file instance. DE.SETF.AMQP.IMPLEMENTATION::AMQP-HEADER Type: (OR NULL AMQP:HEADER) Readers: DE.SETF.AMQP.IMPLEMENTATION::GET-CHANNEL-HEADER Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-HEADER Documentation: Caches the channel header instance. DE.SETF.AMQP.IMPLEMENTATION::AMQP-QUEUES Type: LIST Readers: DE.SETF.AMQP.IMPLEMENTATION::GET-CHANNEL-QUEUES Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-QUEUES Documentation: Caches channel queues according to queue name. DE.SETF.AMQP.IMPLEMENTATION::AMQP-STREAM Type: (OR NULL AMQP:STREAM) Readers: DE.SETF.AMQP.IMPLEMENTATION::GET-CHANNEL-STREAM Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-STREAM Documentation: Caches the channel stream instance. DE.SETF.AMQP.IMPLEMENTATION::AMQP-TX Type: (OR NULL AMQP:TX) Readers: DE.SETF.AMQP.IMPLEMENTATION::GET-CHANNEL-TX Writers: DE.SETF.AMQP.IMPLEMENTATION::SETF-CHANNEL-TX Documentation: Caches the channel tx instance. * (amqp:with-open-connection (connection :uri *broker-uri*) (amqp:with-open-channel (io connection) (describe io))) #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/>].1 {1.. [standard-object] Slots with :CLASS allocation: ID = 20 PROTOCOL-VERSION = :AMQP-1-1-0-9-1 PROPERTY-SLOT-NAMES = NIL ARGUMENT-SLOT-NAMES = (AMQP::RESERVED-1 AMQP::ACTIVE AMQP::REPLY-CODE AMQP::REPLY-TEXT.. METHOD-NAMES = (AMQP:OPEN AMQP:OPEN-OK AMQP:FLOW AMQP:FLOW-OK AMQP:CLOSE AMQP:CLOSE-OK) VERSION = :AMQP-1-1-0-9-1 RESERVED-1 = "" Slots with :INSTANCE allocation: %FLAGS = 15 PLIST = NIL J-LISTEN = #<FUNCTION DE.SETF.AMQP.IMPLEMENTATION::AMQP-J-LISTEN> J-READ-CHAR = #<FUNCTION DE.SETF.AMQP.IMPLEMENTATION::AMQP-J-READ-CHAR> J-READ-CHARS = #<FUNCTION DE.SETF.AMQP.IMPLEMENTATION::AMQP-J-READ-CHARS> J-WRITE-CHAR = #<FUNCTION DE.SETF.AMQP.IMPLEMENTATION::AMQP-J-WRITE-CHAR> J-WRITE-CHARS = #<FUNCTION DE.SETF.AMQP.IMPLEMENTATION::AMQP-J-WRITE-CHARS> J-UNREAD-CHAR = #<FUNCTION DE.SETF.AMQP.IMPLEMENTATION::AMQP-J-UNREAD-CHAR> OC-STATE = NIL CO-STATE = NIL EXTERNAL-FORMAT = #<SB-SIMPLE-STREAMS::EXTERNAL- FORMAT ISO8859-1 {1001EEC1E1}> INPUT-HANDLE = #<AMQP-1-1-0-9-1:CONNECTION {100776C0C1}> OUTPUT-HANDLE = #<AMQP-1-1-0-9-1:CONNECTION {100776C0C1}> CONTROL-IN = NIL CONTROL-OUT = NIL MELDED-STREAM = #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/>].1 {1.. MELDING-BASE = #<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/>].1 {1.. ENCAPSULATED-CHAR-READ-SIZE = 0 LAST-CHAR-READ-SIZE = 0 CHARPOS = 0 RECORD-END = NIL BUFFER = #(0 10 0 41 0 0 0 2 0 0 0 0 114 111 100 117 99 116 83 0 0 0 8 82 97 98.. BUFFPOS = 0 BUFFER-PTR = 0 BUF-LEN = 4088 PENDING = NIL HANDLER = NIL OUT-BUFFER = #(0 10 0 40 1 47 0 0 16 0 0 0 73 78 0 0 0 45 0 72 69 84 90 78 69 82 10.. OUTPOS = 0 MAX-OUT-POS = 4088 URI = #<PURI:URI amqp://hetzner.dydra.com/> BODY-POSITION = 0 BODY-LENGTH = 0 FRAME-POSITION = 0 FREE-INPUT-FRAMES = #<DE.SETF.AMQP.IMPLEMENTATION::LOCKED-STACK #<AMQP:CONNECTION FREE-INP.. FREE-OUTPUT-FRAMES = #<DE.SETF.AMQP.IMPLEMENTATION::LOCKED-STACK #<AMQP:CONNECTION FREE-OUT.. READ-FRAMES = #<DE.SETF.AMQP.IMPLEMENTATION::LOCKED-QUEUE #<AMQP:CONNECTION READ-FRA.. ENCODED-FRAMES = #<DE.SETF.AMQP.IMPLEMENTATION::LOCKED-QUEUE #<AMQP:CONNECTION ENCODED-.. CONTENT-TYPE = #<MIME:TEXT/PLAIN {1001AE32B1}> ELEMENT-TYPE = CHARACTER ENCODER = #<FUNCTION (FLET DE.SETF.UTILITY.IMPLEMENTATION::ISO-8859-1-ENCODE) {1.. DECODER = #<FUNCTION (FLET DE.SETF.UTILITY.IMPLEMENTATION::ISO-8859-1-DECODE) {1.. STATE = #<AMQP.S:USE-CHANNEL {1001AE3B91}> LINE-BUFFER = "" EOF-MARKER = :EOF EOL-MARKER = #\Newline FRAME = NIL CONTEXT = #<AMQP-1-1-0-9-1:CONNECTION {100776C0C1}> NAME = #:|channel1557| NUMBER = 1 TRACK = 0 THREAD = #<SB-THREAD:THREAD "initial thread" RUNNING {1007020CB1}> CONDITIONS = NIL COMMAND-HANDLER = NIL REALM = NIL TICKET = NIL CONTENT-OBJECT = NIL ACKNOWLEDGE-MESSAGES = NIL AMQP-BASIC = NIL AMQP-BODY = NIL AMQP-EXCHANGES = NIL AMQP-FILE = NIL AMQP-HEADER = NIL AMQP-QUEUES = NIL AMQP-STREAM = NIL AMQP-TX = NIL OPEN-METHOD = #<AMQP-1-1-0-9-1:CHANNEL.OPEN {10077CD1A1}> OPEN-OK-METHOD = #<AMQP-1-1-0-9-1:CHANNEL.OPEN-OK {1007907501}> FLOW-METHOD = NIL FLOW-OK-METHOD = NIL CLOSE-METHOD = NIL CLOSE-OK-METHOD = NIL ACTIVE = NIL REPLY-CODE = 0 REPLY-TEXT = "" CLASS-ID = 0 METHOD-ID = 0 * best regards, |
From: Nikodemus S. <nik...@ra...> - 2011-10-30 12:34:34
|
On 30 October 2011 12:44, james anderson <jam...@se...> wrote: I suspect these could be the problem: device-level.lisp: (change-class device connection-channel-class))) device-level.lisp: (change-class connection new-class) One thread is doing a TYPEP while another is in the middle of changing the class of the instance. Can you rule this out as a possibility? Cheers, -- nikodemus |
From: james a. <jam...@se...> - 2011-10-30 13:36:35
|
good afternoon; thank you for looking at this. On 2011-10-30, at 13:34 , Nikodemus Siivola wrote: > On 30 October 2011 12:44, james anderson <jam...@se...> > wrote: > > I suspect these could be the problem: > > device-level.lisp: (change-class device connection- > channel-class))) > device-level.lisp: (change-class connection > new-class) i do not understand how the first of these could contribute to the problem. while nothing is impossible, there are several reasons to be skeptical. 1. in the particular case, the correct concrete channel class is already specified to make-instance. in which case change-class is not invoked. 2. the failure happens at a point where a channel has just been instantiated and its respective basic component is to be instantiated. at this point the channel instance is known to just the thread which instantiated it. 3. the intent is to allow the channel to ever be used by exactly one thread. the second change happens as a step of every connection negotiation, but i have never seen it cause a problem with a connection instance. > > One thread is doing a TYPEP while another is in the middle of changing > the class of the instance. given the particular two functions at issue, the this would mean that one thread would be instantiating the channel while another would be attempting to use it to send data. in that situation, the typep issue would be minor. > > Can you rule this out as a possibility? i know of no control flow combinations which intend to do that. > > Cheers, > > -- nikodemus |
From: james a. <jam...@se...> - 2011-10-30 14:06:31
|
[another reason occurred to me] On 2011-10-30, at 13:34 , Nikodemus Siivola wrote: > On 30 October 2011 12:44, james anderson <jam...@se...> > wrote: > > I suspect these could be the problem: > > device-level.lisp: (change-class device connection- > channel-class))) > device-level.lisp: (change-class connection > new-class) > > One thread is doing a TYPEP while another is in the middle of changing > the class of the instance. > > Can you rule this out as a possibility? 4. on the one occasion, when i observed the problem while a listener was connected to the process, the "channel-which-was-not-a-channel" state was permanent. that is, successive calls to typep all failed at a point when no threads would have been invoking the device-open call which could have called change-class. > > Cheers, > > -- nikodemus |