[SIP Beyond VoIP] Sylk-server "db.connection is null" during the saving message

Anil KARADAG akaradag at NETAS.com.tr
Wed Oct 17 08:54:27 CEST 2012


Hi all,

 

 

 

I use sylk-server 2.1.0 on ubuntu 11.04. I realize that sylk-server does
not write chat message to the pre-defined database.

I added some debug logs to applications->conference->room.py and
applications->conference->database.py

 

 

applications->conference->database.py

 

def initialize():

    print "Function conference.database.initialize";

    print "ConferenceConfig.db_uri:%s" %(ConferenceConfig.db_uri)

    db = Database(ConferenceConfig.db_uri)

    if db.connection is not Null:

        print db.connection.__dict__

    MessageHistory._connection = db.connection

    db.create_table(MessageHistory)

 

 

def _save_message(sip_from, room_uri, cpim_body, cpim_content_type,
cpim_sender, cpim_recipient, cpim_timestamp):

    print "Function _save_message"

    for x in xrange(0, 3):

        try:

            return MessageHistory(date              =
datetime.datetime.utcnow(),

                                room_uri          = room_uri,

                                sip_from          = sip_from,

                                cpim_body         = cpim_body,

                                cpim_content_type = cpim_content_type,

                                cpim_sender       = cpim_sender,

                                cpim_recipient    = cpim_recipient,

                                cpim_timestamp    = cpim_timestamp)

        except Exception, e:

            time.sleep(0.2)

    print "Could not save DB records: %s" %(e)

    log.error('Could not save DB records: %s' % e)

    return

 

def async_save_message(sip_from, room_uri, cpim_body, cpim_content_type,
cpim_sender, cpim_recipient, cpim_timestamp):

    print "Function async_save_message";

    if db.connection is not Null:

        print "Function async_save_message: db.connection is not null";

        return deferToThread(_save_message, sip_from, room_uri,
cpim_body, cpim_content_type, cpim_sender, cpim_recipient,
cpim_timestamp)

    else:

        print "db.connection is null"

 

 

applications->conference->room.py

 

def _message_dispatcher(self):

        """Read from self.incoming_message_queue and dispatch the
messages to other participants"""

       while True:

            session, message_type, data =
self.incoming_message_queue.wait()

            print "Chat Message type: %s" %(message_type)

            if message_type == 'message':

                message = data.message

                print "message.sender.uri=%s,
session.remote_identity.uri=%s" %(message.sender.uri,
session.remote_identity.uri)

 

            ...

 

 

 

According to below logs, the variable "db" is set within
conference.database.initialize function but the instance is overwritten
because db.connection is null within async_save_message. 

So no messages is written to database.

 

 

root at trhtlangley35:/usr/lib/python2.7/dist-packages/sylk/applications/co
nference# /usr/bin/sylk-server --no-fork

Starting SylkServer 2.1.0, config=/etc/sylkserver/config.ini

using set_wakeup_fd

...

Loaded applications: conference, xmppgateway, irc-conference

Function conference.database.initialize

ConferenceConfig.db_uri:sqlite:///var/lib/sylkserver/conference.sqlite

{'debugThreading': False, 'module': <module 'sqlite3' from
'/usr/lib/python2.7/sqlite3/__init__.pyc'>, 'debugOutput': False,
'style': None, 'debugWriter': <sqlobject.dbconnection.ConsoleWriter
instance at 0x2f6a3f8>, '_connectionCount': 1, 'cache':
<sqlobject.cache.CacheSet object at 0x2f96990>, 'filename':
'/var/lib/sylkserver/conference.sqlite', 'autoCommit': True,
'_connOptions': {'isolation_level': None, 'detect_types': 1},
'_threadPool': {}, 'registry': None, '_threadOrigination': {},
'SQLObject': <sqlobject.dbconnection.ConnWrapper object at 0x2f96a10>,
'name': None, 'using_sqlite2': True, '_pool': [], 'MessageHistory':
<sqlobject.dbconnection.ConnWrapper object at 0x2f96a50>, 'doCache':
True, '_memory': False, 'debug': False, 'use_table_info': False,
'_binaryType': <type 'buffer'>, '_connectionNumbers': {}, '_poolLock':
<thread.lock object at 0x213aeb0>}

[conference] Bonjour publication started for service 'sipfocus'

[conference] Bonjour publication started for service 'sipuri'

twisted.web.server.Site starting on 58525

Starting factory <twisted.web.server.Site instance at 0x2f99680>

[conference] ScreenSharing listener started on 47.168.85.98:58525

<class 'sylk.applications.xmppgateway.xmpp.XMPPS2SServerFactory'>
starting on 5269

Starting factory
<sylk.applications.xmppgateway.xmpp.XMPPS2SServerFactory object at
0x2f6b810>

[xmpp] XMPP listener started on 47.168.85.98:5269

[conference] New incoming session from sip:odolu2 at nl12taf.com

eventlib.twistedutil.protocol.SpawnFactory starting on 60606

Starting factory <eventlib.twistedutil.protocol.SpawnFactory instance at
0x2a53bd8>

(TCP Port 60606 Closed)

Stopping factory <eventlib.twistedutil.protocol.SpawnFactory instance at
0x2a53bd8>

[conference] test test <sip:test at abc.com> started conference
meetme at abc.com with chat

Function async_save_message

db.connection is null

Chat Message type: message

message.sender.uri=sip:test at abc.com,
session.remote_identity.uri=sip:test at abc.com

Function async_save_message

db.connection is null

 

 

 

 

I tried the write operation on the python console, there is no problem.

 

 

root at trhtlangley35:~# python

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)

[GCC 4.5.2] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import sylk

>>> from sylk.applications.conference.database import *

using set_wakeup_fd

>>> from sylk.applications.conference.configuration import
ConferenceConfig

>>> from sylk.database import Database

>>> db = Database(ConferenceConfig.db_uri)

>>> import datetime

>>>
sylk.applications.conference.database._save_message("odolu2 at nl12taf.com"
, "test", "test", "text", "odolu2 at nl12taf.com", "odolu1 at nl12taf.com",
datetime.datetime.today())

error: [conference] Could not save DB records: No connection has been
defined for this thread or process

>>> 

>>> sylk.applications.conference.database.MessageHistory._connection =
db.connection

>>>
sylk.applications.conference.database._save_message("odolu2 at nl12taf.com"
, "test", "test", "text", "odolu2 at nl12taf.com", "odolu1 at nl12taf.com",
datetime.datetime.today())

<MessageHistory 2 date='datetime.datetime...)' room_uri=u'test'
sip_from="u'odolu2 at nl12taf....'" cpim_body=u'test'
cpim_content_type=u'text' cpim_sender="u'odolu2 at nl12taf....'"
cpim_recipient="u'odolu1 at nl12taf....'"
cpim_timestamp='datetime.datetime...)'>

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ag-projects.com/pipermail/sipbeyondvoip/attachments/20121017/07537bd4/attachment-0001.html>


More information about the SIPBeyondVoIP mailing list