db_virtual Module

Table of Contents

1. Admin Guide
1.1. Overview
1.1.1. The idea
1.1.2. Modes
1.1.3. Capabilities
1.1.4. Failures
1.1.5. The timer process
1.2. Dependencies
1.2.1. OpenSIPS Modules
1.2.2. External Libraries or Applications
1.3. Exported Parameters
1.3.1. db_urls (str)
1.3.2. db_probe_time (integer)
1.3.3. db_max_consec_retrys (integer)
1.4. Exported MI Functions
1.4.1. db_get
1.4.2. db_set
2. Contributors
2.1. By Commit Statistics
2.2. By Commit Activity
3. Documentation
3.1. Contributors

List of Tables

2.1. Top contributors by DevScore(1), authored commits(2) and lines added/removed(3)
2.2. Most recently active contributors(1) to this module

List of Examples

1.1. Set db_urls parameter
1.2. Set db_probe_time parameter
1.3. Set db_max_consec_retrys parameter

Chapter 1. Admin Guide

1.1. Overview

1.1.1.  The idea

A virtual DB will expose the same front DB api however, it will backed by many real DB. This means that a virtual DB URL translates to many real DB URLs. This virtual layer also enables us to use the real dbs in multiple ways such as: parallel, failover(hotswap) and round-robin. Therefore: each virtual DB URL with associated real dbs and a way to use(mode) it's real dbs must be specified.

1.1.2. Modes

The implemented modes are:


    Use the first URL; if it fails, take the next URL and redo the operation.


    Use all the URLs in the virtual DB URL set. Fails if all the URLs fail.

  • ROUND (round-robin)

    Use the next URL each time; if it fails, use the next one, redo operation.

When choosing the db virtual mode, be sure that there is a full compatibility between the DB operations you want to do (inserts, updates, deletes,...) and the relation (if any) between the real DB URLs you have in the set - can be completely independent, can be nodes of the same cluster, or any other combination.

1.1.3. Capabilities

For each set (or new virtual DB URL), the capabilities are automatically calculated based on the capabilities provided by the real DB URLs from the set. A logical AND is done for each cabability over all the URLs in the set. Shortly, in order for the virtual URL to provide a certain capability, ALL its real URLs must provide that capability.

Note that starting with version 2.2 db_virtual supports async_raw_query and async_raw_resume functions currently implemented only by the mysql database engine.

1.1.4.  Failures

	When an operation from a process on a real DB fails:
		it is marked (global and local CAN flag down)
		its connection closed

	Later a timer process (probe):
	foreach virtual db_url
		foreach real db_url
			if global CAN down
				try to connect
			if ok
				global CAN up
				close connection

	Later each process:
		if local CAN down and global CAN up
			if db_max_consec_retrys *
				try to connect
		if ok
			local CAN up


Note *: there could be inconsistencies between the probe and each process so a retry limit is in order. It is reset and ignored by an MI command.

1.1.5. The timer process

The timer process(probe) is a process that tries to reconnect to failed dbs from time to time. It is a separate process so that when it blocks (for a timeout on the connection) it doesn't matter.

1.2. Dependencies

1.2.1. OpenSIPS Modules

The following modules must be loaded before this module:

  • At least one real DB module.

1.2.2. External Libraries or Applications

The following libraries or applications must be installed before running OpenSIPS with this module loaded:

  • None.

1.3. Exported Parameters

1.3.1.  db_urls (str)

Multiple value parameter used for virtual DB URLs declaration.

Example 1.1. Set db_urls parameter


modparam("presence|presence_xml", "db_url","virtual://set2")

modparam("db_virtual", "db_urls", "define set1 PARALLEL")
modparam("db_virtual", "db_urls", "mysql://opensips:opensipsrw@localhost/testa")
modparam("db_virtual", "db_urls", "postgres://opensips:opensipsrw@localhost/opensips")

modparam("db_virtual", "db_urls", "define set2 FAILOVER")
modparam("db_virtual", "db_urls", "mysql://opensips:opensipsrw@localhost/testa")

