content_data 0.0.9 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/content_data/content_data.rb +637 -312
- data/lib/content_data/dynamic_content_data.rb +42 -43
- data/lib/content_data/version.rb +2 -4
- data/lib/content_data.rb +1 -3
- data/test/content_data/content_data_test.rb +137 -138
- metadata +5 -5
@@ -1,43 +1,42 @@
|
|
1
|
-
require 'thread'
|
2
|
-
|
3
|
-
module
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
@
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end # module BBFS
|
1
|
+
require 'thread'
|
2
|
+
|
3
|
+
module ContentData
|
4
|
+
|
5
|
+
# TODO(kolman): When content data is immutable, remove the clones (waste).
|
6
|
+
class DynamicContentData
|
7
|
+
def initialize()
|
8
|
+
@last_content_data = nil
|
9
|
+
@last_content_data_available_mutex = Mutex.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def update(content_data)
|
13
|
+
ref = ContentData.new(content_data)
|
14
|
+
@last_content_data_available_mutex.synchronize {
|
15
|
+
@last_content_data = ref
|
16
|
+
Log.debug3("updating last content data:#{@last_content_data}\n")
|
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
|
data/lib/content_data/version.rb
CHANGED
data/lib/content_data.rb
CHANGED
@@ -3,144 +3,143 @@ require 'test/unit'
|
|
3
3
|
|
4
4
|
require_relative '../../lib/content_data/content_data.rb'
|
5
5
|
|
6
|
-
module
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
assert_equal(false, new_content_data2 == old_content_data)
|
110
|
-
|
111
|
-
cd3 = ContentData.remove(content_data2, content_data)
|
112
|
-
assert_equal(false, old_content_data == cd3)
|
113
|
-
cd4 = ContentData.remove(cd3, content_data)
|
114
|
-
#assert_equal(content_data.to_s, "")
|
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
|
-
cd5 = ContentData.merge(cd3, cd4)
|
118
|
-
assert_equal(cd5, content_data)
|
119
|
-
|
120
|
-
intersect = ContentData.intersect(cd3, cd4)
|
121
|
-
assert_equal(intersect, ContentData.new)
|
122
|
-
intersect = ContentData.intersect(cd5, cd4)
|
123
|
-
assert_equal(cd4, intersect)
|
124
|
-
|
125
|
-
# Content serialization test
|
126
|
-
#content = Content.new("D12A1C98A3", 765, ContentData.parse_time("1296527039"))
|
127
|
-
#content_serializer = content.serialize()
|
128
|
-
#content_copy = Content.new(nil, nil, nil, content_serializer)
|
129
|
-
#assert_equal(content, content_copy)
|
130
|
-
|
131
|
-
# ContentInstance serialization test
|
132
|
-
#instance = ContentInstance.new("DB12A1C233", 765, "large_server_1", "dev1",
|
133
|
-
# "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039"))
|
134
|
-
#instance_serializer = instance.serialize()
|
135
|
-
#instance_copy = ContentInstance.new(nil, nil, nil, nil, nil, nil, instance_serializer)
|
136
|
-
#assert_equal(instance, instance_copy)
|
137
|
-
|
138
|
-
# ContentData serialization test
|
139
|
-
#content_data_serializer = content_data.serialize
|
140
|
-
#content_data_copy = ContentData.new(content_data_serializer)
|
141
|
-
#assert_equal(content_data, content_data_copy)
|
142
|
-
end
|
143
|
-
end
|
6
|
+
module ContentData
|
7
|
+
|
8
|
+
class TestContentData < Test::Unit::TestCase
|
9
|
+
def test_content
|
10
|
+
content_data = ContentData.new
|
11
|
+
content_data.add_content(Content.new("D12A1C98A3", 765, ContentData.parse_time("1296527039")))
|
12
|
+
content_data.add_content(Content.new("B12A1C98A3", 123123, ContentData.parse_time("1296527039")))
|
13
|
+
content_data.add_content(Content.new("D1234C98A3", 12444, ContentData.parse_time("1296527039")))
|
14
|
+
content_data.add_content(Content.new("DB12A1C233", 2, ContentData.parse_time("1296527039")))
|
15
|
+
content_data.add_content(Content.new("DB12A4338A", 12412, ContentData.parse_time("1296527039")))
|
16
|
+
content_data.add_content(Content.new("232A1C98A3", 124424, ContentData.parse_time("1296527039")))
|
17
|
+
content_data.add_content(Content.new("AC12A1C983", 1242, ContentData.parse_time("1296527039")))
|
18
|
+
content_data.add_content(Content.new("AAC12A1C983", 1242,ContentData.parse_time("1296527039")))
|
19
|
+
|
20
|
+
content_data.add_instance(ContentInstance.new("DB12A1C233", 765, "large_server_1", "dev1",
|
21
|
+
"/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
|
22
|
+
content_data.add_instance(ContentInstance.new("DB12A4338A", 765, "large_server_1", "dev2",
|
23
|
+
"/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
|
24
|
+
content_data.add_instance(ContentInstance.new("232A1C98A3", 765, "large_server_1", "dev3",
|
25
|
+
"/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
|
26
|
+
content_data.add_instance(ContentInstance.new("DB12A4338A", 765, "large_server_2", "dev2",
|
27
|
+
"/home/lala/k.txt", ContentData.parse_time("1296527039")))
|
28
|
+
content_data.add_instance(ContentInstance.new("D1234C98A3", 765, "large_server_2", "dev1",
|
29
|
+
"/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
|
30
|
+
content_data.add_instance(ContentInstance.new("D12A1C98A3", 765, "large_server_2", "dev1",
|
31
|
+
"/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
|
32
|
+
content_data.add_instance(ContentInstance.new("AC12A1C983", 765, "large_server_2", "dev2",
|
33
|
+
"/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
|
34
|
+
content_data.add_instance(ContentInstance.new("232A1C98A3", 765, "large_server_2", "dev3",
|
35
|
+
"/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
|
36
|
+
content_data.add_instance(ContentInstance.new("D12A1C98A3", 765, "large_server_2", "dev2",
|
37
|
+
"/home/lala/k.txt", ContentData.parse_time("1296527039")))
|
38
|
+
content_data.add_instance(ContentInstance.new("D1234C98A3", 12412, "large_server_2", "dev1",
|
39
|
+
"/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
|
40
|
+
content_data.add_instance(ContentInstance.new("DB12A4338A", 12412, "large_server_2", "dev1",
|
41
|
+
"/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
|
42
|
+
content_data.add_instance(ContentInstance.new("AC12A1C983", 12412, "large_server_2", "dev2",
|
43
|
+
"/home/kuku/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
|
44
|
+
content_data.add_instance(ContentInstance.new("232A1C98A3", 12412, "large_server_2", "dev3",
|
45
|
+
"/home/kuku/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
|
46
|
+
content_data.add_instance(ContentInstance.new("DB12A4338A", 12412, "large_server_1", "dev2",
|
47
|
+
"/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
|
48
|
+
content_data.add_instance(ContentInstance.new("D1234C98A3", 12412, "large_server_1", "dev1",
|
49
|
+
"/home/kuku/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
|
50
|
+
|
51
|
+
#print content_data.to_s
|
52
|
+
|
53
|
+
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",
|
54
|
+
content_data.to_s)
|
55
|
+
content_data.to_file(File.join File.dirname(__FILE__), "/content_data_test.data")
|
56
|
+
new_content_data = ContentData.new()
|
57
|
+
new_content_data.from_file(File.join File.dirname(__FILE__), "/content_data_test.data")
|
58
|
+
assert_equal(new_content_data, content_data)
|
59
|
+
|
60
|
+
content_data2 = ContentData.new
|
61
|
+
content_data2.add_content(Content.new("AD12A1C98A3", 765, ContentData.parse_time("1296527039")))
|
62
|
+
content_data2.add_content(Content.new("AB12A1C98A3", 123123, ContentData.parse_time("1296527039")))
|
63
|
+
content_data2.add_content(Content.new("AD1234C98A3", 12444, ContentData.parse_time("1296527039")))
|
64
|
+
content_data2.add_content(Content.new("ADB12A1C233", 2, ContentData.parse_time("1296527039")))
|
65
|
+
content_data2.add_content(Content.new("ADB12A4338A", 12412, ContentData.parse_time("1296527039")))
|
66
|
+
content_data2.add_content(Content.new("A232A1C98A3", 124424, ContentData.parse_time("1296527039")))
|
67
|
+
content_data2.add_content(Content.new("AAC12A1C983", 1242, ContentData.parse_time("1296527039")))
|
68
|
+
|
69
|
+
content_data2.add_instance(ContentInstance.new("ADB12A1C233", 765, "large_server_11", "dev1",
|
70
|
+
"/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
|
71
|
+
content_data2.add_instance(ContentInstance.new("ADB12A4338A", 765, "large_server_11", "dev2",
|
72
|
+
"/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
|
73
|
+
content_data2.add_instance(ContentInstance.new("A232A1C98A3", 765, "large_server_11", "dev3",
|
74
|
+
"/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
|
75
|
+
content_data2.add_instance(ContentInstance.new("ADB12A4338A", 765, "large_server_12", "dev2",
|
76
|
+
"/home/lala/k.txt", ContentData.parse_time("1296527039")))
|
77
|
+
content_data2.add_instance(ContentInstance.new("AD1234C98A3", 765, "large_server_12", "dev1",
|
78
|
+
"/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
|
79
|
+
content_data2.add_instance(ContentInstance.new("AD12A1C98A3", 765, "large_server_12", "dev1",
|
80
|
+
"/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
|
81
|
+
content_data2.add_instance(ContentInstance.new("AAC12A1C983", 765, "large_server_12", "dev2",
|
82
|
+
"/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
|
83
|
+
content_data2.add_instance(ContentInstance.new("A232A1C98A3", 765, "large_server_12", "dev3",
|
84
|
+
"/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
|
85
|
+
content_data2.add_instance(ContentInstance.new("AD12A1C98A3", 765, "large_server_12", "dev2",
|
86
|
+
"/home/lala/k.txt", ContentData.parse_time("1296527039")))
|
87
|
+
content_data2.add_instance(ContentInstance.new("AD1234C98A3", 12412, "large_server_12", "dev1",
|
88
|
+
"/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
|
89
|
+
content_data2.add_instance(ContentInstance.new("ADB12A4338A", 12412, "large_server_12", "dev1",
|
90
|
+
"/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
|
91
|
+
content_data2.add_instance(ContentInstance.new("AAC12A1C983", 12412, "large_server_12", "dev2",
|
92
|
+
"/home/kuku/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
|
93
|
+
content_data2.add_instance(ContentInstance.new("A232A1C98A3", 12412, "large_server_12", "dev3",
|
94
|
+
"/home/kuku/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
|
95
|
+
content_data2.add_instance(ContentInstance.new("ADB12A4338A", 12412, "large_server_11", "dev2",
|
96
|
+
"/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
|
97
|
+
content_data2.add_instance(ContentInstance.new("AD1234C98A3", 12412, "large_server_11", "dev1",
|
98
|
+
"/home/kuku/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
|
99
|
+
|
100
|
+
old_content_data = ContentData.new
|
101
|
+
old_content_data.merge(content_data)
|
102
|
+
assert_equal(true, old_content_data == content_data)
|
103
|
+
content_data.merge(content_data2)
|
104
|
+
content_data.to_file(File.join File.dirname(__FILE__), "/content_data_test2.data")
|
105
|
+
new_content_data2 = ContentData.new()
|
106
|
+
new_content_data2.from_file(File.join File.dirname(__FILE__), "/content_data_test2.data")
|
107
|
+
assert_equal(true, new_content_data2 == content_data)
|
108
|
+
assert_equal(false, new_content_data2 == old_content_data)
|
144
109
|
|
110
|
+
cd3 = ContentData.remove(content_data2, content_data)
|
111
|
+
assert_equal(false, old_content_data == cd3)
|
112
|
+
cd4 = ContentData.remove(cd3, content_data)
|
113
|
+
#assert_equal(content_data.to_s, "")
|
114
|
+
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")
|
115
|
+
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")
|
116
|
+
cd5 = ContentData.merge(cd3, cd4)
|
117
|
+
assert_equal(cd5, content_data)
|
118
|
+
|
119
|
+
intersect = ContentData.intersect(cd3, cd4)
|
120
|
+
assert_equal(intersect, ContentData.new)
|
121
|
+
intersect = ContentData.intersect(cd5, cd4)
|
122
|
+
assert_equal(cd4, intersect)
|
123
|
+
|
124
|
+
# Content serialization test
|
125
|
+
#content = Content.new("D12A1C98A3", 765, ContentData.parse_time("1296527039"))
|
126
|
+
#content_serializer = content.serialize()
|
127
|
+
#content_copy = Content.new(nil, nil, nil, content_serializer)
|
128
|
+
#assert_equal(content, content_copy)
|
129
|
+
|
130
|
+
# ContentInstance serialization test
|
131
|
+
#instance = ContentInstance.new("DB12A1C233", 765, "large_server_1", "dev1",
|
132
|
+
# "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039"))
|
133
|
+
#instance_serializer = instance.serialize()
|
134
|
+
#instance_copy = ContentInstance.new(nil, nil, nil, nil, nil, nil, instance_serializer)
|
135
|
+
#assert_equal(instance, instance_copy)
|
136
|
+
|
137
|
+
# ContentData serialization test
|
138
|
+
#content_data_serializer = content_data.serialize
|
139
|
+
#content_data_copy = ContentData.new(content_data_serializer)
|
140
|
+
#assert_equal(content_data, content_data_copy)
|
141
|
+
end
|
145
142
|
end
|
143
|
+
|
146
144
|
end
|
145
|
+
|
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
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: log
|
@@ -45,17 +45,17 @@ dependencies:
|
|
45
45
|
version: '0'
|
46
46
|
description: ! 'Data structure for an abstract layer over files. Each binary sequence
|
47
47
|
is a '
|
48
|
-
email:
|
48
|
+
email: bbfsdev@gmail.com
|
49
49
|
executables: []
|
50
50
|
extensions: []
|
51
51
|
extra_rdoc_files: []
|
52
52
|
files:
|
53
53
|
- lib/content_data.rb
|
54
|
-
- lib/content_data/content_data.rb
|
55
54
|
- lib/content_data/dynamic_content_data.rb
|
55
|
+
- lib/content_data/content_data.rb
|
56
56
|
- lib/content_data/version.rb
|
57
57
|
- test/content_data/content_data_test.rb
|
58
|
-
homepage: http://github.com/
|
58
|
+
homepage: http://github.com/bbfsdev/bbfs
|
59
59
|
licenses: []
|
60
60
|
post_install_message:
|
61
61
|
rdoc_options: []
|