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 To: Nikos Balkanas Cc: Tony Kirkham ; [email protected] 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 To: Alejandro Guerrieri ; Tony Kirkham Cc: [email protected] 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 To: Nikos Balkanas Cc: Tony Kirkham ; [email protected] 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 To: Tony Kirkham Cc: [email protected] 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: [email protected] 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
