- Timestamp:
- Jun 25, 2009, 2:00:56 PM (17 years ago)
- Location:
- branches/eam_branches/20090522
- Files:
-
- 3 edited
-
. (modified) (1 prop)
-
Nebulous-Server (modified) (1 prop)
-
Nebulous-Server/lib/Nebulous/Server/SQL.pm (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20090522
- Property svn:mergeinfo changed
-
branches/eam_branches/20090522/Nebulous-Server
- Property svn:mergeinfo changed
-
branches/eam_branches/20090522/Nebulous-Server/lib/Nebulous/Server/SQL.pm
r23947 r24557 175 175 WHERE ext_id = ? 176 176 }, 177 delete_instance => qq{177 delete_instance_by_ins_id => qq{ 178 178 DELETE FROM instance 179 WHERE uri= ?179 WHERE ins_id = ? 180 180 }, 181 181 get_object_from_uri => qq{ … … 184 184 WHERE uri = ? 185 185 }, 186 get_instance_by_uri => qq{ 187 SELECT ins_id 188 FROM instance 189 WHERE 190 so_id = ? 191 AND uri = ? 192 }, 186 193 get_instance_count => qq{ 187 194 SELECT count(ins_id) 188 195 FROM instance 189 196 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 190 206 }, 191 207 get_object_instances => qq{ … … 233 249 get_replication_volume_for_ext_id => qq{ 234 250 SELECT 235 vol_id,251 m.vol_id, 236 252 host, 237 253 path, 238 254 xattr, 239 255 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 ) 266 264 WHERE 267 used / total < ? 265 i.vol_id IS NULL 266 AND used / total < ? 268 267 AND available = ? 269 268 AND allocate = ? 270 ORDER BY RAND()271 LIMIT 1269 ORDER BY RAND() 270 LIMIT 1 272 271 }, 273 272 get_storage_volume => qq{ … … 287 286 }, 288 287 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, ?) 291 290 }, 292 291 get_volume_by_name => qq{ … … 397 396 }, 398 397 get_mounted_volumes => qq{ 399 SELECT *FROM mountedvol ORDER BY host, name398 SELECT mountpoint, total, used, vol_id, name, host, path, allocate, available, xattr FROM mountedvol ORDER BY host, name 400 399 }, 401 400 ); … … 424 423 DROP TABLE IF EXISTS lock_record; 425 424 DROP TABLE IF EXISTS volume; 426 DROP TABLE IF EXISTS mount ;425 DROP TABLE IF EXISTS mountedvol; 427 426 DROP TABLE IF EXISTS log; 428 DROP TABLE IF EXISTS mountedvol;429 427 DROP TABLE IF EXISTS directory; 430 428 DROP PROCEDURE IF EXISTS getmountedvol; … … 455 453 FOREIGN KEY(parent_id) REFERENCES directory(dir_id), 456 454 PRIMARY KEY(dir_id), 457 KEY(parent_id) 455 KEY(parent_id), 456 KEY(dirname), 457 UNIQUE(dirname, parent_id) 458 458 ) ENGINE=innodb DEFAULT CHARSET=latin1; 459 459 … … 466 466 CREATE TABLE storage_object ( 467 467 so_id BIGINT NOT NULL AUTO_INCREMENT, 468 ext_id VARCHAR(255) NOT NULL UNIQUE,468 ext_id VARCHAR(255) NOT NULL, 469 469 ext_id_basename VARCHAR(255) NOT NULL, 470 470 dir_id BIGINT NOT NULL, … … 472 472 type enum('REG_FILE'), 473 473 PRIMARY KEY(so_id), 474 UNIQUE KEY(ext_id), 474 475 KEY(dir_id), 475 476 KEY(type) … … 514 515 CREATE TABLE volume ( 515 516 vol_id INT NOT NULL AUTO_INCREMENT, 516 name VARCHAR(255) UNIQUENOT NULL,517 name VARCHAR(255) NOT NULL, 517 518 host VARCHAR(255) NOT NULL, 518 519 path VARCHAR(255) NOT NULL, … … 520 521 available BOOLEAN DEFAULT FALSE, 521 522 xattr BOOLEAN DEFAULT FALSE, 523 mountpoint VARCHAR(255) NOT NULL, 522 524 PRIMARY KEY(vol_id), 525 UNIQUE KEY(name), 526 UNiQUE KEY(path), 523 527 KEY(host(16)), 524 KEY(path(255)),525 528 KEY(allocate), 526 KEY(available) 529 KEY(available), 530 KEY(mountpoint(255)) 531 ) ENGINE=innodb DEFAULT CHARSET=latin1; 532 533 ### 534 535 CREATE 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)) 527 557 ) ENGINE=innodb DEFAULT CHARSET=latin1; 528 558 … … 546 576 ### 547 577 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 557 578 CREATE TABLE log ( 558 579 timestamp TIMESTAMP, … … 562 583 message VARCHAR(2048) NOT NULL, 563 584 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)590 585 ) ENGINE=innodb DEFAULT CHARSET=latin1; 591 586 … … 608 603 609 604 -- store the okey checking state 610 SELECT @@FOREIGN_KEY_CHECKS INTO key_checks;605 -- SELECT @@FOREIGN_KEY_CHECKS INTO key_checks; 611 606 -- disable foregin check checks to prevent deadlocks on the mountedvol table 612 SET FOREIGN_KEY_CHECKS=0;607 -- SET FOREIGN_KEY_CHECKS=0; 613 608 614 609 -- make sure the temp table does not already exist... this can happy if the … … 629 624 OPEN cur1; 630 625 631 DELETE FROM mountedvol;632 633 626 myloop: LOOP 634 627 FETCH cur1 INTO vol_idvar, namevar, hostvar, pathvar, allocatevar, availablevar, xattrvar; 635 628 IF `done` THEN LEAVE myloop; END IF; 636 INSERTINTO mountedvol629 REPLACE INTO mountedvol 637 630 SELECT mountpoint, total, used, vol_idvar, namevar, hostvar, pathvar, allocatevar, availablevar, xattrvar 638 631 FROM … … 650 643 651 644 -- restore the original key checking state 652 SET @@FOREIGN_KEY_CHECKS = key_checks;645 -- SET @@FOREIGN_KEY_CHECKS = key_checks; 653 646 654 647 DROP TABLE IF EXISTS myvolume; 655 648 656 SET FOREIGN_KEY_CHECKS=1;649 -- SET FOREIGN_KEY_CHECKS=1; 657 650 658 651 COMMIT;
Note:
See TracChangeset
for help on using the changeset viewer.
