'\" t
.\" Title: queue_mover3
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.79.1
.\" Date: 09/28/2016
.\" Manual: \ \&
.\" Source: \ \&
.\" Language: English
.\"
.TH "QUEUE_MOVER3" "1" "09/28/2016" "\ \&" "\ \&"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
queue_mover3 \- PgQ consumer that copies data from one queue to another\&.
.SH "SYNOPSIS"
.sp
.nf
queue_mover3 [switches] config\&.ini
.fi
.SH "DESCRIPTION"
.sp
queue_mover is PgQ consumer that transports events from source queue into target queue\&. One use case is when events are produced in several databases then queue_mover is used to consolidate these events into single queue that can then be processed by consumers who need to handle theses events\&. For example in case of patitioned databases it\(cqs convenient to move events from each partition into one central queue database and then process them there\&. That way configuration and dependancies of partiton databases are simpler and more robust\&. Another use case is to move events from OLTP database to batch processing server\&.
.sp
Transactionality: events will be inserted as one transaction on target side\&. That means only batch_id needs to be tracked on target side\&.
.SH "QUICK\-START"
.sp
Basic PgQ setup and usage can be summarized by the following steps:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 1." 4.2
.\}
PgQ must be installed both in source and target databases\&. See pgqadm man page for details\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 2." 4.2
.\}
Target database must also have pgq_ext schema installed\&. It is used to keep sync between two databases\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 3." 4.2
.\}
Create a queue_mover configuration file, say qmover_sourceq_to_targetdb\&.ini
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 4." 4.2
.\}
create source and target queues
.sp
.if n \{\
.RS 4
.\}
.nf
$ pgqadm\&.py sourcedb_ticker\&.ini create
$ pgqadm\&.py targetdb_ticker\&.ini create
.fi
.if n \{\
.RE
.\}
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 5." 4.2
.\}
launch queue mover in daemon mode
.sp
.if n \{\
.RS 4
.\}
.nf
$ queue_mover3 \-d qmover_sourceq_to_targetdb\&.ini
.fi
.if n \{\
.RE
.\}
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 6.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 6." 4.2
.\}
start producing and consuming events
.RE
.SH "CONFIG"
.SS "Common configuration parameters"
.PP
job_name
.RS 4
Name for particulat job the script does\&. Script will log under this name to logdb/logserver\&. The name is also used as default for PgQ consumer name\&. It should be unique\&.
.RE
.PP
pidfile
.RS 4
Location for pid file\&. If not given, script is disallowed to daemonize\&.
.RE
.PP
logfile
.RS 4
Location for log file\&.
.RE
.PP
loop_delay
.RS 4
If continuisly running process, how long to sleep after each work loop, in seconds\&. Default: 1\&.
.RE
.PP
connection_lifetime
.RS 4
Close and reconnect older database connections\&.
.RE
.PP
use_skylog
.RS 4
foo\&.
.RE
.SS "Common PgQ consumer parameters"
.PP
queue_name
.RS 4
Queue name to attach to\&. No default\&.
.RE
.PP
consumer_name
.RS 4
Consumers ID to use when registering\&. Default: %(job_name)s
.RE
.SS "queue_mover parameters"
.PP
src_db
.RS 4
Source database\&.
.RE
.PP
dst_db
.RS 4
Target database\&.
.RE
.PP
dst_queue_name
.RS 4
Target queue name\&.
.RE
.SS "Example config file"
.sp
.if n \{\
.RS 4
.\}
.nf
[queue_mover3]
job_name = eventlog_to_target_mover
src_db = dbname=sourcedb
dst_db = dbname=targetdb
pgq_queue_name = eventlog
dst_queue_name = copy_of_eventlog
pidfile = log/%(job_name)s\&.pid
logfile = pid/%(job_name)s\&.log
.fi
.if n \{\
.RE
.\}
.SH "COMMAND LINE SWITCHES"
.sp
Following switches are common to all skytools\&.DBScript\-based Python programs\&.
.PP
\-h, \-\-help
.RS 4
show help message and exit
.RE
.PP
\-q, \-\-quiet
.RS 4
make program silent
.RE
.PP
\-v, \-\-verbose
.RS 4
make program more verbose
.RE
.PP
\-d, \-\-daemon
.RS 4
make program go background
.RE
.PP
\-\-ini
.RS 4
show commented template config file\&.
.RE
.sp
Following switches are used to control already running process\&. The pidfile is read from config then signal is sent to process id specified there\&.
.PP
\-r, \-\-reload
.RS 4
reload config (send SIGHUP)
.RE
.PP
\-s, \-\-stop
.RS 4
stop program safely (send SIGINT)
.RE
.PP
\-k, \-\-kill
.RS 4
kill program immidiately (send SIGTERM)
.RE
.SH "BUGS"
.sp
Event ID is not kept on target side\&. If needed is can be kept, then event_id seq at target side need to be increased by hand to inform ticker about new events\&.