class OpenShift::MongoDataStore

Constants

CON_RETRY_WAIT_TM
MAX_CON_RETRIES

Attributes

collections[R]
db[R]
host_port[R]
password[R]
replica_set[R]
user[R]

Public Class Methods

instance() click to toggle source
# File lib/openshift/mongo_data_store.rb, line 28
def self.instance
  OpenShift::MongoDataStore.new
end
new(access_info = nil) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 12
def initialize(access_info = nil)
  if access_info != nil
    # no-op
  elsif defined? Rails
    access_info = Rails.application.config.datastore
  else
    raise Exception.new("Mongo DataStore service is not initialized")
  end
  @replica_set = access_info[:replica_set]
  @host_port = access_info[:host_port]
  @user = access_info[:user]
  @password = access_info[:password]
  @db = access_info[:db]
  @collections = access_info[:collections]
end
rescue_con_failure(max_retries=MAX_CON_RETRIES, retry_wait_tm=CON_RETRY_WAIT_TM) { || ... } click to toggle source

Ensure retry upon connection failure

# File lib/openshift/mongo_data_store.rb, line 222
def self.rescue_con_failure(max_retries=MAX_CON_RETRIES, retry_wait_tm=CON_RETRY_WAIT_TM)
  retries = 0
  begin
    yield
  rescue Mongo::ConnectionFailure => ex
    retries += 1
    raise ex if retries > max_retries
    sleep(retry_wait_tm)
    retry
  end
end

Public Instance Methods

activate_district_node(uuid, server_identity) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 307
def activate_district_node(uuid, server_identity)
  Rails.logger.debug "activate_district_node(#{uuid},#{server_identity})\n\n"
  update( district_collection, {"_id" => uuid, "server_identities" => {"$elemMatch" => {"name" => server_identity, "active" => false}}}, {"$set" => { "server_identities.$.active" => true}, "$inc" => { "active_server_identities_size" => 1 }} )
end
add_district_node(uuid, server_identity) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 289
def add_district_node(uuid, server_identity)
  Rails.logger.debug "add_district_node(#{uuid},#{server_identity})\n\n"
  update( district_collection, {"_id" => uuid, "server_identities.name" => { "$ne" => server_identity }}, {"$push" => { "server_identities" => {"name" => server_identity, "active" => true}}, "$inc" => { "active_server_identities_size" => 1 }} )
end
add_district_uids(uuid, uids) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 312
def add_district_uids(uuid, uids)
  Rails.logger.debug "add_district_capacity(#{uuid},#{uids})\n\n"
  update( district_collection, {"_id" => uuid}, {"$pushAll" => { "available_uids" => uids }, "$inc" => { "available_capacity" => uids.length, "max_uid" => uids.length, "max_capacity" => uids.length }} )
end
create(obj_type, user_id, id, obj_attrs) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 134
def create(obj_type, user_id, id, obj_attrs)
  Rails.logger.debug "MongoDataStore.create(#{obj_type}, #{user_id}, #{id}, #hidden)\n\n"      
  case obj_type
  when "CloudUser"
    add_user(user_id, obj_attrs)
  when "Application"
    add_app(user_id, id, obj_attrs)
  when "Domain"
    add_domain(user_id, id, obj_attrs)
  when "ApplicationTemplate"
    save_application_template(id, obj_attrs)
  end
end
deactivate_district_node(uuid, server_identity) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 302
def deactivate_district_node(uuid, server_identity)
  Rails.logger.debug "deactivate_district_node(#{uuid},#{server_identity})\n\n"
  update( district_collection, {"_id" => uuid, "server_identities" => {"$elemMatch" => {"name" => server_identity, "active" => true}}}, {"$set" => { "server_identities.$.active" => false}, "$inc" => { "active_server_identities_size" => -1 }} )
end
delete(obj_type, user_id, id=nil) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 148
def delete(obj_type, user_id, id=nil)
  Rails.logger.debug "MongoDataStore.delete(#{obj_type}, #{user_id}, #{id})\n\n"
  case obj_type
  when "CloudUser"
    delete_user(user_id)
  when "Application"
    delete_app(user_id, id)
  when "Domain"
    delete_domain(user_id, id)
  when "ApplicationTemplate"
    delete_application_template(id)
  when "UsageRecord"
    delete_usage_record(user_id, id)
  end
end
delete_district(uuid) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 270
def delete_district(uuid)
  Rails.logger.debug "delete_district(#{uuid})\n\n"
  remove( district_collection, { "_id" => uuid, "active_server_identities_size" => 0 } )
end
delete_usage_record_by_gear_uuid(user_id, gear_uuid, usage_type) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 164
def delete_usage_record_by_gear_uuid(user_id, gear_uuid, usage_type)
  Rails.logger.debug "MongoDataStore.delete_usage_record_by_gear_uuid(#{user_id}, #{gear_uuid}, #{usage_type})\n\n"
  update( user_collection, { "_id" => user_id },
                           { "$pull" => { "usage_records" => {"gear_uuid" => gear_uuid, "usage_type" => usage_type}}} )
