Hello

According to the posting "Re: [one-users] Opennebula 2.2.1 Failed to create database tables" [1] from Max Hennig, I prepared the attached patches (for 2.2.x and 2.9.90), which solve to problem with the first start of oned when the database will be initialized.

[1] http://lists.opennebula.org/pipermail/users-opennebula.org/2011-August/006260.html

As far as I had the problem with the first start of oned, it could not create the tables, when in my.cnf the setting "default_storage_engine = InnoDB" is present. After removing it (and restarting MySQL), it was working, as MySQL then is using the default MyISAM storage engine. But there are reasons for using the InnoDB storage engine as default in MySQL. So it would be helpful to OpenNebula if this is also working.

The attached patches only change all the "VARCHAR(256)" to "VARCHAR(255)". I did test the patch with OpenNebula 2.2.1 (MySQL with InnoDB) and it is working fine so far. But I guess this should also work with 2.9.90. It would probably help if somebody could test this with 2.9.90 and then do this changes in the source repository before the next RC or final build for 3.0.

I do not know, if it is a good idea or not to have the upgrade script also do this modifications on an already running MySQL database. To do this, the three 'alter table ... VARCHAR(255);' commands from below would be needed (for an existing 2.2.1 database). But reducing the field length could cause some problems if it is filled to the limit. I even do not know, if oned or the one* commands do check the field length before entering data into the database. If yes, then this should also be adjusted there in the source code.

To convert an already running MySQL opennebula database from MyISAM to InnoDB, I did the following steps (with OpenNebula 2.2.1). It is probably a good idea to stop OpenNebula during this modifications. Then first create a backup with:
mysqldump -u root -p opennebula > opennebula.mysql

And then convert the tables with the mysql client:
mysql -u root -p
mysql> use opennebula
mysql> alter table host_pool modify host_name VARCHAR(255);
mysql> alter table network_pool modify name VARCHAR(255);
mysql> alter table user_pool modify user_name VARCHAR(255);
mysql> alter table cluster_pool ENGINE=InnoDB;
mysql> alter table history ENGINE=InnoDB;
mysql> alter table host_pool ENGINE=InnoDB;
mysql> alter table host_shares ENGINE=InnoDB;
mysql> alter table image_pool ENGINE=InnoDB;
mysql> alter table leases ENGINE=InnoDB;
mysql> alter table network_pool ENGINE=InnoDB;
mysql> alter table user_pool ENGINE=InnoDB;
mysql> alter table vm_pool ENGINE=InnoDB;

To check the current properties of a table the following MySQL command can be used:
mysql> show create table <table_name>;


bye
Fabian
--- a/src/host/Host.cc  2011-06-08 15:15:46.000000000 +0200
+++ b/src/host/Host.cc  2011-09-28 15:42:11.000000000 +0200
@@ -56,7 +56,7 @@
                               "tm_mad,last_mon_time, cluster, template";
 
 const char * Host::db_bootstrap = "CREATE TABLE IF NOT EXISTS host_pool ("
-    "oid INTEGER PRIMARY KEY,host_name VARCHAR(256), state INTEGER,"
+    "oid INTEGER PRIMARY KEY,host_name VARCHAR(255), state INTEGER,"
     "im_mad VARCHAR(128),vm_mad VARCHAR(128),tm_mad VARCHAR(128),"
     "last_mon_time INTEGER, cluster VARCHAR(128), template TEXT, "
     "UNIQUE(host_name))";
--- a/src/um/User.cc    2011-06-08 15:15:46.000000000 +0200
+++ b/src/um/User.cc    2011-09-28 15:42:25.000000000 +0200
@@ -53,7 +53,7 @@
 const char * User::db_names = "oid,user_name,password,enabled";
 
 const char * User::db_bootstrap = "CREATE TABLE IF NOT EXISTS user_pool ("
-    "oid INTEGER PRIMARY KEY, user_name VARCHAR(256), password TEXT,"
+    "oid INTEGER PRIMARY KEY, user_name VARCHAR(255), password TEXT,"
     "enabled INTEGER, UNIQUE(user_name))";
 
 /* -------------------------------------------------------------------------- 
*/
--- a/src/vnm/VirtualNetwork.cc 2011-06-08 15:15:46.000000000 +0200
+++ b/src/vnm/VirtualNetwork.cc 2011-09-28 15:42:39.000000000 +0200
@@ -78,7 +78,7 @@
 
 const char * VirtualNetwork::db_bootstrap = "CREATE TABLE IF NOT EXISTS"
     " network_pool ("
