Thanks, guys.  This is a lot of great information.  I will be trying this
and I will post my results.

One other question though, are there any advantages to the file store over
the spool store?  Before this conversation, I had not understood what the
spool store was.  I had only heard the term mentioned in passing.  I have
been using older documentation (Kannel 1.4.1 User's Guide) that lists a
parameter to the core configuration of "store-file" and that is what is
currently in my config file and running on my system.  The actual Kannel
code I am using is a CVS pull of Kannel from June of this year.  Now that I
examine the latest, sort of, documentation (cvs-20081125) I no longer see
the "store-file" parameter.  Instead I see "store-type" and
"store-location".

I am assuming, now, that the spool storage type is a "recent" addition to
Kannel and was added because it worked more effeciently than trying to
rewrite a single file containing many messages.  Is this assumption
correct?

Now that I know about the spool storage type I think I will be switching to
it.  I can't currently see any advantage the file store has over the spool
type and I see many disadvantages, the impetus of this entire conversation,
to name one.  I am now wondering if my June Kannel code has these parameters
in it or if I will have to get a more recent code base and recompile.  Any
thoughts?

Thanks again,

-Tony


2008/12/3 Nikos Balkanas <[EMAIL PROTECTED]>

>  Definitely. I have a test kannel, hooked to fakesmsc, and I would always
> try out a copy of the "fixed" store file before commiting it. There is no
> header from what I can see, however there is a footer that has a list of all
> message ids. This is a bit more complex, not much though. I presumed that
> there was no CRC or indexing. It seems that the message has to be removed
> both from the body and the footer.
>
> Tony if you are watching this, a simple cat at the end won't do it, but
> something similar should.
>
> The footer has to be removed and saved in a different file. Then do the cat
> and insert the saved footer just before the new footer, so that the right
> order is preserved.
>
> Of course it goes without saying that the procedure has to be tested first
> on a test environment with fakesmsc. I could do it, except that i don't have
> any real messages.
>
> BR,
> Nikos
> ----- Original Message -----
>
> *From:* Alejandro Guerrieri <[EMAIL PROTECTED]>
> *To:* Nikos Balkanas <[EMAIL PROTECTED]>
> *Cc:* Tony Kirkham <[EMAIL PROTECTED]> ; users@kannel.org
> *Sent:* Thursday, December 04, 2008 4:20 AM
> *Subject:* Re: Removing an erroring message stuck in queue / file store
>
> Hmm, I'm not 100% sure you can append messages at the end of the store and
> get away with it... I'd first try it on a staging server.
>
> You can surely "merge" new messages on a spool by copying (you need to
> restart kannel for it to notice the new messages, though) but I don't know
> if is there any "header" or "footer" information on the store files that
> would break the format if appended together.
>
> I'm not saying it's not possible, just that I've never tried it and since
> I'm not _that_ fluent on the file store internals I cannot tell for sure.
>
> Regards,
>
> Alejandro
>
> 2008/12/3 Nikos Balkanas <[EMAIL PROTECTED]>
>
>>  BTW, Tony. It doesn't seem that you will have significant downtime. If
>> Alej is right you can just stop kannel momentarily to grab the store files
>> and start it again. Once the problematic store files are fixed you can just
>> stop kannel momentarily and "cat kannel.store.fixed >> kannel.store". Do the
>> same for kannel.store.back and restart kannel. Just don't change from
>> storefile to spool during the process.
>>
>> So you don't loose any messages and downtime can be minimal. Cool right?
>>
>>  ----- Original Message -----
>> *From:* Nikos Balkanas <[EMAIL PROTECTED]>
>> *To:* Alejandro Guerrieri <[EMAIL PROTECTED]> ; Tony Kirkham<[EMAIL 
>> PROTECTED]>
>> *Cc:* users@kannel.org
>>   *Sent:* Thursday, December 04, 2008 2:35 AM
>> *Subject:* Re: Removing an erroring message stuck in queue / file store
>>
>> Thanks for pointing that out. Still it is easy to preview in "vim -b" (not
>> hex) and can identify *any* of the fields Sender, recipient, text,
>> messageID, so if anyone is missing there are a lot of matches in ASCII. The
>> binary text is easy and straightforward. One can reasonably find the borders
>> (patterns) of the previous and next message (presumably intact) and delete
>> the in between.
>>
>> Tony, if the file is small enough to send through mail (zipped) and don't
>> feel like trying it yourself, why don't you send it to me along with the
>> message details to see what I can do about it.
>>
>> Alej from your words it seems that a spool directory is more efficient
>> than a storefile. If anytime kannel sends a message has to delete and
>> rewrite almost the whole store file, it is a big waste. Isn't so?
>>
>> BR,
>> Nikos
>>
>> ----- Original Message -----
>> *From:* Alejandro Guerrieri <[EMAIL PROTECTED]>
>> *To:* Nikos Balkanas <[EMAIL PROTECTED]>
>> *Cc:* Tony Kirkham <[EMAIL PROTECTED]> ; users@kannel.org
>> *Sent:* Thursday, December 04, 2008 2:18 AM
>> *Subject:* Re: Removing an erroring message stuck in queue / file store
>>
>> The 20 nulls are probably a lot of empty/unused fields, that doesn't
>> necessary means that they'll be always empty... so don't assume that there
>> should be that much. It's not a separator, just a pattern in your particular
>> message queue set.
>>
>> When you edit, you have to make sure that you're actually cutting on the
>> right places. Alas, if the message is in fact corrupted maybe it's not
>> complete, so YMMV.
>>
>> Using the spool file is way easier, of course. Again, if you have a
>> "broken" message (why is that it's another question) it's just a matter of
>> determining which one is causing the problem and removing it.
>>
>> Regards,
>>
>> Alejandro
>>
>> 2008/12/3 Nikos Balkanas <[EMAIL PROTECTED]>
>>
>>>  Hi,
>>>
>>> Just out of curiosity I openned a store file and it doesn't seem too
>>> difficult. You can edit it easily with "vim -b" and there are a lot of ASCII
>>> fields (sender, recipient, messageid), so you can search for your message
>>> easily. Each message seems to be bordered by 20 '\0' (NULLS). Can't miss
>>> them. Find offending message and delete by hand (assuming that you know
>>> which message is the offending one).
>>>
>>> This again assumes that there is no CRC or indexing of the messages as
>>> discussed by Alejandro. In other words, you can safely remove any message.
>>>
>>> Make a backup, try it and let us know of the result. Stop kannel, and
>>> repeat for both files.
>>>
>>> Cheers,
>>> Nikos
>>>
>>>   ----- Original Message -----
>>> *From:* Alejandro Guerrieri <[EMAIL PROTECTED]>
>>> *To:* Tony Kirkham <[EMAIL PROTECTED]>
>>> *Cc:* users@kannel.org
>>> *Sent:* Wednesday, December 03, 2008 7:14 PM
>>> *Subject:* Re: Removing an erroring message stuck in queue / file store
>>>
>>> Ah, you're using the "file" store, not "spool" maybe?
>>>
>>> AFAIK, there's no document on the storage format. It's mainly a dump from
>>> the "Msg" structure, but the "Octstr" objects can have nulls in the middle,
>>> so it's not as easy to parse and, it doesn't have a fixed length and (if
>>> you're still willing to venture at it) you'll need an hex editor if you
>>> don't want to mess the whole file (the nulls in the middle of the file will
>>> probably render any text editor unusable).
>>>
>>> If you use the "spool" store, each message is stored on an independent
>>> file on a directory tree. Removing the file removes the message.
>>>
>>> The only problem is that kannel only uses the files as a backup mechanism
>>> and it doesn't refresh it during runtime. To clarify:
>>>
>>> * When a message arrives (or is enqueued to be sent), kannel adds it to
>>> an in-memory queue and stores a copy on disk. An internal uuid is used to
>>> keep track of messages on both places.
>>>
>>> * When kannel ends processing the message, it removes it from the
>>> in-memory queue and deletes the message from disk. Depending on the store
>>> type being used, this means removing it from the store file and rewriting
>>> the file, or remove an entire file from the spool tree.
>>>
>>> * If kannel crashes or is shutdown with messages pending, the messages
>>> are kept on the file/spool queue. During a shutdown, the in-memory queue is
>>> dumped to file again afaik.
>>>
>>> * When kannel starts, it first load the messages from the file/spool
>>> queue.
>>>
>>> * On the particular case of the file store, a backup file is kept at all
>>> times in case the main file is deleted or corrupted.
>>>
>>> So, from the above, it's clear why you need to stop kannel before
>>> deleting the file(s).
>>>
>>> You can stop kannel, delete the store and store.bak files, or remove the
>>> whole spool tree and start again. It will remove ALL your pending messages.
>>> If you can figure out which message is causing the problem, you can remove
>>> it from the spool (if you're using the spool store) as well. With the file
>>> store, you'd need to figure out from the binary, which is near to impossible
>>> without some specially crafted tools imho.
>>>
>>> Regards,
>>>
>>> Alejandro
>>>
>>>   On Wed, Dec 3, 2008 at 1:15 PM, Tony Kirkham <[EMAIL PROTECTED]>wrote:
>>>
>>>>  How?  By hand, in my favorite editor?  I have tried this, with bad
>>>> results.  There are special characters, at least vi displays them that way,
>>>> that I can't interpret so I do not know where, exactly, one message stops
>>>> and the next starts.  Is there a document that describes the store file in
>>>> detail?
>>>>
>>>> -Tony
>>>>
>>>>
>>>>   On Tue, Dec 2, 2008 at 4:08 PM, Alejandro Guerrieri <
>>>> [EMAIL PROTECTED]> wrote:
>>>>
>>>>>  And do it without kannel running, of course ;)
>>>>>
>>>>> If you're using the spool store file, you can remove the individual
>>>>> message (assuming that you can find out what's the message causing the
>>>>> error).
>>>>>
>>>>> Regards,
>>>>>
>>>>> Alejandro
>>>>>
>>>>>
>>>>>   On Tue, Dec 2, 2008 at 5:49 PM, info.ubichip <[EMAIL PROTECTED]>wrote:
>>>>>
>>>>>>   Hello,
>>>>>>
>>>>>> when you trash the .store file, don't forget to remove the .store.bak
>>>>>> as well otherwise, it will retry to send all the remaining message.
>>>>>>
>>>>>> regards
>>>>>>
>>>>>>
>>>>>>  ------------------------------
>>>>>>   *From:* Tony Kirkham [mailto:[EMAIL PROTECTED]
>>>>>> *Sent:* lundi 1 dĪ¹cembre 2008 21:32
>>>>>> *To:* users@kannel.org
>>>>>> *Subject:* Removing an erroring message stuck in queue / file store
>>>>>>
>>>>>>   Is there a way to remove a message from the file store that is
>>>>>> erroring continuously allowing the other messages to be sent?
>>>>>>
>>>>>> If I simply restart Kannel sometimes the other messages get sent and
>>>>>> sometimes they do not.  Why is that?
>>>>>> If they all get sent but the erroring message I can simply replace the
>>>>>> file store with another file with a restart of Kannel, but I would like 
>>>>>> to
>>>>>> know if there is a way to remove the message by some other means.
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> -Tony
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to