content_data 0.0.2 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/lib/content_data.rb CHANGED
@@ -1,9 +1,9 @@
1
- require_relative 'content_data/content_data'
1
+ require 'content_data/content_data'
2
+ require 'content_data/dynamic_content_data'
2
3
 
3
4
  # Data structure for an abstract layer over files.
4
5
  # Each binary sequence is a content, each file is content instance.
5
6
  module BBFS
6
7
  module ContentData
7
- VERSION = "0.0.1"
8
8
  end
9
9
  end
@@ -1,3 +1,5 @@
1
+ require 'log'
2
+ require 'params'
1
3
  require 'time'
2
4
 
3
5
  module BBFS
@@ -31,8 +33,6 @@ module BBFS
31
33
  end
32
34
  end
33
35
 
34
-
35
-
36
36
  def to_s
37
37
  "%s,%d,%s" % [@checksum, @size, ContentData.format_time(@first_appearance_time)]
38
38
  end
@@ -42,16 +42,6 @@ module BBFS
42
42
  self.size.eql? other.size and
43
43
  self.first_appearance_time.to_i.eql? other.first_appearance_time.to_i)
44
44
  end
45
-
46
- # Support for protocol buffers
47
- #def serialize
48
- # serializer = ContentMessage.new
49
- # serializer.checksum = checksum
50
- # serializer.size = size
51
- # serializer.first_appearance_time = ContentData.format_time(first_appearance_time)
52
- #
53
- # serializer
54
- #end
55
45
  end
56
46
 
57
47
  class ContentInstance
@@ -100,7 +90,11 @@ module BBFS
100
90
  end
101
91
 
102
92
  def global_path
103
- "%s:%s:%s" % [@server_name, @device, @full_path]
93
+ ContentInstance.instance_global_path(@server_name, @full_path)
94
+ end
95
+
96
+ def ContentInstance.instance_global_path(server_name, full_path)
97
+ "%s:%s" % [server_name, full_path]
104
98
  end
105
99
 
106
100
  def to_s
@@ -116,96 +110,40 @@ module BBFS
116
110
  self.full_path.eql? other.full_path and
117
111
  self.modification_time.to_i.eql? other.modification_time.to_i)
118
112
  end
119
-
120
- # Support for protocol buffers
121
- # #def serialize
122
- # serializer = ContentInstanceMessage.new
123
- # serializer.checksum = checksum
124
- # serializer.size = size
125
- # serializer.modification_time = ContentData.format_time(modification_time)
126
- # serializer.server_name = server_name
127
- # serializer.device = device.to_s
128
- # serializer.full_path = full_path
129
- #
130
- # serializer
131
- #end
132
-
133
- #@checksum
134
- #@size
135
- #@server_name
136
- #@device
137
- #@full_path
138
- #@modification_time
139
113
  end
140
114
 
115
+ # Unfortunately this class is used as mutable for now. So need to be carefull.
116
+ # TODO(kolman): Make this class imutable, but add indexing structure to it.
117
+ # TODO(kolman): Add wrapper to the class to enable dynamic content data
118
+ # (with easy access indexes)
141
119
  class ContentData
142
120
  attr_reader :contents, :instances
143
121
 
144
122
  # @param content_data_serializer_str [String]
145
- def initialize(content_data_serializer = nil)
146
- @contents = Hash.new # key is a checksum , value is a refernce to the Content object
147
- @instances = Hash.new # key is an instance global path , value is a reference to the ContentInstance object
148
- if (content_data_serializer != nil)
149
- content_data_serializer.contents.each do |entry|
150
- key = entry.key
151
- value = entry.value
152
- content_serializer = value.content
153
- raise ArgumentError.new("content have to be defined") if content_serializer.nil?
154
- content = Content.new(nil, nil, nil, content_serializer)
155
- @contents[key] = content
156
- end
157
- content_data_serializer.instances.each do |entry|
158
- key = entry.key
159
- value = entry.value
160
- content_instance_serializer = value.instance
161
- raise ArgumentError.new("instance have to be defined") if content_instance_serializer.nil?
162
- content_instance = ContentInstance.new(nil, nil, nil, nil, nil, nil, content_instance_serializer)
163
- @instances[key] = content_instance
164
- end
123
+ def initialize(copy = nil)
124
+ if copy.nil?
125
+ @contents = Hash.new # key is a checksum , value is a refernce to the Content object
126
+ @instances = Hash.new # key is an instance global path , value is a reference to the ContentInstance object
127
+ else
128
+ # Regenerate only the hashes, the values are immutable.
129
+ @contents = copy.contents.clone
130
+ @instances = copy.instances.clone
165
131
  end
