Class: CephRuby::RadosObject
- Inherits:
-
Object
- Object
- CephRuby::RadosObject
- Defined in:
- lib/ceph-ruby/rados_object.rb
Overview
An Object in Ceph
Direct Known Subclasses
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
-
#pool ⇒ Object
Returns the value of attribute pool.
Class Method Summary collapse
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #append(data) ⇒ Object
- #destroy ⇒ Object
- #eql?(other) ⇒ Boolean
- #exists? ⇒ Boolean (also: #exist?)
-
#initialize(pool, name) {|_self| ... } ⇒ RadosObject
constructor
A new instance of RadosObject.
-
#log(message) ⇒ Object
helper methods below.
- #mtime ⇒ Object
- #overwrite(data) ⇒ Object
- #read(offset, size) ⇒ Object
- #read_full ⇒ Object
- #resize(size) ⇒ Object
- #size ⇒ Object
- #stat ⇒ Object
- #write(offset, data) ⇒ Object
- #xattr(name = nil) ⇒ Object
- #xattr_enumerator ⇒ Object
Constructor Details
#initialize(pool, name) {|_self| ... } ⇒ RadosObject
Returns a new instance of RadosObject.
6 7 8 9 10 |
# File 'lib/ceph-ruby/rados_object.rb', line 6 def initialize(pool, name) self.pool = pool self.name = name yield(self) if block_given? end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
4 5 6 |
# File 'lib/ceph-ruby/rados_object.rb', line 4 def name @name end |
#pool ⇒ Object
Returns the value of attribute pool.
4 5 6 |
# File 'lib/ceph-ruby/rados_object.rb', line 4 def pool @pool end |
Class Method Details
.stat_hash(size_p, mtime_p) ⇒ Object
83 84 85 86 87 88 |
# File 'lib/ceph-ruby/rados_object.rb', line 83 def stat_hash(size_p, mtime_p) { size: size_p.get_uint64(0), mtime: Time.at(mtime_p.get_uint64(0)) } end |
Instance Method Details
#<=>(other) ⇒ Object
107 108 109 110 111 |
# File 'lib/ceph-ruby/rados_object.rb', line 107 def <=>(other) pool_check = pool <=> other.pool return pool_check unless pool_check == 0 other.name <=> name end |
#append(data) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/ceph-ruby/rados_object.rb', line 36 def append(data) size = data.bytesize log("append #{size}B") ret = Lib::Rados.rados_append(pool.handle, name, data, size) raise SystemCallError.new("appendment of #{size} bytes to '#{name}'"\ ' failed', -ret) if ret < 0 end |
#destroy ⇒ Object
60 61 62 63 64 |
# File 'lib/ceph-ruby/rados_object.rb', line 60 def destroy log('destroy') ret = Lib::Rados.rados_remove(pool.handle, name) raise SystemCallError.new("destroy of '#{name}' failed", -ret) if ret < 0 end |
#eql?(other) ⇒ Boolean
113 114 115 116 |
# File 'lib/ceph-ruby/rados_object.rb', line 113 def eql?(other) return false unless other.class == self.class self == other end |
#exists? ⇒ Boolean Also known as: exist?
12 13 14 15 16 17 18 |
# File 'lib/ceph-ruby/rados_object.rb', line 12 def exists? log('exists?') !stat.nil? rescue SystemCallError => e return false if e.errno == Errno::ENOENT::Errno raise e end |
#log(message) ⇒ Object
helper methods below
120 121 122 |
# File 'lib/ceph-ruby/rados_object.rb', line 120 def log() CephRuby.log("rados object #{pool.name}/#{name} #{message}") end |
#mtime ⇒ Object
95 96 97 |
# File 'lib/ceph-ruby/rados_object.rb', line 95 def mtime stat[:mtime] end |
#overwrite(data) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/ceph-ruby/rados_object.rb', line 20 def overwrite(data) size = data.bytesize log("overwrite size #{size}") ret = Lib::Rados.rados_write_full(pool.handle, name, data, size) raise SystemCallError.new("overwrite of #{size} bytes to '#{name}'"\ ' failed', -ret) if ret < 0 end |
#read(offset, size) ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/ceph-ruby/rados_object.rb', line 46 def read(offset, size) log("read offset #{offset}, size #{size}") data_p = FFI::MemoryPointer.new(:char, size) ret = Lib::Rados.rados_read(pool.handle, name, data_p, size, offset) raise SystemCallError.new("read of #{size} bytes from '#{name}'"\ " at #{offset} failed", -ret) if ret < 0 data_p.get_bytes(0, ret) end |
#read_full ⇒ Object
55 56 57 58 |
# File 'lib/ceph-ruby/rados_object.rb', line 55 def read_full log('read_full') read 0, size end |
#resize(size) ⇒ Object
66 67 68 69 70 71 |
# File 'lib/ceph-ruby/rados_object.rb', line 66 def resize(size) log("resize size #{size}") ret = Lib::Rados.rados_trunc(pool.handle, name, size) raise SystemCallError.new("resize of '#{name}'"\ " to #{size} failed", -ret) if ret < 0 end |
#size ⇒ Object
91 92 93 |
# File 'lib/ceph-ruby/rados_object.rb', line 91 def size stat[:size] end |
#stat ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/ceph-ruby/rados_object.rb', line 73 def stat log('stat') size_p = FFI::MemoryPointer.new(:uint64) mtime_p = FFI::MemoryPointer.new(:uint64) ret = Lib::Rados.rados_stat(pool.handle, name, size_p, mtime_p) raise SystemCallError.new("stat of '#{name}' failed", -ret) if ret < 0 RadosObject.stat_hash(size_p, mtime_p) end |
#write(offset, data) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/ceph-ruby/rados_object.rb', line 28 def write(offset, data) size = data.bytesize log("write offset #{offset}, size #{size}") ret = Lib::Rados.rados_write(pool.handle, name, data, size, offset) raise SystemCallError.new("write of #{size} bytes to '#{name}'"\ " at #{offset} failed", -ret) if ret < 0 end |
#xattr(name = nil) ⇒ Object
99 100 101 |
# File 'lib/ceph-ruby/rados_object.rb', line 99 def xattr(name = nil) Xattr.new(self, name) end |
#xattr_enumerator ⇒ Object
103 104 105 |
# File 'lib/ceph-ruby/rados_object.rb', line 103 def xattr_enumerator ::CephRuby::XattrEnumerator.new(self) end |