end
delete_usage_records_by_uuids(user_id, uuids) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 170
def delete_usage_records_by_uuids(user_id, uuids)
  Rails.logger.debug "MongoDataStore.delete_usage_record_by_gear_uuid(#{user_id}, #{uuids})\n\n"
  update( user_collection, { "_id" => user_id },
                           { "$pull" => { "usage_records" => {"uuid" => {"$in" => uuids}} }} )
end
find(obj_type, user_id, id) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 32
def find(obj_type, user_id, id)
  Rails.logger.debug "MongoDataStore.find(#{obj_type}, #{user_id}, #{id})\n\n"
  case obj_type
  when "CloudUser"
    get_user(user_id)
  when "Application"
    get_app(user_id, id)
  when "Domain"
    get_domain(user_id, id)
  when "ApplicationTemplate"
    find_application_template(id)
  end
end
find_all(obj_type, user_id=nil, opts=nil, &block) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 46
def find_all(obj_type, user_id=nil, opts=nil, &block)
  Rails.logger.debug "MongoDataStore.find_all(#{obj_type}, #{user_id}, #{opts})\n\n"
  case obj_type
  when "CloudUser"
    get_users(opts, &block)
  when "Application"
    get_apps(user_id, &block)
  when "Domain"
    get_domains(user_id, &block)
  when "ApplicationTemplate"
    if opts.nil? || opts.empty?
      find_all_application_templates(&block)
    else
      find_application_template_by_tag(opts[:tag], &block)
    end
  end
end
find_all_districts() click to toggle source
# File lib/openshift/mongo_data_store.rb, line 246
def find_all_districts()
  Rails.logger.debug "find_all_districts()\n\n"
  MongoDataStore.rescue_con_failure do
    mcursor = district_collection.find()
    cursor_to_district_hash(mcursor)
  end
end
find_all_logins(opts) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 64
def find_all_logins(opts)
  Rails.logger.debug "MongoDataStore.find_all_logins()\n\n"
  query = {}
  if opts
    if opts[:with_gears]
      query["apps.group_instances.gears.0"] = {"$exists" => true}
    end
    if opts[:with_usage]
      query["usage_records.0"] = {"$exists" => true}
    end
    if opts[:with_plan]
      query["$or"] = [{"pending_plan_id" => {"$ne" => nil}}, {"plan_id" => {"$ne" => nil}}]
    end
  end
  mcursor = user_collection.find(query, {:fields => []})
  ret = []
  mcursor.each do |hash|
    ret.push(hash['_id'])
  end
  ret
end
find_and_modify(collection, *args) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 197
def find_and_modify(collection, *args)
  MongoDataStore.rescue_con_failure do
    collection.find_and_modify(*args)
  end
end
find_available_district(node_profile=nil) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 327
def find_available_district(node_profile=nil)
  node_profile = node_profile ? node_profile : "small"
  MongoDataStore.rescue_con_failure do
    hash = district_collection.find(
      { "available_capacity" => { "$gt" => 0 }, 
        "active_server_identities_size" => { "$gt" => 0 },
        "node_profile" => node_profile}).sort(["available_capacity", "descending"]).limit(1).next
    hash_to_district_ret(hash)
  end
end
find_by_gear_uuid(gear_uuid) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 86
def find_by_gear_uuid(gear_uuid)
  Rails.logger.debug "MongoDataStore.find_by_gear_uuid(#{gear_uuid})\n\n"
  hash = find_one( user_collection, { "apps.group_instances.gears.uuid" => gear_uuid } )
  return nil unless hash
  user_hash_to_ret(hash)
end
find_by_uuid(obj_type_of_uuid, uuid) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 93
def find_by_uuid(obj_type_of_uuid, uuid)
  Rails.logger.debug "MongoDataStore.find_by_uuid(#{obj_type_of_uuid}, #{uuid})\n\n"
  case obj_type_of_uuid
  when "CloudUser"
    get_user_by_uuid(uuid)
  when "Application"
    get_user_by_app_uuid(uuid)
  when "Domain"
    get_user_by_domain_uuid(uuid)
  when "ApplicationTemplate"
    find_application_template(uuid)
  end
end
find_district(uuid) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 234
def find_district(uuid)
  Rails.logger.debug "MongoDataStore.find_district(#{uuid})\n\n"
  hash = find_one( district_collection, "_id" => uuid )
  hash_to_district_ret(hash)
end
find_district_by_name(name) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 240
def find_district_by_name(name)
  Rails.logger.debug "MongoDataStore.find_district_by_name(#{name})\n\n"
  hash = find_one( district_collection, "name" => name )
  hash_to_district_ret(hash)