166
132
  end
167
133
 
168
- # Support for protocol buffers
169
- #def serialize (serializer = nil)
170
- # serializer = ContentDataMessage.new if (serializer == nil)
171
- # contents.each do |key, value|
172
- # hash_value = ContentDataMessage::HashEntry::HashValue.new
173
- # content_serializer = value.serialize
174
- # #content_serializer = ContentMessage.new
175
- # #content_serializer.parse_from_string(content_serializer_str)
176
- # hash_value.content = content_serializer
177
- # hash_entry = ContentDataMessage::HashEntry.new
178
- # hash_entry.key = key
179
- # hash_entry.value = hash_value
180
- # serializer.contents << hash_entry
181
- # end
182
- # instances.each do |key, value|
183
- # hash_value = ContentDataMessage::HashEntry::HashValue.new
184
- # instance_serializer = value.serialize
185
- # #instance_serializer = ContentInstanceMessage.new
186
- # #instance_serializer.parse_from_string(instance_serializer_str)
187
- # hash_value.instance = instance_serializer
188
- # hash_entry = ContentDataMessage::HashEntry.new
189
- # hash_entry.key = key
190
- # hash_entry.value = hash_value
191
- # serializer.instances << hash_entry
192
- # end
193
- # serializer
194
- #end
195
-
196
134
  def add_content(content)
197
135
  @contents[content.checksum] = content
198
136
  end
199
137
 
200
138
  def add_instance(instance)
201
139
  if (not @contents.key?(instance.checksum))
202
- printf("Warning: Adding instance while it's" +
140
+ Log.warning sprintf("Adding instance while it's" +
203
141
  " checksum %s does not exists.\n", instance.checksum)
204
- printf("%s\n", instance.to_s)
142
+ Log.warning sprintf("%s\n", instance.to_s)
205
143
  return false
206
144
  elsif (@contents[instance.checksum].size != instance.size)
207
- print("Warning: File size different from content size while same checksum.\n")
208
- printf("%s\n", instance.to_s)
145
+ Log.warning 'File size different from content size while same checksum'
146
+ Log.warning instance.to_s
209
147
  return false
210
148
  end
211
149
 
@@ -234,33 +172,22 @@ module BBFS
234
172
  end
235
173
 
236
174
  def ==(other)
237
-
238
- #print "size:%s\n" % @contents.size
239
- #print "other size:%s\n" % other.contents.size
240
175
  return false if other == nil
241
176
  return false unless @contents.size == other.contents.size
242
177
  return false unless @instances.size == other.instances.size
243
178
 
244
179
  @contents.keys.each { |key|
245
180
  if (@contents[key] != other.contents[key])
246
- #print "%s-" % @contents[key].to_s
247
- #print other.contents[key].to_s
248
- #puts " compare - false"
249
- puts @contents[key].first_appearance_time.to_i
250
- puts other.contents[key].first_appearance_time.to_i
181
+ Log.info @contents[key].first_appearance_time.to_i
182
+ Log.info other.contents[key].first_appearance_time.to_i
251
183
  return false
252
184
  end
253
185
  }
254
-
255
186
  @instances.keys.each { |key|
256
187
  if (@instances[key] != other.instances[key])
257
- #print "%s-" % @instances[key].to_s
258
- #print other.instances[key].to_s
259
- #puts " compare - false"
260
188
  return false
261
189
  end
262
190
  }
263
- #puts "compare - true"
264
191
  return true
265
192
  end
266
193
 
@@ -278,6 +205,8 @@ module BBFS
278
205
  end
279
206
 
280
207
  def to_file(filename)
208
+ content_data_dir = File.dirname(filename)
209
+ FileUtils.makedirs(content_data_dir) unless File.exists?(content_data_dir)
281
210
  File.open(filename, 'w') {|f| f.write(to_s) }
282
211
  end
283
212
 
@@ -297,7 +226,7 @@ module BBFS
297
226
  number_of_instances = lines[i].to_i
298
227
  i += 1
299
228
  number_of_instances.times {
300
- parameters = lines[i].split(",")
229
+ parameters = lines[i].split(',')
301
230
  # bugfix: if file name consist a comma then parsing based on comma separating fails
302
231
  if (parameters.size > 6)
303
232
  (5..parameters.size-2).each do |i|
@@ -318,20 +247,15 @@ module BBFS
318
247
  }
319
248
  end
320
249
 
321
- def self.parse_time(time_str)
250
+ def self.parse_time time_str
322
251
  return nil unless time_str.instance_of? String
323
- time = Time.strptime( time_str, '%Y/%m/%d %H:%M:%S.%L' )
324
- # another option to parse a time
325
- #require 'scanf.rb'
326
- #time_arr = time_str.scanf("%d/%d/%d %d:%d:%d.%d")
327
- #time = Time.utc(time_arr[0], time_arr[1],time_arr[2],time_arr[3],time_arr[4],time_arr[5],time_arr[6])
252
+ seconds_from_epoch = Integer time_str # Not using to_i here because it does not check string is integer.
253
+ time = Time.at seconds_from_epoch
328
254
  end
329
255
 
330
256
  def self.format_time(time)
331
257
  return nil unless time.instance_of?Time
332
- #puts time.class
333
- str = time.strftime( '%Y/%m/%d %H:%M:%S.%L' )
334
- #puts str
258
+ str = time.to_i.to_s
335
259
  return str
336
260
  end
337
261
 
@@ -362,7 +286,7 @@ module BBFS
362
286
  ret.add_content(content) unless a.content_exists(content.checksum)
363
287
  }