-     "oid INTEGER PRIMARY KEY, uid INTEGER, name VARCHAR(256), type INTEGER, "
+     "oid INTEGER PRIMARY KEY, uid INTEGER, name VARCHAR(255), type INTEGER, "
      "bridge TEXT, public INTEGER, template TEXT, UNIQUE(name))";
 
 /* -------------------------------------------------------------------------- 
*/
--- a/src/group/Group.cc        2011-09-23 16:56:55.000000000 +0200
+++ b/src/group/Group.cc        2011-09-28 17:27:03.000000000 +0200
@@ -27,7 +27,7 @@
 const char * Group::db_names = "oid, name, body";
 
 const char * Group::db_bootstrap = "CREATE TABLE IF NOT EXISTS group_pool ("
-    "oid INTEGER PRIMARY KEY, name VARCHAR(256), body TEXT, "
+    "oid INTEGER PRIMARY KEY, name VARCHAR(255), body TEXT, "
     "UNIQUE(name))";
 
 /* ************************************************************************ */
--- a/src/host/Host.cc  2011-09-23 16:56:55.000000000 +0200
+++ b/src/host/Host.cc  2011-09-28 17:27:03.000000000 +0200
@@ -61,7 +61,7 @@
 const char * Host::db_names = "oid, name, body, state, last_mon_time";
 
 const char * Host::db_bootstrap = "CREATE TABLE IF NOT EXISTS host_pool ("
-    "oid INTEGER PRIMARY KEY, name VARCHAR(256), body TEXT, state INTEGER, "
+    "oid INTEGER PRIMARY KEY, name VARCHAR(255), body TEXT, state INTEGER, "
     "last_mon_time INTEGER, UNIQUE(name))";
 
 /* ------------------------------------------------------------------------ */
--- a/src/image/Image.cc        2011-09-23 16:56:55.000000000 +0200
+++ b/src/image/Image.cc        2011-09-28 17:27:03.000000000 +0200
@@ -74,7 +74,7 @@
 const char * Image::db_names = "oid, name, body, uid, gid, public";
 
 const char * Image::db_bootstrap = "CREATE TABLE IF NOT EXISTS image_pool ("
-    "oid INTEGER PRIMARY KEY, name VARCHAR(256), body TEXT, uid INTEGER, "
+    "oid INTEGER PRIMARY KEY, name VARCHAR(255), body TEXT, uid INTEGER, "
     "gid INTEGER, public INTEGER, UNIQUE(name,uid) )";
 
 /* ------------------------------------------------------------------------ */
--- a/src/nebula/Nebula.cc      2011-09-23 16:56:55.000000000 +0200
+++ b/src/nebula/Nebula.cc      2011-09-28 17:27:03.000000000 +0200
@@ -643,7 +643,7 @@
 
     oss.str("");
     oss <<  "CREATE TABLE db_versioning (oid INTEGER PRIMARY KEY, "
-            "version VARCHAR(256), timestamp INTEGER, comment VARCHAR(256))";
+            "version VARCHAR(255), timestamp INTEGER, comment VARCHAR(256))";
 
     db->exec(oss);
 
--- a/src/onedb/2.0_to_2.9.80.rb        2011-09-23 16:56:55.000000000 +0200
+++ b/src/onedb/2.0_to_2.9.80.rb        2011-09-28 17:27:04.000000000 +0200
@@ -30,13 +30,13 @@
         
########################################################################
 
         # 2.2 Schema
-        # CREATE TABLE user_pool (oid INTEGER PRIMARY KEY, user_name 
VARCHAR(256), password TEXT,enabled INTEGER, UNIQUE(user_name));
+        # CREATE TABLE user_pool (oid INTEGER PRIMARY KEY, user_name 
VARCHAR(255), password TEXT,enabled INTEGER, UNIQUE(user_name));
 
         # Move table user_pool
         @db.run "ALTER TABLE user_pool RENAME TO old_user_pool;"
 
         # Create new user_pool
