IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 25, 2009, 2:00:56 PM (17 years ago)
Author:
eugene
Message:

merging changes from head

Location:
branches/eam_branches/20090522
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20090522

  • branches/eam_branches/20090522/Nebulous-Server

  • branches/eam_branches/20090522/Nebulous-Server/lib/Nebulous/Server/SQL.pm

    r23947 r24557  
    175175        WHERE ext_id = ?
    176176    },
    177     delete_instance    => qq{
     177    delete_instance_by_ins_id => qq{
    178178        DELETE FROM instance
    179         WHERE uri = ?
     179        WHERE ins_id = ?
    180180    },
    181181    get_object_from_uri   => qq{
     
    184184        WHERE uri = ?
    185185    },
     186    get_instance_by_uri   => qq{
     187        SELECT ins_id
     188        FROM instance
     189        WHERE
     190            so_id = ?
     191            AND uri = ?
     192    },
    186193    get_instance_count   => qq{
    187194        SELECT count(ins_id)
    188195        FROM instance
    189196        WHERE so_id = ?
     197    },
     198    get_instance_count_by_ext_id   => qq{
     199        SELECT count(ins_id), so_id
     200        FROM instance
     201        JOIN storage_object
     202            USING(so_id)
     203        WHERE
     204            ext_id = ?
     205        GROUP BY so_id
    190206    },
    191207    get_object_instances    => qq{
     
    233249    get_replication_volume_for_ext_id   => qq{
    234250        SELECT
    235             vol_id,
     251            m.vol_id,
    236252            host,
    237253            path,
    238254            xattr,
    239255            total - used as free
    240         FROM (
    241 -- This query works but is slow...
    242 --             SELECT
    243 --                  mountedvol.*
    244 --             FROM mountedvol
    245 --             WHERE
    246 --                 vol_id NOT IN(
    247 --                     SELECT vol_id
    248 --                     FROM storage_object
    249 --                     JOIN instance
    250 --                         USING(so_id)
    251 --                     WHERE ext_id = --
    252 --                  )
    253                 SELECT
    254                     m.*
    255                 FROM mountedvol AS m
    256                 LEFT JOIN instance AS i
    257                     ON m.vol_id = i.vol_id
    258                     AND i.so_id = (
    259                         SELECT so_id
    260                         FROM storage_object
    261                         WHERE ext_id = ?
    262                     )
    263                 WHERE
    264                     i.vol_id IS NULL
    265         ) as Foo
     256        FROM mountedvol AS m
     257        LEFT JOIN instance AS i
     258            ON m.vol_id = i.vol_id
     259            AND i.so_id = (
     260                SELECT so_id
     261                FROM storage_object
     262                WHERE ext_id = ?
     263            )
    266264        WHERE
    267             used / total < ?
     265            i.vol_id IS NULL
     266            AND used / total < ?
    268267            AND available = ?
    269268            AND allocate = ?
    270         ORDER BY RAND()
    271         LIMIT 1
     269            ORDER BY RAND()
     270            LIMIT 1
    272271    },
    273272    get_storage_volume          => qq{
     
    287286    },
    288287    new_volume          => qq{
    289         INSERT INTO volume (name, host, path, allocate, available, xattr)
    290         VALUES (?, ?, ?, TRUE, TRUE, FALSE)
     288        INSERT INTO volume (name, host, path, allocate, available, xattr, mountpoint)
     289        VALUES (?, ?, ?, TRUE, TRUE, FALSE, ?)
    291290    },
    292291    get_volume_by_name => qq{
     
    397396    },
    398397    get_mounted_volumes => qq{
    399         SELECT * FROM mountedvol ORDER BY host, name
     398        SELECT mountpoint, total, used, vol_id, name, host, path, allocate, available, xattr FROM mountedvol ORDER BY host, name
    400399    },
    401400);
     
    424423DROP TABLE IF EXISTS lock_record;
    425424DROP TABLE IF EXISTS volume;
    426 DROP TABLE IF EXISTS mount;
     425DROP TABLE IF EXISTS mountedvol;
    427426DROP TABLE IF EXISTS log;
    428 DROP TABLE IF EXISTS mountedvol;
    429427DROP TABLE IF EXISTS directory;
    430428DROP PROCEDURE IF EXISTS getmountedvol;
     
    455453    FOREIGN KEY(parent_id) REFERENCES directory(dir_id),
    456454    PRIMARY KEY(dir_id),
    457     KEY(parent_id)
     455    KEY(parent_id),
     456    KEY(dirname),
     457    UNIQUE(dirname, parent_id)
    458458) ENGINE=innodb DEFAULT CHARSET=latin1;
    459459
     
    466466CREATE TABLE storage_object (
    467467    so_id BIGINT NOT NULL AUTO_INCREMENT,
    468     ext_id VARCHAR(255) NOT NULL UNIQUE,
     468    ext_id VARCHAR(255) NOT NULL,
    469469    ext_id_basename VARCHAR(255) NOT NULL,
    470470    dir_id BIGINT NOT NULL,
     
    472472    type enum('REG_FILE'),
    473473    PRIMARY KEY(so_id),
     474    UNIQUE KEY(ext_id),
    474475    KEY(dir_id),
    475476    KEY(type)
     
    514515CREATE TABLE volume (
    515516    vol_id INT NOT NULL AUTO_INCREMENT,
    516     name VARCHAR(255) UNIQUE NOT NULL,
     517    name VARCHAR(255) NOT NULL,
    517518    host VARCHAR(255) NOT NULL,
    518519    path VARCHAR(255) NOT NULL,
     
    520521    available BOOLEAN DEFAULT FALSE,
    521522    xattr BOOLEAN DEFAULT FALSE,
     523    mountpoint VARCHAR(255) NOT NULL,
    522524    PRIMARY KEY(vol_id),
     525    UNIQUE KEY(name),
     526    UNiQUE KEY(path),
    523527    KEY(host(16)),
    524     KEY(path(255)),
    525528    KEY(allocate),
    526     KEY(available)
     529    KEY(available),
     530    KEY(mountpoint(255))
     531) ENGINE=innodb DEFAULT CHARSET=latin1;
     532
     533###
     534
     535CREATE TABLE mountedvol(
     536    vol_id INT NOT NULL,
     537    FOREIGN KEY(vol_id) REFERENCES volume(vol_id) ON DELETE CASCADE,
     538    name VARCHAR(255) NOT NULL,
     539    host VARCHAR(255) NOT NULL,
     540    path VARCHAR(255) NOT NULL,
     541    FOREIGN KEY(path) REFERENCES volume(path) ON DELETE CASCADE,
     542    allocate BOOLEAN DEFAULT FALSE,
     543    available BOOLEAN DEFAULT FALSE,
     544    xattr BOOLEAN DEFAULT FALSE,
     545    mountpoint VARCHAR(255) NOT NULL,
     546    FOREIGN KEY(mountpoint) REFERENCES volume(mountpoint) ON DELETE CASCADE,
     547    total BIGINT NOT NULL,
     548    used BIGINT NOT NULL,
     549    PRIMARY KEY(vol_id),
     550    KEY(name),
     551    KEY(host),
     552    KEY(path),
     553    KEY(allocate),
     554    KEY(available),
     555    KEY(xattr),
     556    KEY(mountpoint(255))
    527557) ENGINE=innodb DEFAULT CHARSET=latin1;
    528558
     
    546576###
    547577
    548 CREATE TABLE mount (
    549     mountpoint VARCHAR(255) NOT NULL,
    550     total BIGINT NOT NULL,
    551     used BIGINT NOT NULL,
    552     PRIMARY KEY(mountpoint)
    553 ) ENGINE=innodb DEFAULT CHARSET=latin1;
    554 
    555 ###
    556 
    557578CREATE TABLE log (
    558579    timestamp TIMESTAMP,
     
    562583    message VARCHAR(2048) NOT NULL,
    563584    PRIMARY KEY(timestamp)
    564 ) ENGINE=innodb DEFAULT CHARSET=latin1;
    565 
    566 ###
    567 
    568 CREATE TABLE mountedvol(
    569     mountpoint VARCHAR(255) NOT NULL,
    570     FOREIGN KEY(mountpoint) REFERENCES mount(mountpoint) ON DELETE CASCADE,
    571     total BIGINT NOT NULL,
    572     used BIGINT NOT NULL,
    573     vol_id INT NOT NULL,
    574     FOREIGN KEY(vol_id) REFERENCES volume(vol_id) ON DELETE CASCADE,
    575     name VARCHAR(255) NOT NULL,
    576     host VARCHAR(255) NOT NULL,
    577     path VARCHAR(255) NOT NULL,
    578     FOREIGN KEY(path) REFERENCES volume(path) ON DELETE CASCADE,
    579     allocate BOOLEAN DEFAULT FALSE,
    580     available BOOLEAN DEFAULT FALSE,
    581     xattr BOOLEAN DEFAULT FALSE,
    582     PRIMARY KEY(mountpoint),
    583     KEY(vol_id),
    584     KEY(name),
    585     KEY(host),
    586     KEY(path),
    587     KEY(allocate),
    588     KEY(available),
    589     KEY(xattr)
    590585) ENGINE=innodb DEFAULT CHARSET=latin1;
    591586
     
    608603
    609604    -- store the okey checking state
    610     SELECT @@FOREIGN_KEY_CHECKS INTO key_checks;
     605--    SELECT @@FOREIGN_KEY_CHECKS INTO key_checks;
    611606    -- disable foregin check checks to prevent deadlocks on the mountedvol table
    612     SET FOREIGN_KEY_CHECKS=0;
     607--    SET FOREIGN_KEY_CHECKS=0;
    613608
    614609    -- make sure the temp table does not already exist... this can happy if the
     
    629624    OPEN cur1;
    630625
    631     DELETE FROM mountedvol;
    632 
    633626    myloop: LOOP
    634627        FETCH cur1 INTO vol_idvar, namevar, hostvar, pathvar, allocatevar, availablevar, xattrvar;
    635628        IF `done` THEN LEAVE myloop; END IF;
    636         INSERT INTO mountedvol
     629        REPLACE INTO mountedvol
    637630            SELECT mountpoint, total, used, vol_idvar, namevar, hostvar, pathvar, allocatevar, availablevar, xattrvar
    638631            FROM
     
    650643
    651644    -- restore the original key checking state
    652     SET @@FOREIGN_KEY_CHECKS = key_checks;
     645--    SET @@FOREIGN_KEY_CHECKS = key_checks;
    653646
    654647    DROP TABLE IF EXISTS myvolume;
    655648
    656     SET FOREIGN_KEY_CHECKS=1;
     649--    SET FOREIGN_KEY_CHECKS=1;
    657650
    658651    COMMIT;
Note: See TracChangeset for help on using the changeset viewer.