end
find_district_with_node(server_identity) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 254
def find_district_with_node(server_identity)
  Rails.logger.debug "find_district_with_node(#{server_identity})\n\n"
  hash = find_one( district_collection, {"server_identities.name" => server_identity } )
  hash_to_district_ret(hash)
end
find_one(collection, *args) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 191
def find_one(collection, *args)
  MongoDataStore.rescue_con_failure do
    collection.find_one(*args)
  end
end
find_subaccounts_by_parent_login(parent_id) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 107
def find_subaccounts_by_parent_login(parent_id)
  Rails.logger.debug "MongoDataStore.find_subaccounts_by_parent_login(#{parent_id})\n\n"
  cur = MongoDataStore.rescue_con_failure { user_collection.find({ "parent_user_login" => parent_id }) }
  return [] unless cur
  hash_list = []
  cur.each do |hash|
    hash.delete("_id")
    hash_list << hash
  end

  hash_list
end
inc_district_externally_reserved_uids_size(uuid) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 322
def inc_district_externally_reserved_uids_size(uuid)
  Rails.logger.debug "inc_district_externally_reserved_uids_size(#{uuid})\n\n"
  update( district_collection, {"_id" => uuid}, {"$inc" => { "externally_reserved_uids_size" => 1 }} )
end
insert(collection, *args) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 203
def insert(collection, *args)
  MongoDataStore.rescue_con_failure do
    collection.insert(*args)
  end
end
remove(collection, *args) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 215
def remove(collection, *args)
  MongoDataStore.rescue_con_failure do
    collection.remove(*args)
  end
end
remove_district_node(uuid, server_identity) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 294
def remove_district_node(uuid, server_identity)
  Rails.logger.debug "remove_district_node(#{uuid},#{server_identity})\n\n"
  hash = find_and_modify( district_collection, {
    :query => { "_id" => uuid, "server_identities" => {"$elemMatch" => {"name" => server_identity, "active" => false}}}, 
    :update => { "$pull" => { "server_identities" => {"name" => server_identity }}} })
  return hash != nil
end
remove_district_uids(uuid, uids) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 317
def remove_district_uids(uuid, uids)
  Rails.logger.debug "remove_district_capacity(#{uuid},#{uids})\n\n"
  update( district_collection, {"_id" => uuid, "available_uids" => uids[0]}, {"$pullAll" => { "available_uids" => uids }, "$inc" => { "available_capacity" => -uids.length, "max_uid" => -uids.length, "max_capacity" => -uids.length }} )
end
reserve_district_uid(uuid) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 275
def reserve_district_uid(uuid)
  Rails.logger.debug "reserve_district_uid(#{uuid})\n\n"
  hash = find_and_modify( district_collection, {
    :query => {"_id" => uuid, "available_capacity" => {"$gt" => 0}},
    :update => {"$pop" => { "available_uids" => -1}, "$inc" => { "available_capacity" => -1 }},
    :new => false })
  return hash ? hash["available_uids"][0] : nil
end
save(obj_type, user_id, id, obj_attrs) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 120
def save(obj_type, user_id, id, obj_attrs)
  Rails.logger.debug "MongoDataStore.save(#{obj_type}, #{user_id}, #{id}, #hidden)\n\n"
  case obj_type
  when "CloudUser"
    put_user(user_id, obj_attrs)
  when "Application"
    put_app(user_id, id, obj_attrs)
  when "Domain"
    put_domain(user_id, id, obj_attrs)
  when "UsageRecord"
    put_usage_record(user_id, id, obj_attrs)
  end
end
save_district(uuid, district_attrs) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 260
def save_district(uuid, district_attrs)
  Rails.logger.debug "save_district(#{uuid}, #{district_attrs.pretty_inspect})\n\n"
  district_attrs["_id"] = uuid
  orig_server_identities = district_attrs["server_identities"] 
  district_attrs_to_internal(district_attrs)
  update( district_collection, { "_id" => uuid }, district_attrs, { :upsert => true } )
  district_attrs.delete("_id")
  district_attrs["server_identities"] = orig_server_identities
end
unreserve_district_uid(uuid, uid) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 284
def unreserve_district_uid(uuid, uid)
  Rails.logger.debug "unreserve_district_uid(#{uuid})\n\n"
  update( district_collection, {"_id" => uuid, "available_uids" => {"$ne" => uid}}, {"$push" => { "available_uids" => uid}, "$inc" => { "available_capacity" => 1 }} )
end
update(collection, *args) click to toggle source
# File lib/openshift/mongo_data_store.rb, line 209
def update(collection, *args)
  MongoDataStore.rescue_con_failure do
    collection.update(*args)
  end
end
user_collection() click to toggle source
# File lib/openshift/mongo_data_store.rb, line 187
def user_collection
  db.collection(@collections[:user])
end