1.3.2.  db_probe_time (integer)

Time interval after which a registered timer process attempts to check failed(as reported by other processes) connections to real dbs. The probe will connect and disconnect to the failed real DB and announce others.

Default value is 10 (10 sec).

Example 1.2. Set db_probe_time parameter

modparam("db_virtual", "db_probe_time", 20)

1.3.3.  db_max_consec_retrys (integer)

After the timer process has reported that it can connect to the real db, other processes will try to reconnect to it. There are cases where although the probe could connect some might fail. This parameter represents the number of consecutive failed retries that a process will do before it gives up. This value is reset and suppressed by a MI function(db_set).

Default value is 10 (10 consecutive times).

Example 1.3. Set db_max_consec_retrys parameter

modparam("db_virtual", "db_max_consec_retrys", 20)


1.4. Exported MI Functions

1.4.1.  db_get

Return information about global state of the real dbs.

Name: db_get


  • None.

MI FIFO Command Format:


1.4.2.  db_set

Sets the permissions for real dbs access per set per db.

Sets the reconnect reset flag.

Name: db_set


  • set_index [int]
  • db_url_index [int]
  • may_use_db_flag [boolean]
  • ignore db_max_consec_retrys[boolean](optional)

db_set 3 2 0 1 means:

  • 3 - the fourth set (must exist)
  • 2 - the third URL in the fourth set(must exist)
  • 0 - processes are not allowed to use that URL
  • 1 - reset and suppress db_max_consec_retrys

MI FIFO Command Format:

				db_set 3 2 0 1

Chapter 2. Contributors

2.1. By Commit Statistics

Table 2.1. Top contributors by DevScore(1), authored commits(2) and lines added/removed(3)

 NameDevScoreCommitsLines ++Lines --
1. Razvan Pistolea3172244297
2. Bogdan-Andrei Iancu (@bogdan-iancu)211797122
3. Liviu Chircu (@liviuchircu)141099134
4. Razvan Crainea (@razvancrainea)751111
5. Ionut Ionita (@ionutrazvanionita)632329
6. Anca Vamanu3133
7. Walter Doekes (@wdoekes)3122
8. Julián Moreno Patiño3111

(1) DevScore = author_commits + author_lines_added / (project_lines_added / project_commits) + author_lines_deleted / (project_lines_deleted / project_commits)

(2) including any documentation-related commits, excluding merge commits. Regarding imported patches/code, we do our best to count the work on behalf of the proper owner, as per the "fix_authors" and "mod_renames" arrays in opensips/doc/build-contrib.sh. If you identify any patches/commits which do not get properly attributed to you, please submit a pull request which extends "fix_authors" and/or "mod_renames".

(3) ignoring whitespace edits, renamed files and auto-generated files

2.2. By Commit Activity

Table 2.2. Most recently active contributors(1) to this module

 NameCommit Activity
1. Bogdan-Andrei Iancu (@bogdan-iancu)Aug 2009 - Aug 2018
2. Liviu Chircu (@liviuchircu)Oct 2013 - Jun 2018
3. Razvan Crainea (@razvancrainea)Sep 2011 - Oct 2017
4. Ionut Ionita (@ionutrazvanionita)Feb 2016 - Mar 2017
5. Julián Moreno PatiñoFeb 2016 - Feb 2016
6. Walter Doekes (@wdoekes)Jun 2014 - Jun 2014
7. Anca VamanuJan 2011 - Jan 2011
8. Razvan PistoleaJul 2009 - Aug 2009

(1) including any documentation-related commits, excluding merge commits

Chapter 3. Documentation

3.1. Contributors

Last edited by: Bogdan-Andrei Iancu (@bogdan-iancu), Liviu Chircu (@liviuchircu), Julián Moreno Patiño, Ionut Ionita (@ionutrazvanionita), Razvan Pistolea.

doc copyrights:

Copyright © 2009 Voice Sistem SRL