Hi,

Mark Martinec schrieb:

>> since now I'm not using any SQL in AMaViSd / SpamAssassin.
>> I'm planning to go to bayes in SQL and to make use of the pen pal /
>> bounce killer feature with MySQL.
>> I'm not quite clear what tables the logging mechanism in AMaViSd uses
>> and which I have to define to use bounce killer. Any hint?
> 
> You need tables maddr, msgs, msgrcpt, and quarantine,
> search for "R/W part of the dataset" in README.sql-mysql / README.sql-pg.
I installed the tables like this and send a few mails, which created 
rows in the tables.
MySQL is 5.1.42 on SLES 11.

CREATE TABLE maddr (
   partition_tag integer   DEFAULT 0,   -- see $sql_partition_tag
   id         bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
   email      varbinary(255) NOT NULL,  -- full mail address
   domain     varchar(255)   NOT NULL,  -- only domain part of the email 
address
                                        -- with subdomain fields in reverse
   CONSTRAINT part_email UNIQUE (partition_tag,email)
) ENGINE=InnoDB;

CREATE TABLE msgs (
   partition_tag integer    DEFAULT 0,   -- see $sql_partition_tag
   mail_id    varbinary(12) NOT NULL PRIMARY KEY,  -- long-term unique 
mail id
   secret_id  varbinary(12)   DEFAULT '',  -- authorizes release of mail_id
   am_id      varchar(20)   NOT NULL,    -- id used in the log
   time_num   integer unsigned NOT NULL, -- rx_time: seconds since Unix 
epoch
   time_iso TIMESTAMP NOT NULL DEFAULT 0,
   sid        bigint unsigned NOT NULL, -- sender: maddr.id
   policy     varchar(255)  DEFAULT '',  -- policy bank path (like macro %p)
   client_addr varchar(255) DEFAULT '',  -- SMTP client IP address (IPv4 
or v6)
   size       integer unsigned NOT NULL, -- message size in bytes
   content    binary(1),                 -- content type: V/B/S/s/M/H/O/C:
     -- 
virus/banned/spam(kill)/spammy(tag2)/bad-mime/bad-header/oversized/clean
     -- is NULL on partially processed mail
     -- use binary instead of char for case sensitivity ('S' != 's')
   quar_type  binary(1),                 -- quarantined as: ' '/F/Z/B/Q/M/L
                                         --  none/file/zipfile/bsmtp/sql/
                                         --  /mailbox(smtp)/mailbox(lmtp)
   quar_loc   varbinary(255) DEFAULT '', -- quarantine location (e.g. file)
   dsn_sent   char(1),                   -- was DSN sent? Y/N/q (q=quenched)
   spam_level float,                     -- SA spam level (no boosts)
   message_id varchar(255)  DEFAULT '',  -- mail Message-ID header field
   from_addr  varchar(255)  DEFAULT '',  -- mail From header field,    UTF8
   subject    varchar(255)  DEFAULT '',  -- mail Subject header field, UTF8
   host       varchar(255)  NOT NULL,    -- hostname where amavisd is 
running
   FOREIGN KEY (sid) REFERENCES maddr(id) ON DELETE RESTRICT
) ENGINE=InnoDB;

CREATE INDEX msgs_idx_sid      ON msgs (sid);
CREATE INDEX msgs_idx_mess_id  ON msgs (message_id); -- useful with pen pals
CREATE INDEX msgs_idx_time_num ON msgs (time_num);
CREATE INDEX msgs_idx_time_iso ON msgs (time_iso);

