\
\
\
diff --git a/src/tm_mad/nfs/tm_clone.sh b/src/tm_mad/shared/tm_clone.sh
similarity index 100%
rename from src/tm_mad/nfs/tm_clone.sh
rename to src/tm_mad/shared/tm_clone.sh
diff --git a/src/tm_mad/nfs/tm_context.sh b/src/tm_mad/shared/tm_context.sh
similarity index 100%
rename from src/tm_mad/nfs/tm_context.sh
rename to src/tm_mad/shared/tm_context.sh
diff --git a/src/tm_mad/nfs/tm_delete.sh b/src/tm_mad/shared/tm_delete.sh
similarity index 100%
rename from src/tm_mad/nfs/tm_delete.sh
rename to src/tm_mad/shared/tm_delete.sh
diff --git a/src/tm_mad/nfs/tm_ln.sh b/src/tm_mad/shared/tm_ln.sh
similarity index 100%
rename from src/tm_mad/nfs/tm_ln.sh
rename to src/tm_mad/shared/tm_ln.sh
diff --git a/src/tm_mad/nfs/tm_mkimage.sh b/src/tm_mad/shared/tm_mkimage.sh
similarity index 100%
rename from src/tm_mad/nfs/tm_mkimage.sh
rename to src/tm_mad/shared/tm_mkimage.sh
diff --git a/src/tm_mad/nfs/tm_mkswap.sh b/src/tm_mad/shared/tm_mkswap.sh
similarity index 100%
rename from src/tm_mad/nfs/tm_mkswap.sh
rename to src/tm_mad/shared/tm_mkswap.sh
diff --git a/src/tm_mad/nfs/tm_mv.sh b/src/tm_mad/shared/tm_mv.sh
similarity index 100%
rename from src/tm_mad/nfs/tm_mv.sh
rename to src/tm_mad/shared/tm_mv.sh
diff --git a/src/tm_mad/nfs/tm_nfs.conf b/src/tm_mad/shared/tm_shared.conf
similarity index 85%
rename from src/tm_mad/nfs/tm_nfs.conf
rename to src/tm_mad/shared/tm_shared.conf
index bb980d7e48..1e09c41cff 100644
--- a/src/tm_mad/nfs/tm_nfs.conf
+++ b/src/tm_mad/shared/tm_shared.conf
@@ -14,10 +14,10 @@
# limitations under the License. #
#--------------------------------------------------------------------------- #
-CLONE = nfs/tm_clone.sh
-LN = nfs/tm_ln.sh
-MKSWAP = nfs/tm_mkswap.sh
-MKIMAGE = nfs/tm_mkimage.sh
-DELETE = nfs/tm_delete.sh
-MV = nfs/tm_mv.sh
-CONTEXT = nfs/tm_context.sh
+CLONE = shared/tm_clone.sh
+LN = shared/tm_ln.sh
+MKSWAP = shared/tm_mkswap.sh
+MKIMAGE = shared/tm_mkimage.sh
+DELETE = shared/tm_delete.sh
+MV = shared/tm_mv.sh
+CONTEXT = shared/tm_context.sh
diff --git a/src/tm_mad/nfs/tm_nfsrc b/src/tm_mad/shared/tm_sharedrc
similarity index 100%
rename from src/tm_mad/nfs/tm_nfsrc
rename to src/tm_mad/shared/tm_sharedrc
diff --git a/src/vm/VirtualMachine.cc b/src/vm/VirtualMachine.cc
index 99a082ca9c..b7dbc1b66a 100644
--- a/src/vm/VirtualMachine.cc
+++ b/src/vm/VirtualMachine.cc
@@ -220,7 +220,7 @@ int VirtualMachine::insert(SqlDB * db, string& error_str)
if ( rc != 0 )
{
- goto error_leases;
+ goto error_leases_rollback;
}
// ------------------------------------------------------------------------
@@ -231,7 +231,9 @@ int VirtualMachine::insert(SqlDB * db, string& error_str)
if ( rc != 0 )
{
- goto error_images;
+ // The get_disk_images method has an internal rollback for
+ // the acquired images, release_disk_images() would release all disks
+ goto error_leases_rollback;
}
// -------------------------------------------------------------------------
@@ -269,26 +271,24 @@ int VirtualMachine::insert(SqlDB * db, string& error_str)
error_update:
error_str = "Can not insert VM in the database.";
- goto error_common;
-
-error_leases:
- NebulaLog::log("ONE",Log::ERROR, error_str);
- release_network_leases();
- return -1;
-
-error_images:
- goto error_common;
+ goto error_rollback;
error_context:
- goto error_common;
+ goto error_rollback;
error_requirements:
- goto error_common;
+ goto error_rollback;
+
+error_rollback:
+ release_disk_images();
+
+error_leases_rollback:
+ release_network_leases();
+ goto error_common; // just to avoid compilation warnings
error_common:
NebulaLog::log("ONE",Log::ERROR, error_str);
- release_network_leases();
- release_disk_images();
+
return -1;
}
@@ -663,11 +663,13 @@ int VirtualMachine::get_disk_images(string& error_str)
vector
disks;
ImagePool * ipool;
VectorAttribute * disk;
+ vector acquired_images;
int n_os = 0; // Number of OS images
int n_cd = 0; // Number of CDROMS
int n_db = 0; // Number of DATABLOCKS
string type;
+ int image_id;
ostringstream oss;
Image::ImageType img_type;
@@ -686,10 +688,12 @@ int VirtualMachine::get_disk_images(string& error_str)
continue;
}
- rc = ipool->disk_attribute(disk, i, &index, &img_type, uid);
+ rc = ipool->disk_attribute(disk, i, &index, &img_type, uid, image_id);
if (rc == 0 )
{
+ acquired_images.push_back(image_id);
+
switch(img_type)
{
case Image::OS:
@@ -728,6 +732,10 @@ int VirtualMachine::get_disk_images(string& error_str)
{
goto error_name;
}
+ else if ( rc != -2 ) // The only known code left
+ {
+ goto error_unknown;
+ }
}
return 0;
@@ -750,8 +758,23 @@ error_image:
error_name:
error_str = "IMAGE is not supported for DISK. Use IMAGE_ID instead.";
+ goto error_common;
+
+error_unknown:
+ error_str = "Unknown error code.";
error_common:
+ ImageManager * imagem = nd.get_imagem();
+
+ vector::iterator it;
+
+ for ( it=acquired_images.begin() ; it < acquired_images.end(); it++ )
+ {
+ // Set disk_path and save_id to empty string, this way the image manager
+ // won't try to move any files
+ imagem->release_image(*it,"",-1,"");
+ }
+
return -1;
}
diff --git a/src/vmm_mad/remotes/kvm/migrate_local b/src/vmm_mad/remotes/kvm/migrate_local
old mode 100644
new mode 100755
diff --git a/src/vmm_mad/remotes/kvm/poll b/src/vmm_mad/remotes/kvm/poll
new file mode 120000
index 0000000000..fb5e9b8f73
--- /dev/null
+++ b/src/vmm_mad/remotes/kvm/poll
@@ -0,0 +1 @@
+../poll_xen_kvm.rb
\ No newline at end of file
diff --git a/src/vmm_mad/remotes/kvm/poll_ganglia b/src/vmm_mad/remotes/kvm/poll_ganglia
new file mode 120000
index 0000000000..ca1f0231c9
--- /dev/null
+++ b/src/vmm_mad/remotes/kvm/poll_ganglia
@@ -0,0 +1 @@
+../poll_ganglia.rb
\ No newline at end of file
diff --git a/src/vmm_mad/remotes/xen/poll b/src/vmm_mad/remotes/xen/poll
new file mode 120000
index 0000000000..fb5e9b8f73
--- /dev/null
+++ b/src/vmm_mad/remotes/xen/poll
@@ -0,0 +1 @@
+../poll_xen_kvm.rb
\ No newline at end of file
diff --git a/src/vmm_mad/remotes/xen/poll_ganglia b/src/vmm_mad/remotes/xen/poll_ganglia
new file mode 120000
index 0000000000..ca1f0231c9
--- /dev/null
+++ b/src/vmm_mad/remotes/xen/poll_ganglia
@@ -0,0 +1 @@
+../poll_ganglia.rb
\ No newline at end of file
diff --git a/src/vnm_mad/test/output/onevm_show b/src/vnm_mad/test/output/onevm_show
index a64d22fa1b..ec56cbf225 100644
--- a/src/vnm_mad/test/output/onevm_show
+++ b/src/vnm_mad/test/output/onevm_show
@@ -62,7 +62,7 @@
1304502543
0
vmm_kvm
- tm_nfs
+ tm_shared
1304502543
1304502544
1304502544
diff --git a/src/xml/test/ObjectXMLTest.cc b/src/xml/test/ObjectXMLTest.cc
index fd538203d3..977189c35b 100644
--- a/src/xml/test/ObjectXMLTest.cc
+++ b/src/xml/test/ObjectXMLTest.cc
@@ -434,7 +434,7 @@ const string ObjectXMLTest::host =
"2"
"im_kvm"
"vmm_kvm"
- "tm_nfs"
+ "tm_shared"
"1273799044"
"cluster A"
""