You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2013/01/21 10:52:12 UTC

[5/8] git commit: CIMI: Replaced DataMapper with Sequel ORM

CIMI: Replaced DataMapper with Sequel ORM


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/6206bf6f
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/6206bf6f
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/6206bf6f

Branch: refs/heads/master
Commit: 6206bf6f1b86f7fa7e3c4ff316b8b833b7674248
Parents: 5dd5626
Author: Michal Fojtik <mf...@redhat.com>
Authored: Tue Jan 15 15:56:33 2013 +0100
Committer: Michal fojtik <mf...@redhat.com>
Committed: Mon Jan 21 10:51:52 2013 +0100

----------------------------------------------------------------------
 server/deltacloud-core.gemspec             |    5 +-
 server/lib/cimi/helpers/database_helper.rb |   19 ++++--
 server/lib/db.rb                           |   81 ++++++++++++++++++-----
 3 files changed, 80 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/6206bf6f/server/deltacloud-core.gemspec
----------------------------------------------------------------------
diff --git a/server/deltacloud-core.gemspec b/server/deltacloud-core.gemspec
index 7fad5be..977cc26 100644
--- a/server/deltacloud-core.gemspec
+++ b/server/deltacloud-core.gemspec
@@ -78,9 +78,8 @@ Gem::Specification.new do |s|
   s.add_dependency('nokogiri', '>= 1.4.3')
   s.add_dependency('require_relative') if RUBY_VERSION < '1.9'
 
-  s.add_dependency('data_mapper')
-  s.add_dependency('dm-sqlite-adapter')
-  s.add_dependency('dm-timestamps')
+  s.add_dependency('sequel', '<= 3.42.0')
+  s.add_dependency('sqlite3')
 
   # dependencies for various cloud providers:
 

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/6206bf6f/server/lib/cimi/helpers/database_helper.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/helpers/database_helper.rb b/server/lib/cimi/helpers/database_helper.rb
index ac6ae4f..d432f69 100644
--- a/server/lib/cimi/helpers/database_helper.rb
+++ b/server/lib/cimi/helpers/database_helper.rb
@@ -27,11 +27,14 @@ module Deltacloud
       def delete_attributes_for(model)
         return if test_environment?
         entity = get_entity(model)
-        !entity.nil? && entity.destroy!
+        !entity.nil? && entity.destroy
       end
 
       def get_entity(model)
-        Deltacloud::Database::Entity.first(:be_kind => model.to_entity, :be_id => model.id, 'provider.driver' => driver_symbol.to_s, 'provider.url' => current_provider)
+        current_db.entities_dataset.first(
+          :be_kind => model.to_entity,
+          :be_id => model.id,
+        )
       end
 
       def current_provider
@@ -43,23 +46,29 @@ module Deltacloud
       #
 
       def current_db
-        Deltacloud::Database::Provider.first_or_create(:driver => driver_symbol.to_s, :url => current_provider)
+        Deltacloud::Database::Provider.find_or_create(:driver => driver_symbol.to_s, :url => current_provider)
       end
 
       def store_attributes_for(model, attrs={})
         return if test_environment? or model.nil? or attrs.empty?
         return if model.id.nil?
-        entity = get_entity(model) || current_db.entities.new(:be_kind => model.to_entity, :be_id => model.id)
+
+        unless entity = get_entity(model)
+          entity = Deltacloud::Database::Entity.new(:provider_id => current_db.id)
+        end
 
         entity.description = extract_attribute_value('description', attrs) if attrs.has_key? 'description'
         entity.name = extract_attribute_value('name', attrs) if attrs.has_key? 'name'
+
         if attrs.has_key? 'properties'
           entity.ent_properties = extract_attribute_value('properties', attrs).to_json
         elsif attrs.has_key? 'property'
           entity.ent_properties = extract_attribute_value('property', attrs).to_json
         end
 
-        entity.save && entity
+        entity.exists? ? entity.save_changes : entity.save
+
+        entity
       end
 
       # In XML serialization the values stored in attrs are arrays, dues to

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/6206bf6f/server/lib/db.rb
----------------------------------------------------------------------
diff --git a/server/lib/db.rb b/server/lib/db.rb
index 567b356..64cc283 100644
--- a/server/lib/db.rb
+++ b/server/lib/db.rb
@@ -4,27 +4,74 @@ module Deltacloud
     ENV['RACK_ENV'] == 'test' || ENV['DELTACLOUD_NO_DATABASE']
   end
 
-  unless test_environment?
-    require 'data_mapper'
-    require_relative './db/provider'
-    require_relative './db/entity'
-    require_relative './db/machine_template'
-    require_relative './db/address_template'
-    require_relative './db/volume_configuration'
-    require_relative './db/volume_template'
-  end
+  require 'sequel' unless test_environment?
+  require 'logger'
+
+  DATABASE_LOCATION = ENV['DATABASE_LOCATION'] ||
+    'sqlite://'+File.join('/', 'var', 'tmp', "deltacloud-mock-#{ENV['USER']}", 'db.sqlite')
 
-  DATABASE_LOCATION = ENV['DATABASE_LOCATION'] || File.join('/', 'var', 'tmp', "deltacloud-mock-#{ENV['USER']}", 'db.sqlite')
+  def self.database(opts={})
+    opts[:logger] = ::Logger.new($stdout) if ENV['API_VERBOSE']
+    @db ||=  Sequel.connect(DATABASE_LOCATION, opts)
+  end
 
   def self.initialize_database
-    DataMapper::Logger.new($stdout, :debug) if ENV['API_VERBOSE']
-    dbdir = File::dirname(DATABASE_LOCATION)
-    FileUtils::mkdir(dbdir) unless File::directory?(dbdir)
-    DataMapper::setup(:default, "sqlite://#{DATABASE_LOCATION}")
-    DataMapper::finalize
-    DataMapper::auto_upgrade!
+
+    database.create_table?(:providers) {
+      primary_key :id
+
+      column :driver, :string, { :null => false }
+      column :url, :string
+      index [ :url, :driver ]
+    }
+
+    database.create_table?(:entities) {
+      primary_key :id
+      foreign_key :provider_id, :providers, { :index => true, :null => false }
+      column :created_at, :timestamp
+
+      # Base
+      column :model, :string, { :index => true, :null => false, :default => 'entity' }
+
+      # Map Entity to Deltacloud model
+      # (like: Machine => Instance)
+      column :be_kind, :string
+      column :be_id, :string
+
+      # Entity
+      column :name, :string
+      column :description, :string
+      column :ent_properties, :string, { :text => true }
+
+
+      column :machine_config, :string
+      column :machine_image, :string
+
+      column :network, :string
+      column :ip, :string
+      column :hostname, :string
+      column :allocation, :string
+      column :default_gateway, :string
+      column :dns, :string
+      column :protocol, :string
+      column :mask, :string
+
+      column :format, :string
+      column :capacity, :string
+
+      column :volume_config, :string
+      column :volume_image, :string
+    }
   end
 
 end
 
-Deltacloud::initialize_database unless Deltacloud.test_environment?
+unless Deltacloud.test_environment?
+  Deltacloud::initialize_database
+  require_relative './db/provider'
+  require_relative './db/entity'
+  require_relative './db/machine_template'
+  require_relative './db/address_template'
+  require_relative './db/volume_configuration'
+  require_relative './db/volume_template'
+end