Bug 9995 - Rsync 3.1.0 mysql db code needs fixing
Summary: Rsync 3.1.0 mysql db code needs fixing
Status: RESOLVED FIXED
Alias: None
Product: rsync
Classification: Unclassified
Component: core (show other bugs)
Version: 3.1.0
Hardware: x64 Linux
: P5 normal (vote)
Target Milestone: ---
Assignee: Wayne Davison
QA Contact: Rsync QA Contact
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-07-03 20:24 UTC by Vu Do Chi Toai
Modified: 2013-07-12 21:46 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vu Do Chi Toai 2013-07-03 20:24:06 UTC
Hi,

Sorry, I am french ,  my english is not very fluent.
Just a word, i wish to thank Wayne Davison for his work.
I 'm testing Rsync 3.1, with the db.diff Patch, especially the checksum feature.
The build has no troubles. 
But, to initialize the tables in the Mysql Database, i have found an error :

dvu@alix:~/LADHYX/Dev/Rsync/Git/rsync> /opt/Rsync/bin/rsyncdb --db=/opt/Rsync/dbconfig --init --mounts
Creating DB rsync (if it does not exist)
Dropping old tables (if they exist))
Creating empty tables ...
[rsyncdb] Prepare failed: Table 'rsync.disk' doesn't exist
INSERT INTO disk SET host = ?, last_seen = ?, mount_uniq = ?, devno = ? ON DUPLICATE KEY UPDATE last_seen = VALUES(last_seen), devno = VALUES(devno)
Marking mount "Mount of /dev/sda4" (2052) as recently seen
Erreur de segmentation

The Mysql query in db.c file do not work.

CREATE TABLE disk (
                    disk_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
                    host varchar(256) NOT NULL default 'localhost',
                    mount_uniq varchar(256) default NULL,
                    devno bigint unsigned NOT NULL,
                    last_seen bigint NOT NULL,
                    UNIQUE KEY mount_lookup (host, mount_uniq),
                    KEY dev_lookup (devno, host)
                )

I have tested it inside Mysql :

MariaDB [rsync]> CREATE TABLE disk (disk_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
    -> host varchar(256) NOT NULL default 'localhost',
    -> mount_uniq varchar(256) default NULL,
    -> devno bigint unsigned NOT NULL,
    -> last_seen bigint NOT NULL,
    -> UNIQUE KEY mount_lookup (host, mount_uniq),
    -> KEY dev_lookup (devno, host)
    -> );
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

I dont know if it's a Mysql's bug.
Comment 1 Wayne Davison 2013-07-12 19:22:38 UTC
The db code is in active development at the moment, so the issue you saw with prepare being called prior to the table creation was found and fixed a little while back.  I have been doing a lot of testing on the sqlite side, so I hadn't tested the mysql side recently and it had a couple other issues that had crept into the code.  I just corrected these in my just-committed patch.  With those changes I did some simple init/mounts/update/clean testing and it worked well.

I don't know why you're seeing an index issue with your manual table creation.  The table that rsync creates works fine for me.  I'm using mysql 5.5, though -- dunno if that makes a difference.  Give the auto-creation a try, and if you still have issues, you might try lowering the 256 values a little to get it to fit (and tweak the code to match).

Thanks for testing, and let me know if you run into further issues.
Comment 2 Wayne Davison 2013-07-12 19:39:28 UTC
FYI, the latest patch also narrows the fields from 256 to 128 chars, which should be plenty.