Module: ActiveFedora::Sharding::ClassMethods
- Defined in:
- lib/active_fedora/sharding.rb
Instance Method Summary collapse
-
#assign_pid(obj) ⇒ String
if you are doing sharding, override this method to do something other than use a sequence.
-
#connection_for_pid(pid) ⇒ Rubydora::Repository
Uses #shard_index to find or create the rubydora connection for this pid.
-
#shard_index(pid) ⇒ Integer
This is where your sharding strategy is implemented – it’s how we figure out which shard an object will be (or was) written to.
Instance Method Details
#assign_pid(obj) ⇒ String
if you are doing sharding, override this method to do something other than use a sequence
43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/active_fedora/sharding.rb', line 43 def assign_pid(obj) args = {} args[:namespace] = obj.namespace if obj.namespace # TODO: This juggling of Fedora credentials & establishing connections should be handled by # an establish_fedora_connection method,possibly wrap it all into a fedora_connection method - MZ 06-05-2012 if ActiveFedora.config.sharded? credentials = ActiveFedora.config.credentials[0] else credentials = ActiveFedora.config.credentials end fedora_connection[0] ||= ActiveFedora::RubydoraConnection.new(credentials) fedora_connection[0].connection.mint(args) end |
#connection_for_pid(pid) ⇒ Rubydora::Repository
Uses #shard_index to find or create the rubydora connection for this pid
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/active_fedora/sharding.rb', line 14 def connection_for_pid(pid) idx = shard_index(pid) unless fedora_connection.has_key? idx if ActiveFedora.config.sharded? fedora_connection[idx] = RubydoraConnection.new(ActiveFedora.config.credentials[idx]) else fedora_connection[idx] = RubydoraConnection.new(ActiveFedora.config.credentials) end end fedora_connection[idx].connection end |
#shard_index(pid) ⇒ Integer
This is where your sharding strategy is implemented – it’s how we figure out which shard an object will be (or was) written to. Given a pid, it decides which shard that pid will be written to (and thus retrieved from). For a given pid, as long as your shard configuration remains the same it will always return the same value. If you’re not using sharding, this will always return 0, meaning use the first/only Fedora Repository in your configuration. Default strategy runs a modulo of the md5 of the pid against the number of shards. If you want to use a different sharding strategy, override this method. Make sure that it will always return the same value for a given pid and shard configuration.
33 34 35 36 37 38 39 |
# File 'lib/active_fedora/sharding.rb', line 33 def shard_index(pid) if ActiveFedora.config.sharded? Digest::MD5.hexdigest(pid).hex % ActiveFedora.config.credentials.length else 0 end end |