-        @db.run "CREATE TABLE user_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(256), body TEXT, UNIQUE(name));"
+        @db.run "CREATE TABLE user_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(255), body TEXT, UNIQUE(name));"
 
         user_group_ids = ""
 
@@ -71,14 +71,14 @@
         
########################################################################
 
         # 2.2 Schema
-        # CREATE TABLE host_pool (oid INTEGER PRIMARY KEY,host_name 
VARCHAR(256), state INTEGER,im_mad VARCHAR(128),vm_mad VARCHAR(128),tm_mad 
VARCHAR(128),last_mon_time INTEGER, cluster VARCHAR(128), template TEXT, 
UNIQUE(host_name));
+        # CREATE TABLE host_pool (oid INTEGER PRIMARY KEY,host_name 
VARCHAR(255), state INTEGER,im_mad VARCHAR(128),vm_mad VARCHAR(128),tm_mad 
VARCHAR(128),last_mon_time INTEGER, cluster VARCHAR(128), template TEXT, 
UNIQUE(host_name));
         # CREATE TABLE host_shares(hid INTEGER PRIMARY KEY,disk_usage INTEGER, 
mem_usage INTEGER, cpu_usage INTEGER,max_disk  INTEGER,  max_mem   INTEGER, 
max_cpu   INTEGER,free_disk INTEGER,  free_mem  INTEGER, free_cpu  
INTEGER,used_disk INTEGER,  used_mem  INTEGER, used_cpu  INTEGER,running_vms 
INTEGER);
 
         # Move table
         @db.run "ALTER TABLE host_pool RENAME TO old_host_pool;"
 
         # Create new table
-        @db.run "CREATE TABLE host_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(256), body TEXT, state INTEGER, last_mon_time INTEGER, UNIQUE(name));"
+        @db.run "CREATE TABLE host_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(255), body TEXT, state INTEGER, last_mon_time INTEGER, UNIQUE(name));"
 
         # Read each entry in the old table, and insert into new table
         @db.fetch("SELECT * FROM old_host_pool") do |row|
@@ -133,7 +133,7 @@
         @db.run "ALTER TABLE image_pool RENAME TO old_image_pool;"
 
         # Create new table
-        @db.run "CREATE TABLE image_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(256), body TEXT, uid INTEGER, gid INTEGER, public INTEGER, 
UNIQUE(name,uid) );"
+        @db.run "CREATE TABLE image_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(255), body TEXT, uid INTEGER, gid INTEGER, public INTEGER, 
UNIQUE(name,uid) );"
 
         # Read each entry in the old table, and insert into new table
         @db.fetch("SELECT * FROM old_image_pool") do |row|
@@ -236,7 +236,7 @@
         
########################################################################
 
         # 2.2 Schema
-        # CREATE TABLE network_pool (oid INTEGER PRIMARY KEY, uid INTEGER, 
name VARCHAR(256), type INTEGER, bridge TEXT, public INTEGER, template TEXT, 
UNIQUE(name));
+        # CREATE TABLE network_pool (oid INTEGER PRIMARY KEY, uid INTEGER, 
name VARCHAR(255), type INTEGER, bridge TEXT, public INTEGER, template TEXT, 
UNIQUE(name));
         # CREATE TABLE leases (oid INTEGER, ip BIGINT, mac_prefix BIGINT, 
mac_suffix BIGINT,vid INTEGER, used INTEGER, PRIMARY KEY(oid,ip));
 
         # Move tables
@@ -298,12 +298,12 @@
         # New tables in DB version 1
         
########################################################################
 
-        @db.run "CREATE TABLE db_versioning (oid INTEGER PRIMARY KEY, version 
VARCHAR(256), timestamp INTEGER, comment VARCHAR(256));"
-        @db.run "CREATE TABLE template_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(256), body TEXT, uid INTEGER, gid INTEGER, public INTEGER);"
+        @db.run "CREATE TABLE db_versioning (oid INTEGER PRIMARY KEY, version 
VARCHAR(255), timestamp INTEGER, comment VARCHAR(256));"
+        @db.run "CREATE TABLE template_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(255), body TEXT, uid INTEGER, gid INTEGER, public INTEGER);"
         @db.run "CREATE TABLE acl (oid INT PRIMARY KEY, user BIGINT, resource 
