Am 20.10.2012 17:58, schrieb spameden:

Just did small portion from my another e-mail.

thanks. Though, a lot more people should be doing this. Seems I will need to make a big announcement for it, after releasing Kannel 1.5.1 devel. ;)

Thanks, will test this. What If I have smsc1 with queue of 1k sms
(queued already) and I'm gonna change it's ID to smsc2, will it continue
or message queue gonna be broken on smsc1?

ok, let's play through the example:

If smsc-id = A has a queue because the upstream connection is slower then the MT stream coming ahead. And then you change the smsc-id = A to B in the config, and cause a graceful restart.

Now, the logic goes like this: bearerbox reads in the new smsc groups and iterates over all smsc groups. When we reach smsc-id = B now, then we first try to detect if this is a group that didn't change at all. We do this via the pre-computed md5 hash checksum. Obviously this can't be the case, so we go on. Now we look for any smsc-id = B in the existing (running) config. If it is present, then it's marked to be shutdown. And in any case smsc-id = B is started.

Ok, and now we need to keep track of the "left ones" from the existing config. I.e. if in the new config there is no smsc-id = A, which we assume, since we changed only the smsc-id from A to B, then the smsc-id = A must be shutdown too, due that it is not present in the new config.

And what does this mean effectively? It means smsc-id = A is shutdown. This ensures that all MTs in the smsc scope queue are reverted back to the main abstraction layer queue of bearerbox, (for the routing step again). And smsc-id = B is started.

IF the allowed-smsc-id config scope of smsc-id = B allows the messages that have been re-queued into the abstracter layer, then bearerbox can route them again into B.

I hope this clears the question.

Another usage example: "Re-direct already routed MTs in a queue to an other route"

Ok, let's assume your smsc groups are "hard-wired", which is a term I like for the case that:

  group = smsc
  smsc-id = A
  ...
  allowed-smsc-id = A

  group = smsc
  smsc-id = B
  ...
  allowed-smsc-id = B

  (...etc...)

and you have a queue in A, i.e. because something is going on in the SMSC of A and the throughput is slowed down drastically. Let's assume you would like to revert all pending queued MTs from A to B, because B has enough capacity right now.

How would the config change look? It would look like this:

  (removing smsc-id = A)

  group = smsc
  smsc-id = B
  ...
  allowed-smsc-id = "B;A"

  (...etc..)

Effectively, A is shutdown, MTs in the queue are setup to be routed again. B has changed, so B is shutdown, but also started again. And then all MTs from A can go to B.

B has to restart here, even while there is no real need, so this leads us to a new idea:

We split the md5 hash into 2 parts, one is for the pure "logical connection", hence incorporating the host, port, username, password, any SMSC relevant options etc. The other one are the "routing parameters" of bearerbox, so, allowed-smsc-id, denied-smsc-id, etc.

This allows us to detect if the "logical connection setup" changed, or/and the "routing setup". If it is "only" the routing setup, then we can "move in" the new values from the reloaded group, rather then really having to shutdown, destroy, create the smsc instance again.

Stipe

--
-------------------------------------------------------------------
Kölner Landstrasse 419
40589 Düsseldorf, NRW, Germany

tolj.org system architecture      Kannel Software Foundation (KSF)
http://www.tolj.org/              http://www.kannel.org/

mailto:st_{at}_tolj.org           mailto:stolj_{at}_kannel.org
-------------------------------------------------------------------

Reply via email to