364
288
 
365
- #puts "kaka"
289
+ #Log.info "kaka"
366
290
 
367
291
  b.instances.values.each { |instance|
368
292
  #print "%s - %s\n" % [instance.checksum, a.content_exists(instance.checksum).to_s]
@@ -374,6 +298,36 @@ module BBFS
374
298
  return ret
375
299
  end
376
300
 
301
+ def self.remove_instances(a, b)
302
+ return nil unless a.instance_of?ContentData
303
+ return nil unless b.instance_of?ContentData
304
+
305
+ ret = ContentData.new
306
+ b.instances.values.each do |instance|
307
+ if !a.instances.key?(instance.global_path)
308
+ ret.add_content(b.contents[instance.checksum])
309
+ ret.add_instance(instance)
310
+ end
311
+ end
312
+ return ret
313
+ end
314
+
315
+ def self.remove_directory(cd, global_dir_path)
316
+ return nil unless cd.instance_of?ContentData
317
+
318
+ ret = ContentData.new
319
+ cd.instances.values.each do |instance|
320
+ Log.debug3("global path to check: #{global_dir_path}")
321
+ Log.debug3("instance global path: #{instance.global_path}")
322
+ if instance.global_path.scan(global_dir_path).size == 0
323
+ Log.debug3("Adding instance.")
324
+ ret.add_content(cd.contents[instance.checksum])
325
+ ret.add_instance(instance)
326
+ end
327
+ end
328
+ return ret
329
+ end
330
+
377
331
  # returns the common content in both a and b
378
332
  def self.intersect(a, b)
379
333
  b_minus_a = ContentData.remove(a, b)
@@ -391,12 +345,12 @@ module BBFS
391
345
  checksum = instance.checksum
392
346
  time = instance.modification_time
393
347
 
394
- unless (checksum2instances.has_key?checksum)
348
+ unless (checksum2instances.has_key? checksum)
395
349
  checksum2instances[checksum] = []
396
350
  end
397
351
  checksum2instances[checksum] << instance
398
352
 
399
- if (not checksum2time.has_key?checksum)
353
+ if (not checksum2time.has_key? checksum)
400
354
  checksum2time[checksum] = time
401
355
  elsif ((checksum2time[checksum] <=> time) > 0)
402
356
  checksum2time[checksum] = time
@@ -406,7 +360,7 @@ module BBFS
406
360
  # update min time table with time information from contents
407
361
  db.contents.each do |checksum, content|
408
362
  time = content.first_appearance_time
409
- if (not checksum2time.has_key?checksum)
363
+ if (not checksum2time.has_key? checksum)
410
364
  checksum2time[checksum] = time
411
365
  elsif ((checksum2time[checksum] <=> time) > 0)
412
366
  checksum2time[checksum] = time
@@ -430,7 +384,9 @@ module BBFS
430
384
  if ((instance.modification_time <=> time) == 0)
431
385
  mod_db.add_instance(instance)
432
386
  else # must be bigger then found min time
433
- mod_instance = ContentInstance.new(instance.checksum, instance.size, instance.server_name, instance.device, instance.full_path, time)
387
+ mod_instance = ContentInstance.new(instance.checksum, instance.size,
388
+ instance.server_name, instance.device,
389
+ instance.full_path, time)
434
390
  mod_db.add_instance(mod_instance)
435
391
  end
436
392
  end
@@ -0,0 +1,43 @@
1
+ require 'thread'
2
+
3
+ module BBFS
4
+ module ContentData
5
+
6
+ # TODO(kolman): When content data is immutable, remove the clones (waste).
7
+ class DynamicContentData
8
+ def initialize()
9
+ @last_content_data = nil
10
+ @last_content_data_available_mutex = Mutex.new
11
+ end
12
+
13
+ def update(content_data)
14
+ ref = ContentData.new(content_data)
15
+ @last_content_data_available_mutex.synchronize {
16
+ @last_content_data = ref
17
+ }
18
+ end
19
+
20
+ def exists?(checksum)
21
+ ref = nil
22
+ @last_content_data_available_mutex.synchronize {
23
+ ref = @last_content_data
24
+ }
25
+ #Log.debug3("@last_content_data is nil? #{@last_content_data.nil?}")
26
+ #Log.debug3(@last_content_data.to_s) unless @last_content_data.nil?
27
+ #Log.debug3("Exists?:#{@last_content_data.content_exists(checksum)}") \
28
+ # unless @last_content_data.nil?
29
+ return ref.content_exists(checksum) if ref != nil
30
+ false
31
+ end
32
+
33
+ def last_content_data
34
+ ref = nil
35
+ @last_content_data_available_mutex.synchronize {
36
+ ref = @last_content_data
37
+ }
38
+ return ContentData.new(ref)
39
+ end
40
+ end
41
+
42
+ end # module ContentData
43
+ end # module BBFS
@@ -0,0 +1,5 @@
1
+ module BBFS
2
+ module ContentData
3
+ VERSION = "0.0.8"
4
+ end
5
+ end
@@ -9,102 +9,102 @@ module BBFS
9
9
  class TestContentData < Test::Unit::TestCase
10
10
  def test_content
11
11
  content_data = ContentData.new
12
- content_data.add_content(Content.new("D12A1C98A3", 765, ContentData.parse_time("2011/02/01 02:23:59.000")))
13
- content_data.add_content(Content.new("B12A1C98A3", 123123, ContentData.parse_time("2011/02/01 02:23:59.000")))
14
- content_data.add_content(Content.new("D1234C98A3", 12444, ContentData.parse_time("2011/02/01 02:23:59.000")))
15
- content_data.add_content(Content.new("DB12A1C233", 2, ContentData.parse_time("2011/02/01 02:23:59.000")))
16
- content_data.add_content(Content.new("DB12A4338A", 12412, ContentData.parse_time("2011/02/01 02:23:59.000")))
17
- content_data.add_content(Content.new("232A1C98A3", 124424, ContentData.parse_time("2011/02/01 02:23:59.000")))
18
- content_data.add_content(Content.new("AC12A1C983", 1242, ContentData.parse_time("2011/02/01 02:23:59.000")))
19
- content_data.add_content(Content.new("AAC12A1C983", 1242,ContentData.parse_time("2011/02/01 02:23:59.000")))
12
+ content_data.add_content(Content.new("D12A1C98A3", 765, ContentData.parse_time("1296527039")))
13
+ content_data.add_content(Content.new("B12A1C98A3", 123123, ContentData.parse_time("1296527039")))
14
+ content_data.add_content(Content.new("D1234C98A3", 12444, ContentData.parse_time("1296527039")))
15
+ content_data.add_content(Content.new("DB12A1C233", 2, ContentData.parse_time("1296527039")))
16
+ content_data.add_content(Content.new("DB12A4338A", 12412, ContentData.parse_time("1296527039")))
17
+ content_data.add_content(Content.new("232A1C98A3", 124424, ContentData.parse_time("1296527039")))
18
+ content_data.add_content(Content.new("AC12A1C983", 1242, ContentData.parse_time("1296527039")))
19
+ content_data.add_content(Content.new("AAC12A1C983", 1242,ContentData.parse_time("1296527039")))
20
20
 
21
21
  content_data.add_instance(ContentInstance.new("DB12A1C233", 765, "large_server_1", "dev1",
22
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
22
+ "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
23
23
  content_data.add_instance(ContentInstance.new("DB12A4338A", 765, "large_server_1", "dev2",
24
- "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
24
+ "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
25
25
  content_data.add_instance(ContentInstance.new("232A1C98A3", 765, "large_server_1", "dev3",
26
- "/home/kuku/dev/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
26
+ "/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
27
27
  content_data.add_instance(ContentInstance.new("DB12A4338A", 765, "large_server_2", "dev2",
28
- "/home/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
28
+ "/home/lala/k.txt", ContentData.parse_time("1296527039")))
29
29
  content_data.add_instance(ContentInstance.new("D1234C98A3", 765, "large_server_2", "dev1",
30
- "/home/kuku/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
30
+ "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
31
31
  content_data.add_instance(ContentInstance.new("D12A1C98A3", 765, "large_server_2", "dev1",
32
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
32
+ "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
33
33
  content_data.add_instance(ContentInstance.new("AC12A1C983", 765, "large_server_2", "dev2",
34
- "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
34
+ "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
35
35
  content_data.add_instance(ContentInstance.new("232A1C98A3", 765, "large_server_2", "dev3",
36
- "/home/kuku/dev/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
36
+ "/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
37
37
  content_data.add_instance(ContentInstance.new("D12A1C98A3", 765, "large_server_2", "dev2",
38
- "/home/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
38
+ "/home/lala/k.txt", ContentData.parse_time("1296527039")))
39
39
  content_data.add_instance(ContentInstance.new("D1234C98A3", 12412, "large_server_2", "dev1",
40
- "/home/kuku/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
40
+ "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
41
41
  content_data.add_instance(ContentInstance.new("DB12A4338A", 12412, "large_server_2", "dev1",
42
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
42
+ "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
43
43
  content_data.add_instance(ContentInstance.new("AC12A1C983", 12412, "large_server_2", "dev2",
44
- "/home/kuku/kuku/dev/lala/k1.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
44
+ "/home/kuku/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
45
45
  content_data.add_instance(ContentInstance.new("232A1C98A3", 12412, "large_server_2", "dev3",
46
- "/home/kuku/kuku/dev/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
46
+ "/home/kuku/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
47
47
  content_data.add_instance(ContentInstance.new("DB12A4338A", 12412, "large_server_1", "dev2",
48
- "/home/kuku/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
48
+ "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
49
49
  content_data.add_instance(ContentInstance.new("D1234C98A3", 12412, "large_server_1", "dev1",
50
- "/home/kuku/kuku/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
50
+ "/home/kuku/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
51
51
 
52
52
  #print content_data.to_s
53
53
 
54
- assert_equal("8\nD12A1C98A3,765,2011/02/01 02:23:59.000\nB12A1C98A3,123123,2011/02/01 02:23:59.000\nD1234C98A3,12444,2011/02/01 02:23:59.000\nDB12A1C233,2,2011/02/01 02:23:59.000\nDB12A4338A,12412,2011/02/01 02:23:59.000\n232A1C98A3,124424,2011/02/01 02:23:59.000\nAC12A1C983,1242,2011/02/01 02:23:59.000\nAAC12A1C983,1242,2011/02/01 02:23:59.000\n3\nDB12A4338A,12412,large_server_2,dev1,/home/kuku/dev/lala/k.txt,2011/02/01 02:23:59.000\nD12A1C98A3,765,large_server_2,dev2,/home/lala/k.txt,2011/02/01 02:23:59.000\nDB12A4338A,12412,large_server_1,dev2,/home/kuku/lala/k.txt,2011/02/01 02:23:59.000\n",
54
+ assert_equal("8\nD12A1C98A3,765,1296527039\nB12A1C98A3,123123,1296527039\nD1234C98A3,12444,1296527039\nDB12A1C233,2,1296527039\nDB12A4338A,12412,1296527039\n232A1C98A3,124424,1296527039\nAC12A1C983,1242,1296527039\nAAC12A1C983,1242,1296527039\n3\nDB12A4338A,12412,large_server_2,dev1,/home/kuku/dev/lala/k.txt,1296527039\nD12A1C98A3,765,large_server_2,dev2,/home/lala/k.txt,1296527039\nDB12A4338A,12412,large_server_1,dev2,/home/kuku/lala/k.txt,1296527039\n",
55
55
  content_data.to_s)
56
- content_data.to_file("content_data_test.data")
56
+ content_data.to_file(File.join File.dirname(__FILE__), "/content_data_test.data")
57
57
  new_content_data = ContentData.new()
58
- new_content_data.from_file("content_data_test.data")
58
+ new_content_data.from_file(File.join File.dirname(__FILE__), "/content_data_test.data")
59
59
  assert_equal(new_content_data, content_data)
60
60
 
61
61
  content_data2 = ContentData.new
62
- content_data2.add_content(Content.new("AD12A1C98A3", 765, ContentData.parse_time("2011/02/01 02:23:59.000")))
63
- content_data2.add_content(Content.new("AB12A1C98A3", 123123, ContentData.parse_time("2011/02/01 02:23:59.000")))
64
- content_data2.add_content(Content.new("AD1234C98A3", 12444, ContentData.parse_time("2011/02/01 02:23:59.000")))
65
- content_data2.add_content(Content.new("ADB12A1C233", 2, ContentData.parse_time("2011/02/01 02:23:59.000")))
66
- content_data2.add_content(Content.new("ADB12A4338A", 12412, ContentData.parse_time("2011/02/01 02:23:59.000")))
67
- content_data2.add_content(Content.new("A232A1C98A3", 124424, ContentData.parse_time("2011/02/01 02:23:59.000")))
68
- content_data2.add_content(Content.new("AAC12A1C983", 1242, ContentData.parse_time("2011/02/01 02:23:59.000")))
62
+ content_data2.add_content(Content.new("AD12A1C98A3", 765, ContentData.parse_time("1296527039")))
63
+ content_data2.add_content(Content.new("AB12A1C98A3", 123123, ContentData.parse_time("1296527039")))
64
+ content_data2.add_content(Content.new("AD1234C98A3", 12444, ContentData.parse_time("1296527039")))
65
+ content_data2.add_content(Content.new("ADB12A1C233", 2, ContentData.parse_time("1296527039")))
66
+ content_data2.add_content(Content.new("ADB12A4338A", 12412, ContentData.parse_time("1296527039")))
67
+ content_data2.add_content(Content.new("A232A1C98A3", 124424, ContentData.parse_time("1296527039")))
68
+ content_data2.add_content(Content.new("AAC12A1C983", 1242, ContentData.parse_time("1296527039")))
69
69
 
70
70
  content_data2.add_instance(ContentInstance.new("ADB12A1C233", 765, "large_server_11", "dev1",
71
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
71
+ "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
72
72
  content_data2.add_instance(ContentInstance.new("ADB12A4338A", 765, "large_server_11", "dev2",
73
- "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
73
+ "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
74
74
  content_data2.add_instance(ContentInstance.new("A232A1C98A3", 765, "large_server_11", "dev3",
75
- "/home/kuku/dev/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
75
+ "/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
76
76
  content_data2.add_instance(ContentInstance.new("ADB12A4338A", 765, "large_server_12", "dev2",
77
- "/home/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
77
+ "/home/lala/k.txt", ContentData.parse_time("1296527039")))
78
78
  content_data2.add_instance(ContentInstance.new("AD1234C98A3", 765, "large_server_12", "dev1",
79
- "/home/kuku/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
79
+ "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
80
80
  content_data2.add_instance(ContentInstance.new("AD12A1C98A3", 765, "large_server_12", "dev1",
81
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
81
+ "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
82
82
  content_data2.add_instance(ContentInstance.new("AAC12A1C983", 765, "large_server_12", "dev2",
83
- "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
83
+ "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
84
84
  content_data2.add_instance(ContentInstance.new("A232A1C98A3", 765, "large_server_12", "dev3",
85
- "/home/kuku/dev/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
85
+ "/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
86
86
  content_data2.add_instance(ContentInstance.new("AD12A1C98A3", 765, "large_server_12", "dev2",
87
- "/home/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
87
+ "/home/lala/k.txt", ContentData.parse_time("1296527039")))
88
88
  content_data2.add_instance(ContentInstance.new("AD1234C98A3", 12412, "large_server_12", "dev1",
89
- "/home/kuku/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
89
+ "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
90
90
  content_data2.add_instance(ContentInstance.new("ADB12A4338A", 12412, "large_server_12", "dev1",
91
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
91
+ "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
92
92
  content_data2.add_instance(ContentInstance.new("AAC12A1C983", 12412, "large_server_12", "dev2",
93
- "/home/kuku/kuku/dev/lala/k1.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
93
+ "/home/kuku/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
94
94
  content_data2.add_instance(ContentInstance.new("A232A1C98A3", 12412, "large_server_12", "dev3",
95
- "/home/kuku/kuku/dev/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
95
+ "/home/kuku/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
96
96
  content_data2.add_instance(ContentInstance.new("ADB12A4338A", 12412, "large_server_11", "dev2",
97
- "/home/kuku/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
97
+ "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
98
98
  content_data2.add_instance(ContentInstance.new("AD1234C98A3", 12412, "large_server_11", "dev1",
99
- "/home/kuku/kuku/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000")))
99
+ "/home/kuku/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
100
100
 
101
101
  old_content_data = ContentData.new
102
102
  old_content_data.merge(content_data)
103
103
  assert_equal(true, old_content_data == content_data)
104
104
  content_data.merge(content_data2)
105
- content_data.to_file("content_data_test2.data")
105
+ content_data.to_file(File.join File.dirname(__FILE__), "/content_data_test2.data")
106
106
  new_content_data2 = ContentData.new()
107
- new_content_data2.from_file("content_data_test2.data")
107
+ new_content_data2.from_file(File.join File.dirname(__FILE__), "/content_data_test2.data")
108
108
  assert_equal(true, new_content_data2 == content_data)
109
109
  assert_equal(false, new_content_data2 == old_content_data)
110
110
 
@@ -112,8 +112,8 @@ module BBFS
112
112
  assert_equal(false, old_content_data == cd3)
113
113
  cd4 = ContentData.remove(cd3, content_data)
114
114
  #assert_equal(content_data.to_s, "")
115
- assert_equal(cd3.to_s, "7\nD12A1C98A3,765,2011/02/01 02:23:59.000\nB12A1C98A3,123123,2011/02/01 02:23:59.000\nD1234C98A3,12444,2011/02/01 02:23:59.000\nDB12A1C233,2,2011/02/01 02:23:59.000\nDB12A4338A,12412,2011/02/01 02:23:59.000\n232A1C98A3,124424,2011/02/01 02:23:59.000\nAC12A1C983,1242,2011/02/01 02:23:59.000\n3\nDB12A4338A,12412,large_server_2,dev1,/home/kuku/dev/lala/k.txt,2011/02/01 02:23:59.000\nD12A1C98A3,765,large_server_2,dev2,/home/lala/k.txt,2011/02/01 02:23:59.000\nDB12A4338A,12412,large_server_1,dev2,/home/kuku/lala/k.txt,2011/02/01 02:23:59.000\n")
116
- assert_equal(cd4.to_s, "7\nAAC12A1C983,1242,2011/02/01 02:23:59.000\nAD12A1C98A3,765,2011/02/01 02:23:59.000\nAB12A1C98A3,123123,2011/02/01 02:23:59.000\nAD1234C98A3,12444,2011/02/01 02:23:59.000\nADB12A1C233,2,2011/02/01 02:23:59.000\nADB12A4338A,12412,2011/02/01 02:23:59.000\nA232A1C98A3,124424,2011/02/01 02:23:59.000\n3\nADB12A4338A,12412,large_server_12,dev1,/home/kuku/dev/lala/k.txt,2011/02/01 02:23:59.000\nAD12A1C98A3,765,large_server_12,dev2,/home/lala/k.txt,2011/02/01 02:23:59.000\nADB12A4338A,12412,large_server_11,dev2,/home/kuku/lala/k.txt,2011/02/01 02:23:59.000\n")
115
+ assert_equal(cd3.to_s, "7\nD12A1C98A3,765,1296527039\nB12A1C98A3,123123,1296527039\nD1234C98A3,12444,1296527039\nDB12A1C233,2,1296527039\nDB12A4338A,12412,1296527039\n232A1C98A3,124424,1296527039\nAC12A1C983,1242,1296527039\n3\nDB12A4338A,12412,large_server_2,dev1,/home/kuku/dev/lala/k.txt,1296527039\nD12A1C98A3,765,large_server_2,dev2,/home/lala/k.txt,1296527039\nDB12A4338A,12412,large_server_1,dev2,/home/kuku/lala/k.txt,1296527039\n")
116
+ assert_equal(cd4.to_s, "7\nAAC12A1C983,1242,1296527039\nAD12A1C98A3,765,1296527039\nAB12A1C98A3,123123,1296527039\nAD1234C98A3,12444,1296527039\nADB12A1C233,2,1296527039\nADB12A4338A,12412,1296527039\nA232A1C98A3,124424,1296527039\n3\nADB12A4338A,12412,large_server_12,dev1,/home/kuku/dev/lala/k.txt,1296527039\nAD12A1C98A3,765,large_server_12,dev2,/home/lala/k.txt,1296527039\nADB12A4338A,12412,large_server_11,dev2,/home/kuku/lala/k.txt,1296527039\n")
117
117
  cd5 = ContentData.merge(cd3, cd4)
118
118
  assert_equal(cd5, content_data)
119
119
 
@@ -123,14 +123,14 @@ module BBFS
123
123
  assert_equal(cd4, intersect)
124
124
 
125
125
  # Content serialization test
126
- #content = Content.new("D12A1C98A3", 765, ContentData.parse_time("2011/02/01 02:23:59.000"))
126
+ #content = Content.new("D12A1C98A3", 765, ContentData.parse_time("1296527039"))
127
127
  #content_serializer = content.serialize()
128
128
  #content_copy = Content.new(nil, nil, nil, content_serializer)
129
129
  #assert_equal(content, content_copy)
130
130
 
131
131
  # ContentInstance serialization test
132
132
  #instance = ContentInstance.new("DB12A1C233", 765, "large_server_1", "dev1",
133
- # "/home/kuku/dev/lala/k.txt", ContentData.parse_time("2011/02/01 02:23:59.000"))
133
+ # "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039"))
134
134
  #instance_serializer = instance.serialize()
135
135
  #instance_copy = ContentInstance.new(nil, nil, nil, nil, nil, nil, instance_serializer)
136
136
  #assert_equal(instance, instance_copy)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: content_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,42 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-11 00:00:00.000000000Z
13
- dependencies: []
12
+ date: 2012-09-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: log
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: params
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
14
46
  description: ! 'Data structure for an abstract layer over files. Each binary sequence
15
- is a content, '
47
+ is a '
16
48
  email: kolmanv@gmail.com
17
49
  executables: []
18
50
  extensions: []
@@ -20,6 +52,8 @@ extra_rdoc_files: []
20
52
  files:
21
53
  - lib/content_data.rb
22
54
  - lib/content_data/content_data.rb
55
+ - lib/content_data/dynamic_content_data.rb
56
+ - lib/content_data/version.rb
23
57
  - test/content_data/content_data_test.rb
24
58
  homepage: http://github.com/kolmanv/bbfs
25
59
  licenses: []
@@ -41,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
75
  version: '0'
42
76
  requirements: []
43
77
  rubyforge_project:
44
- rubygems_version: 1.8.15
78
+ rubygems_version: 1.8.23
45
79
  signing_key:
46
80
  specification_version: 3
47
81
  summary: Data structure for an abstract layer over files.