BIGINT, rights BIGINT);"
 
         # The group pool has two default ones
-        @db.run "CREATE TABLE group_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(256), body TEXT, UNIQUE(name));"
+        @db.run "CREATE TABLE group_pool (oid INTEGER PRIMARY KEY, name 
VARCHAR(255), body TEXT, UNIQUE(name));"
         @db.run "INSERT INTO group_pool 
VALUES(0,'oneadmin','<GROUP><ID>0</ID><NAME>oneadmin</NAME><USERS><ID>0</ID></USERS></GROUP>');"
         @db.run "INSERT INTO group_pool 
VALUES(1,'users','<GROUP><ID>1</ID><NAME>users</NAME><USERS>#{user_group_ids}</USERS></GROUP>');"
 
--- a/src/onedb/2.9.80_to_2.9.85.rb     2011-09-23 16:56:55.000000000 +0200
+++ b/src/onedb/2.9.80_to_2.9.85.rb     2011-09-28 17:27:04.000000000 +0200
@@ -30,7 +30,7 @@
         # now have a <SIZE> element
 
         # Image pool table:
-        # CREATE TABLE image_pool (oid INTEGER PRIMARY KEY, name VARCHAR(256), 
body TEXT, uid INTEGER, gid INTEGER, public INTEGER, UNIQUE(name,uid) );
+        # CREATE TABLE image_pool (oid INTEGER PRIMARY KEY, name VARCHAR(255), 
body TEXT, uid INTEGER, gid INTEGER, public INTEGER, UNIQUE(name,uid) );
 
         @db.fetch("SELECT * FROM image_pool") do |row|
             doc = Document.new(row[:body])
--- a/src/pool/test/TestPoolSQL.cc      2011-09-23 16:56:55.000000000 +0200
+++ b/src/pool/test/TestPoolSQL.cc      2011-09-28 17:27:04.000000000 +0200
@@ -35,7 +35,7 @@
 const char * TestObjectSQL::db_names = "oid,name,body,uid,number";
 
 const char * TestObjectSQL::db_bootstrap = "CREATE TABLE test_pool ("
-    "oid INTEGER PRIMARY KEY, name VARCHAR(256), body TEXT, uid INTEGER, "
+    "oid INTEGER PRIMARY KEY, name VARCHAR(255), body TEXT, uid INTEGER, "
     "number INTEGER)";
 
 /* -------------------------------------------------------------------------- 
*/
--- a/src/um/User.cc    2011-09-23 16:56:55.000000000 +0200
+++ b/src/um/User.cc    2011-09-28 17:27:05.000000000 +0200
@@ -38,7 +38,7 @@
 const char * User::db_names = "oid,name,body";
 
 const char * User::db_bootstrap = "CREATE TABLE IF NOT EXISTS user_pool ("
-    "oid INTEGER PRIMARY KEY, name VARCHAR(256), body TEXT, UNIQUE(name))";
+    "oid INTEGER PRIMARY KEY, name VARCHAR(255), body TEXT, UNIQUE(name))";
 
 /* -------------------------------------------------------------------------- 
*/
 /* -------------------------------------------------------------------------- 
*/
--- a/src/vm_template/VMTemplate.cc     2011-09-23 16:56:55.000000000 +0200
+++ b/src/vm_template/VMTemplate.cc     2011-09-28 17:27:06.000000000 +0200
@@ -63,7 +63,7 @@
 
 const char * VMTemplate::db_bootstrap =
     "CREATE TABLE IF NOT EXISTS template_pool (oid INTEGER PRIMARY KEY, "
-    "name VARCHAR(256), body TEXT, uid INTEGER, gid INTEGER, public INTEGER)";
+    "name VARCHAR(255), body TEXT, uid INTEGER, gid INTEGER, public INTEGER)";
 
 /* ------------------------------------------------------------------------ */
 /* ------------------------------------------------------------------------ */
_______________________________________________
Users mailing list
Users@lists.opennebula.org
http://lists.opennebula.org/listinfo.cgi/users-opennebula.org

Reply via email to