Hi,

Le dimanche 20 décembre 2009 19:15:06, Kern Sibbald a écrit :
> Hello Eric,
> 
> I've been a bit busy, but just the same worried about what Bruno is
>  describing here, and interestingly enough, on my machine, I am also
>  finding that for MySQL batch insert it turned off, yet for PostgreSQL it
>  is turned on.
> 
> After a bit of experimenting, I think the problem is that there are several
> problems with the ./configure script.
> 
> First, for MySQL, the library that is found is
>  /usr/lib64/libmysqlclient_r.so, which is OK, but our test for
>  pthread_mutex_lock uses nm on the library, which is simply broken.  It is
>  not an object file, but rather a shared object, so it simply imports other
>  shared objects.
> 
> The second problem is that for PostgreSQL, it is using /usr/lib/libpq.a,
>  which does show pthread_mutex_lock, but in my opinion, we should
> probably /usr/lib/libpq.so, and obviously if we do the test will fail.

Postgres gives an API call to determine if the client is thread-safe or not, 
perhaps MySQL do the same (i will check).

> I think there is one or more bugs hidden here ...

I have seen also problem with SQLite3 detection on my ArchLinux.

Bye

> Kern
> 
> On Thursday 17 December 2009 08:11:09 Bruno Friedmann wrote:
> > Hello Kern, and thank you for your precious comment
> > about the mysql pthread_mutex_lock availability.
> >
> > I cut all none interesting part. And add what I've found
> > I'm working now on openSUSE 11.2 and I want to extend the bacula.spec of
> > Scott to include the su112 tag and a way to build with and without
> > batch-insert-enabled binary.
> >
> > After several check, none of the rpm build have batch insert inside.
> >
> > So to be sure, I've reget the tar.gz original sources try to reconfigure
> > with simple flags
> >
> > ./configure --enable-smartalloc --with-tcp-wrappers
> > --with-libiconv-prefix --with-libintl-prefix --enable-largefile --with-x
> > --enable-ipv6
> > --enable-acl --enable-xattr --enable-batch-insert --with-python
> > --with-qwt --enable-gnome --enable-bat --with-sqlite3 ( or --with-mysql
> > or
> > --with-postgresql )
> >
> > In every try I only get Enable Batch insert No
> >
> > Configuration on Thu Dec 17 07:59:22 CET 2009:
> >
> >    Host:                    i686-pc-linux-gnu -- suse 11.2
> >    Bacula version:          Bacula 3.0.2 (18 July 2009)
> >    Source code location:    .
> >    Install binaries:        /sbin
> >    Install libraries:       /usr/lib
> >    Install config files:    /etc/bacula
> >    Scripts directory:       /etc/bacula
> >    Archive directory:       /tmp
> >    Working directory:       /var/bacula/working
> >    PID directory:           /var/run
> >    Subsys directory:        /var/lock/subsys
> >    Man directory:           ${datarootdir}/man
> >    Data directory:          /usr/share
> >    Plugin directory:        /usr/lib
> >    C Compiler:              gcc Linux)
> >    C++ Compiler:            /usr/bin/g++ Linux)
> >    Compiler flags:           -g -O2 -Wall -fno-strict-aliasing
> > -fno-exceptions -fno-rtti Linker flags:
> >    Libraries:               -lpthread -ldl
> >    Statically Linked Tools: no
> >    Statically Linked FD:    no
> >    Statically Linked SD:    no
> >    Statically Linked DIR:   no
> >    Statically Linked CONS:  no
> >    Database type:           MySQL
> >    Database port:
> >    Database lib:            -L/usr/lib -lmysqlclient_r -lz
> >    Database name:           bacula
> >    Database user:           bacula
> >
> >    Job Output Email:        r...@localhost
> >    Traceback Email:         r...@localhost
> >    SMTP Host Address:       localhost
> >
> >    Director Port:           9101
> >    File daemon Port:        9102
> >    Storage daemon Port:     9103
> >
> >    Director User:
> >    Director Group:
> >    Storage Daemon User:
> >    Storage DaemonGroup:
> >    File Daemon User:
> >    File Daemon Group:
> >
> >    SQL binaries Directory   /usr/bin
> >
> >    Large file support:      yes
> >    Bacula conio support:    yes -lncurses
> >    readline support:        no
> >    TCP Wrappers support:    yes -lwrap
> >    TLS support:             yes
> >    Encryption support:      yes
> >    ZLIB support:            yes
> >    enable-smartalloc:       yes
> >    enable-lockmgr:          no
> >    bat support:             yes -L/usr/lib
> >    enable-gnome:            yes Version 2.x
> >    enable-bwx-console:      no
> >    enable-tray-monitor:     no
> >    client-only:             no
> >    build-dird:              yes
> >    build-stored:            yes
> >    ACL support:             yes
> >    XATTR support:           yes
> >    Python support:          yes -lpthread -ldl -lutil -lm -lpython2.6
> > -lutil -lrt Batch insert enabled:    no
> >
> >
> > I put here the pg_config and mysql_config results
> > mysql_config
> > Usage: /usr/bin/mysql_config [OPTIONS]
> > Options:
> >         --cflags         [-I/usr/include/mysql  -fomit-frame-pointer
> > -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables
> > -fasynchronous-unwind-tables -g -DPIC -fPIC -DUNDEF_HAVE_INITGROUPS
> > -fno-strict-aliasing   -DUNIV_LINUX] --include
> > [-I/usr/include/mysql]
> >         --libs           [-L/usr/lib/mysql -lmysqlclient -lz -lcrypt
> > -lnsl -lm -L/usr/lib -L/usr/lib64 -lssl -lcrypto] --libs_r
> > [-L/usr/lib/mysql -lmysqlclient_r -lz -lpthread -lcrypt -lnsl -lm
> > -lpthread -L/usr/lib -L/usr/lib64 -lssl -lcrypto]
> >         --plugindir      [/usr/lib/mysql/plugin]
> >         --socket         [/var/run/mysql/mysql.sock]
> >         --port           [0]
> >         --version        [5.1.36]
> >         --libmysqld-libs [-L/usr/lib/mysql -lmysqld -ldl -lz -lpthread
> > -lcrypt -lnsl -lm -lpthread -lwrap -lrt -L/usr/lib -L/usr/lib64 -lssl
> > -lcrypto]
> >
> > pg_config
> > BINDIR = /usr/bin
> > DOCDIR = /usr/share/doc/packages/postgresql
> > HTMLDIR = /usr/share/doc/packages/postgresql
> > INCLUDEDIR = /usr/include/pgsql
> > PKGINCLUDEDIR = /usr/include/pgsql
> > INCLUDEDIR-SERVER = /usr/include/pgsql/server
> > LIBDIR = /usr/lib
> > PKGLIBDIR = /usr/lib/postgresql
> > LOCALEDIR = /usr/share/locale
> > MANDIR = /usr/share/man
> > SHAREDIR = /usr/share/postgresql
> > SYSCONFDIR = /usr/etc/postgresql
> > PGXS = /usr/lib/postgresql/pgxs/src/makefiles/pgxs.mk
> > CONFIGURE = '--prefix=/usr' '--libdir=/usr/lib' '--bindir=/usr/bin'
> > '--includedir=/usr/include/pgsql' '--datadir=/usr/share/postgresql'
> > '--mandir=/usr/share/man' '--docdir=/usr/share/doc/packages'
> > '--disable-rpath' '--enable-nls' '--enable-thread-safety'
> > '--enable-integer-datetimes' '--without-python' '--without-perl'
> > '--without-tcl' '--with-openssl' '--with-pam' '--with-krb5'
> > '--with-gssapi' '--with-ldap' '--with-libxml' '--with-libxslt'
> > '--with-system-tzdata=/usr/share/zoneinfo' 'CFLAGS=-fomit-frame-pointer
> > -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
> > -funwind-tables -fasynchronous-unwind-tables '
> > CC = gcc
> > CPPFLAGS = -D_GNU_SOURCE -I/usr/include/libxml2
> > CFLAGS = -fomit-frame-pointer -fmessage-length=0 -O2 -Wall
> > -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables
> > -fasynchronous-unwind-tables  -Wall -Wmissing-prototypes -Wpointer-arith
> > -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv
> > CFLAGS_SL = -fpic
> > LDFLAGS = -Wl,--as-needed
> > LDFLAGS_SL =
> > LIBS = -lpgport -lxslt -lxml2 -lpam -lssl -lcrypto -lkrb5 -lcom_err
> > -lgssapi_krb5 -lz -lreadline -lcrypt -ldl -lm VERSION = PostgreSQL 8.4.1
> >
> >
> > The two main database are quiet new 5.1 and 8.4.1.
> >
> > I really don't understand why I didn't get batch enable insert to on
> > openSUSE 11.2, and need some advice to find why and/or where to look. So
> > perharps i could complain in bugzilla.novell.com
> >
> >
> > ps : I'm using the default new desktop kernel (mainly preempt+pae)
> > uname -a
> > Linux c-3po 2.6.31.5-0.1-desktop #1 SMP PREEMPT 2009-10-26 15:49:03 +0100
> > i686 i686 i386 GNU/Linux
> >
> >
> >
> > rest of mail is for archive.
> >
> > On 12/16/2009 08:24 AM, Kern Sibbald wrote:
> > > Hello Bruno,
> > >
> > > On Wednesday 16 December 2009 07:18:48 Bruno Friedmann wrote:
> > >> On 12/14/2009 10:00 PM, John Jorgensen wrote:
> > >>>>>>>> "bruno" == Bruno Friedmann <[email protected]> writes:
> > >>>
> > >>>     bruno> ok I've try and only get this on the two proposed
> > >>>
> > >>>     bruno> strings /usr/sbin/bacula-dir | grep batch
> > >>>     bruno> _Z27db_write_batch_file_recordsP3JCR
> > >>>     bruno> _Z23db_open_batch_connexionP3JCRP4B_DB
> > >>>
> > >>> I think that the string that Eric suggested searching for might
> > >>> have changed from one release of bacula to another.
> > >>>
> > >>> So in case you're as far behind the times as our site (we're
> > >>> still running Bacula 2.4.3) ...
> > >>>
> > >>> While I'm pretty sure our old server is doing batch inserts,
> > >>> grep'ing for "batch" produces only:
> > >>>
> > >>>   558 backup $strings /usr/local/bacula/sbin/bacula-dir | grep -i
> > >>> batch Cannot select %s in batch mode.
> > >>>
> > >>> Searching for "temporary" hits though:
> > >>>
> > >>>  559 backup $strings /usr/local/bacula/sbin/bacula-dir | grep -i
> > >>> temporary CREATE TEMPORARY TABLE DelCandidates (JobId INTEGER NOT
> > >>> NULL, PurgedFiles SMALLINT, FileSetId INTEGER, JobFiles INTEGER,
> > >>> JobStatus char(1)) CREATE TEMPORARY TABLE temp (JobId INTEGER NOT
> > >>> NULL,JobTDate BIGINT,ClientId INTEGER,Level CHAR,JobFiles
> > >>> INTEGER,JobBytes BIGINT,StartTime TEXT,VolumeName TEXT,StartFile
> > >>> INTEGER,VolSessionId INTEGER,VolSessionTime INTEGER) CREATE TEMPORARY
> > >>> TABLE temp1 (JobId INTEGER NOT NULL,JobTDate BIGINT) 560 backup $
> > >>>
> > >>> As does looking for the message that I see in bconsole while the
> > >>> directory is unbatching the attributes:
> > >>>
> > >>>   560 backup $strings /usr/local/bacula/sbin/bacula-dir | grep -i
> > >>> inserting Inserting first %s res: %s index=%d
> > >>>   Inserting %s res: %s index=%d pass=%d
> > >>>   Dir inserting Attributes
> > >>
> > >> Thanks John on a 3.0.3 build the temporary search give more
> > >> instructions strings /usr/sbin/bacula-dir | grep -i temporary
> > >> CREATE TEMPORARY TABLE cpy_tmp AS SELECT MIN(JobId) AS JobId FROM Job
> > >> WHERE Type='%c' AND ( PriorJobId IN (%s) OR  PriorJobId IN ( SELECT
> > >> PriorJobId FROM Job WHERE JobId IN (%s)  AND Type='B' ) ) GROUP BY
> > >> PriorJobId
> > >>
> > >> and in libbacsql.so
> > >>
> > >> strings libbacsql.so.1.0.0 | grep -i temporary
> > >> CREATE TEMPORARY TABLE DelCandidates (JobId INTEGER UNSIGNED NOT NULL,
> > >> PurgedFiles TINYINT, FileSetId INTEGER UNSIGNED, JobFiles INTEGER
> > >> UNSIGNED, JobStatus BINARY(1))
> > >> CREATE TEMPORARY TABLE DelCandidates (JobId INTEGER NOT NULL,
> > >> PurgedFiles SMALLINT, FileSetId INTEGER, JobFiles INTEGER, JobStatus
> > >> char(1)) CREATE TEMPORARY TABLE DelCandidates (JobId INTEGER UNSIGNED
> > >> NOT NULL, PurgedFiles TINYINT, FileSetId INTEGER UNSIGNED, JobFiles
> > >> INTEGER UNSIGNED, JobStatus CHAR)
> > >> CREATE TEMPORARY TABLE temp (JobId INTEGER UNSIGNED NOT NULL,JobTDate
> > >> BIGINT UNSIGNED,ClientId INTEGER UNSIGNED,Level CHAR,JobFiles INTEGER
> > >> UNSIGNED,JobBytes BIGINT UNSIGNED,StartTime TEXT,VolumeName
> > >> TEXT,StartFile INTEGER UNSIGNED,VolSessionId INTEGER
> > >> UNSIGNED,VolSessionTime INTEGER UNSIGNED)
> > >> CREATE TEMPORARY TABLE temp (JobId INTEGER NOT NULL,JobTDate
> > >> BIGINT,ClientId INTEGER,Level CHAR,JobFiles INTEGER,JobBytes
> > >> BIGINT,StartTime TEXT,VolumeName TEXT,StartFile INTEGER,VolSessionId
> > >> INTEGER,VolSessionTime INTEGER) CREATE TEMPORARY TABLE temp1 (JobId
> > >> INTEGER UNSIGNED NOT NULL,JobTDate BIGINT UNSIGNED) CREATE TEMPORARY
> > >> TABLE temp1 (JobId INTEGER NOT NULL,JobTDate BIGINT)
> > >>
> > >> So in this case I can deduct that there's batch-insert enable ..
> > >
> > > None of the above look to me like the Batch Insert code.  I am not the
> > > expert, but these are not the SQL statements that Eric said would be
> > > present in Batch Insert.
> > >
> > >> BUT when I check against a package newly build with
> > >> --disable-batch-inssert confirmed by the result of config
> > >>
> > >> Configuration on Wed Dec 16 06:33:02 CET 2009:
> > >>
> > >>    Host:                    i686-pc-linux-gnu -- suse 11.2
> > >>    Bacula version:          Bacula 3.0.3 (18 October 2009)
> > >>    Source code location:    .
> > >>    Install binaries:        /usr/sbin
> > >>    Install libraries:       /usr/lib
> > >>    Install config files:    /etc/bacula
> > >>    Scripts directory:       /usr/lib/bacula
> > >>    Archive directory:       /tmp
> > >>    Working directory:       /var/lib/bacula
> > >>    PID directory:           /var/run
> > >>    Subsys directory:        /var/lock/subsys
> > >>    Man directory:           /usr/share/man
> > >>    Data directory:          /usr/share
> > >>    Plugin directory:        /usr/lib/bacula
> > >>    C Compiler:              gcc Linux)
> > >>    C++ Compiler:            /usr/bin/g++ Linux)
> > >>    Compiler flags:           -O2 -g -msse -mmmx -march=i586
> > >> -mtune=i686 -funroll-loops -mfpmath=sse -fmessage-length=0
> > >> -fno-strict-aliasing -pipe -fstack-protector -Wall -D_FORTIFY_SOURCE=0
> > >> -fno-strict-aliasing -fno-exceptions -fno-rtti
> > >>
> > >>    Linker flags:             -I/usr/lib -L/usr/lib/termcap
> > >>
> > >>    Libraries:               -lpthread -ldl
> > >>
> > >>    Statically Linked Tools: no
> > >>
> > >>    Statically Linked FD:    no
> > >>
> > >>    Statically Linked SD:    no
> > >>
> > >>    Statically Linked DIR:   no
> > >>
> > >>    Statically Linked CONS:  no
> > >>
> > >>    Database type:           MySQL
> > >>
> > >>    Database port:
> > >>
> > >>    Database lib:            -L/usr/lib -lmysqlclient_r -lz
> > >>
> > >>    Database name:           bacula
> > >>
> > >>    Database user:           bacula
> > >>
> > >>
> > >>    Job Output Email:        r...@localhost
> > >>    Traceback Email:         r...@localhost
> > >>    SMTP Host Address:       localhost
> > >>
> > >>    Director Port:           9101
> > >>    File daemon Port:        9102
> > >>    Storage daemon Port:     9103
> > >>
> > >>    Director User:           bacula
> > >>    Director Group:          bacula
> > >>    Storage Daemon User:     bacula
> > >>    Storage DaemonGroup:     disk
> > >>    File Daemon User:        root
> > >>    File Daemon Group:       bacula
> > >>
> > >>    SQL binaries Directory   /usr/bin
> > >>
> > >>    Large file support:      yes
> > >>    Bacula conio support:    yes -ltermcap
> > >>    readline support:        no
> > >>    TCP Wrappers support:    yes -lwrap
> > >>    TLS support:             yes
> > >>    Encryption support:      yes
> > >>    ZLIB support:            yes
> > >>    enable-smartalloc:       yes
> > >>    enable-lockmgr:          no
> > >>    bat support:             no
> > >>    enable-gnome:            no
> > >>    enable-bwx-console:      no
> > >>    enable-tray-monitor:     no
> > >>    client-only:             no
> > >>    build-dird:              yes
> > >>    build-stored:            yes
> > >>    ACL support:             yes
> > >>    XATTR support:           yes
> > >>    Python support:          yes -lpthread -ldl -lutil -lm -lpython2.6
> > >> -lutil -lrt Batch insert enabled:    no
> > >>
> > >>
> > >> I'm getting the same string inside bacula-dir and libbacsql.so ?
> > >>
> > >> CREATE TEMPORARY TABLE cpy_tmp AS SELECT MIN(JobId) AS JobId FROM Job
> > >> WHERE Type='%c' AND ( PriorJobId IN (%s) OR  PriorJobId IN ( SELECT
> > >> PriorJobId FROM Job WHERE JobId IN (%s)  AND Type='B' ) ) GROUP BY
> > >> PriorJobId
> > >>
> > >> strings libbacsql.so.1.0.0 | grep -i temporary
> > >> CREATE TEMPORARY TABLE DelCandidates (JobId INTEGER UNSIGNED NOT NULL,
> > >> PurgedFiles TINYINT, FileSetId INTEGER UNSIGNED, JobFiles INTEGER
> > >> UNSIGNED, JobStatus BINARY(1))
> > >> CREATE TEMPORARY TABLE DelCandidates (JobId INTEGER NOT NULL,
> > >> PurgedFiles SMALLINT, FileSetId INTEGER, JobFiles INTEGER, JobStatus
> > >> char(1)) CREATE TEMPORARY TABLE DelCandidates (JobId INTEGER UNSIGNED
> > >> NOT NULL, PurgedFiles TINYINT, FileSetId INTEGER UNSIGNED, JobFiles
> > >> INTEGER UNSIGNED, JobStatus CHAR)
> > >> CREATE TEMPORARY TABLE temp (JobId INTEGER UNSIGNED NOT NULL,JobTDate
> > >> BIGINT UNSIGNED,ClientId INTEGER UNSIGNED,Level CHAR,JobFiles INTEGER
> > >> UNSIGNED,JobBytes BIGINT UNSIGNED,StartTime TEXT,VolumeName
> > >> TEXT,StartFile INTEGER UNSIGNED,VolSessionId INTEGER
> > >> UNSIGNED,VolSessionTime INTEGER UNSIGNED)
> > >> CREATE TEMPORARY TABLE temp (JobId INTEGER NOT NULL,JobTDate
> > >> BIGINT,ClientId INTEGER,Level CHAR,JobFiles INTEGER,JobBytes
> > >> BIGINT,StartTime TEXT,VolumeName TEXT,StartFile INTEGER,VolSessionId
> > >> INTEGER,VolSessionTime INTEGER) CREATE TEMPORARY TABLE temp1 (JobId
> > >> INTEGER UNSIGNED NOT NULL,JobTDate BIGINT UNSIGNED) CREATE TEMPORARY
> > >> TABLE temp1 (JobId INTEGER NOT NULL,JobTDate BIGINT)
> > >>
> > >>
> > >> So there's two solutions, the strings are always present, or there's
> > >> somewhere a default in sources or build ....
> > >>
> > >> Eric can you recheck about the string on a 3.0.3 pure git trunk ?
> > >
> > > It is pretty clear from the code that there will be differences in the
> > > SQL statements that are in the binary files when Batch Insert is on and
> > > when it is off.  If you are getting the same code with Batch Insert on
> > > and off, then the problem lies in MySQL not having the multithread
> > > option turned on when it was built (i.e. it has no references to
> > > pthread_mutex_lock in the MySQL client library that Bacula links in). 
> > > If that is the case,  batch insert will be flagged as "no" in the
> > > output of ./configure.
> > >
> > > If you are getting the same strings in both bacula-dir and
> > > libbacsql.so, then you are mixing code.  That is you have built
> > > bacula-dir statically and dynamically.  You probably need to do "make
> > > uninstall" between make installs, but make uninstall is so seldom used,
> > > I am not 100% sure it handles uninstalling the shared objects.
> > >
> > > The CREATE TEMPORARY TABLE cpy_tmp should appear only in bacula-dir and
> > > not in libbacsq.so
> > >
> > >> What make me in doubt is that bacula-dir/libbacsql with ou without
> > >> batch enabled have the same md5sum ? b9156e6cb7902024c790add0291216bc
> > >> bacula-dir (without bi)
> > >>  b9156e6cb7902024c790add0291216bc  /usr/sbin/bacula-dir
> > >>  f01fe8fb42648dae586762b44987bfe1  libbacsql.so.1.0.0 (without bi)
> > >>  f01fe8fb42648dae586762b44987bfe1  /usr/lib/libbacsql.so.1.0.0
> > >>
> > >> What are the result for you ?
> > >
> > > Given what I wrote above, you are clearly not comparing Bacula with and
> > > without Batch Insert.
> > >
> > > Regards,
> > >
> > > Kern
> 

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Bacula-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to