Index: trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm
===================================================================
--- trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm	(revision 12007)
+++ trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm	(revision 12961)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: SQL.pm,v 1.23 2007-02-23 01:23:45 jhoblitt Exp $
+# $Id: SQL.pm,v 1.24 2007-04-23 20:45:08 jhoblitt Exp $
 
 package Nebulous::Server::SQL;
@@ -115,11 +115,30 @@
     },
     get_storage_volume_byname   => qq{
-        SELECT uri FROM volume WHERE name = ? ORDER BY rand() LIMIT 1 
+        SELECT
+            mountpoint,
+            total - used as free
+        FROM volume
+        JOIN mount      -- join limits us to currently mounted volumes
+            ON volume.path = mount.mountpoint
+        WHERE
+            used / total < ?
+            AND name = ?
+        ORDER BY free DESC
+        LIMIT 1
     },
     get_storage_volume          => qq{
-        SELECT uri FROM volume ORDER BY rand() LIMIT 1
+        SELECT
+            mountpoint,
+            total - used as free
+        FROM volume
+        JOIN mount      -- join limits us to currently mounted volumes
+            ON volume.path = mount.mountpoint
+        WHERE
+            used / total < ?
+        ORDER BY free DESC
+        LIMIT 1
     },
     new_volume          => qq{
-        INSERT INTO volume (name, uri)
+        INSERT INTO volume (name, path)
         VALUES (?, ?)
     },
@@ -130,5 +149,5 @@
     },
     get_volume_by_name => qq{
-        SELECT vol_id, name, uri
+        SELECT vol_id, name, path
         FROM volume
         WHERE name = ?
@@ -156,4 +175,5 @@
 DROP TABLE IF EXISTS lock_record;
 DROP TABLE IF EXISTS volume;
+DROP TABLE IF EXISTS mount;
 DROP TABLE IF EXISTS class;
 DROP TABLE IF EXISTS log