CREATE TABLE msgrcpt (
   partition_tag integer    DEFAULT 0,    -- see $sql_partition_tag
   mail_id    varbinary(12) NOT NULL,     -- (must allow duplicates)
   rid        bigint unsigned NOT NULL,   -- recipient: maddr.id (dupl. 
allowed)
   ds         char(1)       NOT NULL,     -- delivery status: P/R/B/D/T
                                          -- 
pass/reject/bounce/discard/tempfail
   rs         char(1)       NOT NULL,     -- release status: initialized 
to ' '
   bl         char(1)       DEFAULT ' ',  -- sender blacklisted by this 
recip
   wl         char(1)       DEFAULT ' ',  -- sender whitelisted by this 
recip
   bspam_level float,                     -- spam level + per-recip boost
   smtp_resp  varchar(255)  DEFAULT '',   -- SMTP response given to MTA
   FOREIGN KEY (rid)     REFERENCES maddr(id)     ON DELETE RESTRICT,
   FOREIGN KEY (mail_id) REFERENCES msgs(mail_id) ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE INDEX msgrcpt_idx_mail_id  ON msgrcpt (mail_id);
CREATE INDEX msgrcpt_idx_rid      ON msgrcpt (rid);

CREATE TABLE quarantine (
   partition_tag integer    DEFAULT 0,    -- see $sql_partition_tag
   mail_id    varbinary(12) NOT NULL,     -- long-term unique mail id
   chunk_ind  integer unsigned NOT NULL,  -- chunk number, starting with 1
   mail_text  blob          NOT NULL,     -- store mail as chunks of octets
   PRIMARY KEY (mail_id,chunk_ind),
   FOREIGN KEY (mail_id) REFERENCES msgs(mail_id) ON DELETE CASCADE
) ENGINE=InnoDB;

When I tried to go with partitions:

CREATE TABLE maddr (
    id int(10) unsigned NOT NULL AUTO_INCREMENT,
    partition_tag int(11) NOT NULL DEFAULT '0',
    email varbinary(255) NOT NULL,
    domain varchar(255) NOT NULL,
    PRIMARY KEY (id, partition_tag),
    UNIQUE KEY email_key (partition_tag, email)
) ENGINE=InnoDB PARTITION BY LIST (partition_tag) (
    PARTITION p0 VALUES IN (0,1,2,3,4,5),
    PARTITION p1 VALUES IN (6,7,8,9,10,11),
    PARTITION p2 VALUES IN (12,13,14,15,16,17),
    PARTITION p3 VALUES IN (18,19,20,21,22,23),
    PARTITION p4 VALUES IN (24,25,26,27,28,29),
    PARTITION p5 VALUES IN (30,31,32,33,34,35),
    PARTITION p6 VALUES IN (36,37,38,39,40,41),
    PARTITION p7 VALUES IN (42,43,44,45,46,47),
    PARTITION p8 VALUES IN (48,49,50,51,52,53)
);

This is created just fine.
The second one is not:

CREATE TABLE msgs (
   partition_tag integer    DEFAULT 0,   -- see $sql_partition_tag
   mail_id    varbinary(12) NOT NULL PRIMARY KEY,  -- long-term unique 
mail id
   secret_id  varbinary(12)   DEFAULT '',  -- authorizes release of mail_id
   am_id      varchar(20)   NOT NULL,    -- id used in the log
   time_num   integer unsigned NOT NULL, -- rx_time: seconds since Unix 
epoch
   time_iso TIMESTAMP NOT NULL DEFAULT 0,
   sid        bigint unsigned NOT NULL, -- sender: maddr.id
   policy     varchar(255)  DEFAULT '',  -- policy bank path (like macro %p)
   client_addr varchar(255) DEFAULT '',  -- SMTP client IP address (IPv4 
or v6)
   size       integer unsigned NOT NULL, -- message size in bytes
   content    binary(1),                 -- content type: V/B/S/s/M/H/O/C:
     -- 
virus/banned/spam(kill)/spammy(tag2)/bad-mime/bad-header/oversized/clean
     -- is NULL on partially processed mail
     -- use binary instead of char for case sensitivity ('S' != 's')
   quar_type  binary(1),                 -- quarantined as: ' '/F/Z/B/Q/M/L
                                         --  none/file/zipfile/bsmtp/sql/
                                         --  /mailbox(smtp)/mailbox(lmtp)
   quar_loc   varbinary(255) DEFAULT '', -- quarantine location (e.g. file)
   dsn_sent   char(1),                   -- was DSN sent? Y/N/q (q=quenched)
   spam_level float,                     -- SA spam level (no boosts)
   message_id varchar(255)  DEFAULT '',  -- mail Message-ID header field
   from_addr  varchar(255)  DEFAULT '',  -- mail From header field,    UTF8
   subject    varchar(255)  DEFAULT '',  -- mail Subject header field, UTF8
   host       varchar(255)  NOT NULL,    -- hostname where amavisd is 
running
   FOREIGN KEY (sid) REFERENCES maddr(id) ON DELETE RESTRICT
) ENGINE=InnoDB PARTITION BY LIST (partition_tag) (
    PARTITION p0 VALUES IN (0,1,2,3,4,5),
    PARTITION p1 VALUES IN (6,7,8,9,10,11),
    PARTITION p2 VALUES IN (12,13,14,15,16,17),
    PARTITION p3 VALUES IN (18,19,20,21,22,23),
    PARTITION p4 VALUES IN (24,25,26,27,28,29),
    PARTITION p5 VALUES IN (30,31,32,33,34,35),
    PARTITION p6 VALUES IN (36,37,38,39,40,41),
    PARTITION p7 VALUES IN (42,43,44,45,46,47),
    PARTITION p8 VALUES IN (48,49,50,51,52,53)
);

ERROR 1506 (HY000): Foreign key clause is not yet supported in 
conjunction with partitioning

Even this the table schema without (see above) it does not work:
ERROR 1005 (HY000): Can't create table 'amavisd_log.msgs' (errno: 150)

shell> perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

How can I use all the tables above with partitioning or is this not 
recommended?



Marc

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
AMaViS-user mailing list
AMaViS-user@lists.sourceforge.net 
https://lists.sourceforge.net/lists/listinfo/amavis-user 
 AMaViS-FAQ:http://www.amavis.org/amavis-faq.php3 
 AMaViS-HowTos:http://www.amavis.org/howto/ 

Reply via email to