Index: /tags/ipp-20111110/Nebulous-Server/bin/neb-admin
===================================================================
--- /tags/ipp-20111110/Nebulous-Server/bin/neb-admin	(revision 32952)
+++ /tags/ipp-20111110/Nebulous-Server/bin/neb-admin	(revision 32953)
@@ -601,24 +601,52 @@
 
     # Determine a list of first instances
+#     my $query = $dbh->prepare(
+# 	"
+# SELECT S.so_id,ext_id,ins_id,uri,substr(uri,-10,5) AS class_id,vol_id,name AS vol_name,host AS vol_host FROM (
+#   select * FROM (
+#   select MAX(ins_id) AS MAXins_id, MIN(ins_id) AS MINins_id, so_id,ext_id,value AS user_copies FROM storage_object 
+#     JOIN storage_object_xattr USING(so_id) 
+#     RIGHT JOIN instance USING(so_id) 
+#      WHERE name = 'user.copies' 
+#      AND value >= 2 
+#      AND ext_id LIKE '%ota%fits' 
+#      AND so_id >= $so_id_start
+#      AND so_id <  $so_id_end
+#      GROUP BY so_id 
+#   ) AS V 
+#   WHERE MAXins_id != MINins_id
+#   ) AS S
+#   JOIN instance ON (S.MINins_id = instance.ins_id AND S.so_id = instance.so_id) 
+#   JOIN volume USING(vol_id) WHERE volume.available = 1
+#   LIMIT $limit
+#   OFFSET $offset
+# ");
     my $query = $dbh->prepare(
 	"
-SELECT S.so_id,ext_id,ins_id,uri,substr(uri,-10,5) AS class_id,vol_id,name AS vol_name,host AS vol_host FROM (
-  select * FROM (
-  select MAX(ins_id) AS MAXins_id, MIN(ins_id) AS MINins_id, so_id,ext_id,value AS user_copies FROM storage_object 
-    JOIN storage_object_xattr USING(so_id) 
-    RIGHT JOIN instance USING(so_id) 
-     WHERE name = 'user.copies' 
-     AND value >= 2 
-     AND ext_id LIKE '%ota%fits' 
-     AND so_id >= $so_id_start
-     AND so_id <  $so_id_end
-     GROUP BY so_id 
-  ) AS V 
-  WHERE MAXins_id != MINins_id
-  ) AS S
-  JOIN instance ON (S.MINins_id = instance.ins_id AND S.so_id = instance.so_id) JOIN volume USING(vol_id) WHERE volume.available = 1
-  LIMIT $limit
-  OFFSET $offset
+SELECT Z.so_id,ext_id,Z.ins_id,Z.uri,substr(Z.uri,-10,5) AS class_id,Z.vol_id,vol_name,vol_host,
+       instance.vol_id AS  second_vol_id,volume.name AS second_name,volume.host AS second_host FROM (
+  SELECT S.so_id,ext_id,ins_id,uri,substr(uri,-10,5) AS class_id,vol_id,name AS vol_name,host AS vol_host,MAXins_id FROM (
+    select * FROM (
+      select MAX(ins_id) AS MAXins_id, MIN(ins_id) AS MINins_id, so_id,ext_id,value AS user_copies FROM storage_object
+        JOIN storage_object_xattr USING(so_id)
+        RIGHT JOIN instance USING(so_id)
+         WHERE name = 'user.copies'
+         AND value >= 2
+         AND ext_id LIKE '%ota%fits'
+         AND so_id >= $so_id_start
+         AND so_id <  $so_id_end
+         GROUP BY so_id
+      ) AS V
+      WHERE MAXins_id != MINins_id
+    ) AS S
+    JOIN instance ON (S.MINins_id = instance.ins_id AND S.so_id = instance.so_id)
+    JOIN volume USING(vol_id) WHERE volume.available = 1
+  ) AS Z
+JOIN instance ON (MAXins_id = instance.ins_id AND Z.so_id = instance.so_id)
+JOIN volume ON(instance.vol_id = volume.vol_id) WHERE volume.available = 1
+LIMIT $limit
+OFFSET $offset
 ");
+
     $query->execute();
 
@@ -654,4 +682,7 @@
 	my $source_host   = $obj->{vol_host};
 
+	my $second_vol_id   = $obj->{second_vol_id};
+	my $second_vol_name = $obj->{second_name};
+	my $second_vol_host = $obj->{second_host};
 
 	my $destination_vol_id = $destination{VOL}{$class_id};
@@ -664,7 +695,5 @@
 	    next;
 	}
-	if (defined($blocked_volume{$destination_host})) {
-	    next;
-	}
+	
 	$destination_uri =~ s/$source_name/$destination_name/;
 	
@@ -684,5 +713,18 @@
 	    destination_host   => $destination_host,
 	    destination_uri    => $destination_uri,
+	    second_host        => $second_vol_host,
+	    second_vol_id      => $second_vol_id,
+	    blocked_host_bool  => defined($blocked_volume{$destination_host})
         );
+
+	if ((defined($blocked_volume{$destination_host}))||
+	    ($source_vol_id == $destination_vol_id)||
+	    ($second_vol_id == $destination_vol_id)||
+	    ($source_name   eq $destination_name)||
+	    ($second_vol_name eq $destination_name)) {
+#	    print_metadata("targetFailed", \%md);
+	    next;
+	}
+
 	if ($source_vol_id != $destination_vol_id) {
 	    print_metadata("targetPending", \%md);
Index: /tags/ipp-20111110/Nebulous-Server/bin/neb-host
===================================================================
--- /tags/ipp-20111110/Nebulous-Server/bin/neb-host	(revision 32952)
+++ /tags/ipp-20111110/Nebulous-Server/bin/neb-host	(revision 32953)
@@ -18,5 +18,5 @@
 my ($host, $state, $note,
     $db, $dbhost, $dbpass, $dbuser,
-    $allocate, $available, $debug);
+    $allocate, $available, $debug,$volume);
 
 # $db     = $ENV{'NEB_DB'} unless $db;
@@ -56,5 +56,5 @@
     'dbuser=s'       => \$dbuser,
     'dbpass=s'       => \$dbpass,
-
+    'volume'         => \$volume,
     
     ) || pod2usage( 2 );
@@ -98,5 +98,10 @@
     
     my %constraint;
-    $constraint{'v.host'} = $host;
+    if (defined($volume)) {
+	$constraint{'v.name'} = $host;
+    }
+    else {
+	$constraint{'v.host'} = $host;
+    }
     my %set;
     $set{'v.allocate'} = $allocate if defined $allocate;
