content_server 0.0.10 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,93 +5,91 @@ require 'log'
5
5
  require 'networking/tcp'
6
6
  require 'params'
7
7
 
8
- module BBFS
9
- module ContentServer
8
+ module ContentServer
9
+
10
+ Params.integer('remote_content_fetch_timeout', 10, 'Remote content desired freshness in seconds.')
11
+ Params.integer('remote_content_save_timeout', 60*60, 'Remote content force refresh in seconds.')
12
+
13
+ # TODO(kolman): Use only one tcp/ip socket by utilizing one NQueue for many queues!
14
+ class RemoteContentClient
15
+ def initialize(dynamic_content_data, host, port, local_backup_folder)
16
+ @dynamic_content_data = dynamic_content_data
17
+ @remote_tcp = Networking::TCPClient.new(host, port, method(:receive_content))
18
+ @last_fetch_timestamp = nil
19
+ @last_save_timestamp = nil
20
+ @content_server_content_data_path = File.join(local_backup_folder, 'remote',
21
+ host + '_' + port.to_s)
22
+ Log.debug2("Initialized RemoteContentClient: host:#{host} port:#{port} local_backup_folder:#{local_backup_folder}")
23
+ end
10
24
 
11
- Params.integer('remote_content_timeout', 10, 'Remote content desired freshness in seconds.')
12
- Params.integer('max_content_timeout', 60*60, 'Remote content force refresh in seconds.')
25
+ def receive_content(message)
26
+ Log.debug1("Backup server received Remote content data:#{message.to_s}")
27
+ ref = @dynamic_content_data.last_content_data
28
+ @dynamic_content_data.update(message)
29
+ @last_fetch_timestamp = Time.now.to_i
13
30
 
14
- # TODO(kolman): Use only one tcp/ip socket by utilizing one NQueue for many queues!
15
- class RemoteContent
16
- def initialize(dynamic_content_data, host, port, local_backup_folder)
17
- @dynamic_content_data = dynamic_content_data
18
- @remote_tcp = Networking::TCPClient.new(host, port, method(:receive_content))
19
- @last_update_timestamp = nil
20
- @content_server_content_data_path = File.join(local_backup_folder, 'remote',
21
- host + '_' + port.to_s)
31
+ save_time_span = Params['remote_content_save_timeout']
32
+ if !@last_save_timestamp.nil?
33
+ save_time_span = Time.now.to_i - @last_save_timestamp
22
34
  end
23
35
 
24
- def receive_content(message)
25
- Log.debug1("Remote content data received: #{message.to_s}")
26
- ref = @dynamic_content_data.last_content_data
27
- @dynamic_content_data.update(message)
28
-
29
- max_time_span = Params['max_content_timeout']
30
- if !@last_update_timestamp.nil?
31
- max_time_span = Time.now.to_i - @last_update_timestamp
32
- end
33
-
34
- @last_update_timestamp = Time.now.to_i
35
-
36
- if ref != message || max_time_span >= Params['max_content_timeout']
37
- Log.debug2("Remote content data changed or max time span is large, writing.")
38
- Log.debug3("max_time_span: #{max_time_span}")
39
- write_to = File.join(@content_server_content_data_path,
40
- @last_update_timestamp.to_s + '.cd')
41
- FileUtils.makedirs(@content_server_content_data_path) unless \
36
+ if save_time_span >= Params['remote_content_save_timeout']
37
+ @last_save_timestamp = Time.now.to_i
38
+ write_to = File.join(@content_server_content_data_path,
39
+ @last_save_timestamp.to_s + '.cd')
40
+ FileUtils.makedirs(@content_server_content_data_path) unless \
42
41
  File.directory?(@content_server_content_data_path)
43
- count = File.open(write_to, 'wb') { |f| f.write(message.to_s) }
44
- else
45
- Log.debug2("No need to write remote content data, it has not changed.")
46
- end
42
+ count = File.open(write_to, 'wb') { |f| f.write(message.to_s) }
43
+ Log.info("Written content data to file:#{write_to}.")
44
+ else
45
+ Log.info("No need to write remote content data, it has not changed.")
47
46
  end
47
+ end
48
48
 
49
- def run()
50
- threads = []
51
- threads << @remote_tcp.tcp_thread if @remote_tcp != nil
52
- threads << Thread.new do
53
- loop do
54
- # if need content data
55
- if @last_update_timestamp.nil?
56
- sleep_time_span = Params['remote_content_timeout']
57
- else
58
- sleep_time_span = Time.now.to_i - @last_update_timestamp
59
- end
60
-
61
- if sleep_time_span >= Params['remote_content_timeout']
62
- # Send ping!
63
- Log.debug2('Sending remote contend request.')
64
- bytes_written = @remote_tcp.send_obj(nil)
65
- Log.debug3("Bytes written #{bytes_written}.")
66
- end
67
-
68
- sleep_time_span = Time.now.to_i - @last_update_timestamp \
69
- unless @last_update_timestamp.nil?
70
- Log.debug2("sleep_time_span: #{sleep_time_span}")
71
- sleep(sleep_time_span) if sleep_time_span > 0
49
+ def run()
50
+ Log.debug1("Running remote content client.")
51
+ threads = []
52
+ threads << @remote_tcp.tcp_thread if @remote_tcp != nil
53
+ threads << Thread.new do
54
+ Log.debug1("New thread.")
55
+ loop do
56
+ # if need content data
57
+ sleep_time_span = Params['remote_content_save_timeout']
58
+ if !@last_fetch_timestamp.nil?
59
+ sleep_time_span = Time.now.to_i - @last_fetch_timestamp
60
+ end
61
+ Log.debug1("sleep_time_span: #{sleep_time_span}")
62
+ if sleep_time_span >= Params['remote_content_save_timeout']
63
+ # Send ping!
64
+ bytes_written = @remote_tcp.send_obj(nil)
65
+ Log.info("sending ping request for remote content data!")
72
66
  end
67
+ sleep(sleep_time_span) if sleep_time_span > 0
73
68
  end
74
69
  end
75
70
  end
71
+ end
76
72
 
77
- class RemoteContentClient
78
- def initialize(dynamic_content_data, port)
79
- @dynamic_content_data = dynamic_content_data
80
- @tcp_server = Networking::TCPServer.new(port, method(:content_requested))
81
- end
82
-
83
- def content_requested(addr_info, message)
84
- # Send response.
85
- Log.debug1('Local content data requested.')
86
- @tcp_server.send_obj(@dynamic_content_data.last_content_data)
87
- end
73
+ class RemoteContentServer
74
+ def initialize(dynamic_content_data, port)
75
+ @dynamic_content_data = dynamic_content_data
76
+ @tcp_server = Networking::TCPServer.new(port, method(:content_requested))
77
+ Log.debug2("initialize RemoteContentServer on port:#{port}")
78
+ end
88
79
 
89
- def tcp_thread
90
- return @tcp_server.tcp_thread if @tcp_server != nil
91
- nil
92
- end
80
+ def content_requested(addr_info, message)
81
+ # Send response.
82
+ Log.info("Master server received content data request. Sending content data:#{@dynamic_content_data.last_content_data}")
83
+ @tcp_server.send_obj(@dynamic_content_data.last_content_data)
84
+ Log.info('Master server sent content data')
85
+ end
93
86
 
87
+ def tcp_thread
88
+ return @tcp_server.tcp_thread if @tcp_server != nil
89
+ nil
94
90
  end
95
91
 
96
92
  end
93
+
97
94
  end
95
+
@@ -1,5 +1,3 @@
1
- module BBFS
2
1
  module ContentServer
3
- VERSION = "0.0.10"
2
+ VERSION = "1.0.0"
4
3
  end
5
- end
@@ -2,26 +2,24 @@ require 'rspec'
2
2
 
3
3
  require_relative '../../lib/file_copy/copy.rb'
4
4
 
5
- module BBFS
6
- module ContentServer
7
- module Spec
5
+ module ContentServer
6
+ module Spec
8
7
 
9
- describe 'Backup Listener' do
8
+ describe 'Backup Listener' do
10
9
 
11
- end
12
-
13
- describe 'Local file monitor' do
10
+ end
14
11
 
15
- end
12
+ describe 'Local file monitor' do
16
13
 
17
- describe 'Local file indexer' do
14
+ end
18
15
 
19
- end
16
+ describe 'Local file indexer' do
20
17
 
21
- describe 'File copier' do
18
+ end
22
19
 
23
- end
20
+ describe 'File copier' do
24
21
 
25
22
  end
23
+
26
24
  end
27
25
  end
@@ -5,66 +5,64 @@ require 'stringio'
5
5
  require_relative '../../lib/content_server/file_streamer'
6
6
 
7
7
  # Uncomment to debug spec.
8
- BBFS::Params['log_write_to_console'] = false
9
- BBFS::Params['log_write_to_file'] = false
10
- BBFS::Params['log_debug_level'] = 0
11
- BBFS::Params['streaming_chunk_size'] = 5
12
- BBFS::Params.init ARGV
13
- BBFS::Log.init
8
+ Params['log_write_to_console'] = false
9
+ Params['log_write_to_file'] = false
10
+ Params['log_debug_level'] = 0
11
+ Params['streaming_chunk_size'] = 5
12
+ Params.init ARGV
13
+ Log.init
14
14
  # Have to be set to test chunking mechanism.
15
15
 
16
- module BBFS
17
- module ContentServer
18
- module Spec
19
- describe 'FileStreamer' do
20
- it 'should copy one file chunk by chunks and validate content' do
21
- Log.info('#0 start')
22
- orig_file = StringIO.new('Some content. Some content. Some content. Some content.')
23
- Log.info("orig_file #{orig_file.to_s}.")
16
+ module ContentServer
17
+ module Spec
18
+ describe 'FileStreamer' do
19
+ it 'should copy one file chunk by chunks and validate content' do
20
+ Log.info('#0 start')
21
+ orig_file = StringIO.new('Some content. Some content. Some content. Some content.')
22
+ Log.info("orig_file #{orig_file.to_s}.")
24
23
 
25
- # should simulate Tempfile object, thus need to add to this object Tempfile methsods
26
- # that are absent in StringIO, but used in tested ruby code
27
- dest_file = StringIO.new
28
- def dest_file.path
29
- '/tmp/path/tmp_basename'
30
- end
31
- def dest_file.unlink
32
- true
33
- end
34
- Log.info("dest_file #{dest_file.to_s}.")
24
+ # should simulate Tempfile object, thus need to add to this object Tempfile methsods
25
+ # that are absent in StringIO, but used in tested ruby code
26
+ dest_file = StringIO.new
27
+ def dest_file.path
28
+ '/tmp/path/tmp_basename'
29
+ end
30
+ def dest_file.unlink
31
+ true
32
+ end
33
+ Log.info("dest_file #{dest_file.to_s}.")
35
34
 
36
- streamer = nil
37
- done = lambda{ |checksum, filename|
38
- Log.info('#4 streaming done, check content ok.')
39
- dest_file.string().should eq(orig_file.string())
35
+ streamer = nil
36
+ done = lambda{ |checksum, filename|
37
+ Log.info('#4 streaming done, check content ok.')
38
+ dest_file.string().should eq(orig_file.string())
40
39
 
41
- Log.info('#5 exiting streamer thread.')
42
- streamer.thread.exit
43
- }
40
+ Log.info('#5 exiting streamer thread.')
41
+ streamer.thread.exit
42
+ }
44
43
 
45
- receiver = BBFS::ContentServer::FileReceiver.new(done)
46
- send_chunk = lambda { |*args|
47
- receiver.receive_chunk(*args)
48
- streamer.copy_another_chuck('da39a3ee5e6b4b0d3255bfef95601890afd80709')
49
- }
44
+ receiver = ContentServer::FileReceiver.new(done)
45
+ send_chunk = lambda { |*args|
46
+ receiver.receive_chunk(*args)
47
+ streamer.copy_another_chuck('da39a3ee5e6b4b0d3255bfef95601890afd80709')
48
+ }
50
49
 
51
- Log.info('#2 start streaming.')
52
- # This is for FileStreamer :NEW_STREAM and FileReceiver :receive_chunk
53
- ::File.stub(:new).and_return(orig_file, dest_file)
54
- ::FileUtils.stub(:makedirs).and_return(true)
55
- ::FileUtils.stub(:copy_file).and_return(true)
56
- # This is for FileReceiver :handle_last_chunk
57
- ::File.stub(:rename)
58
- # This is for Index agent 'get_checksum' which opens file, read content and validates
59
- # checksum.
60
- ::File.stub(:open).and_return(dest_file)
50
+ Log.info('#2 start streaming.')
51
+ # This is for FileStreamer :NEW_STREAM and FileReceiver :receive_chunk
52
+ ::File.stub(:new).and_return(orig_file, dest_file)
53
+ ::FileUtils.stub(:makedirs).and_return(true)
54
+ ::FileUtils.stub(:copy_file).and_return(true)
55
+ # This is for FileReceiver :handle_last_chunk
56
+ ::File.stub(:rename)
57
+ # This is for Index agent 'get_checksum' which opens file, read content and validates
58
+ # checksum.
59
+ ::File.stub(:open).and_return(dest_file)
61
60
 
62
- streamer = BBFS::ContentServer::FileStreamer.new(send_chunk)
63
- Log.info('#3 start streaming.')
64
- streamer.start_streaming('da39a3ee5e6b4b0d3255bfef95601890afd80709', 'dummy')
65
- streamer.thread.join()
66
- sleep Params['log_param_max_elapsed_time_in_seconds_from_last_flush'] + 1
67
- end
61
+ streamer = ContentServer::FileStreamer.new(send_chunk)
62
+ Log.info('#3 start streaming.')
63
+ streamer.start_streaming('da39a3ee5e6b4b0d3255bfef95601890afd80709', 'dummy')
64
+ streamer.thread.join()
65
+ Log.flush
68
66
  end
69
67
  end
70
68
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: content_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,87 +9,298 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-02 00:00:00.000000000Z
12
+ date: 2013-05-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: content_data
16
- requirement: &16909160 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ! '>='
19
+ - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 1.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *16909160
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: file_indexing
27
- requirement: &16908640 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
- - - ! '>='
35
+ - - '='
31
36
  - !ruby/object:Gem::Version
32
- version: '0'
37
+ version: 1.0.0
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *16908640
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: file_monitoring
38
- requirement: &16908120 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
- - - ! '>='
51
+ - - '='
42
52
  - !ruby/object:Gem::Version
43
- version: '0'
53
+ version: 1.0.0
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *16908120
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: log
49
- requirement: &16907640 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
- - - ! '>='
67
+ - - '='
53
68
  - !ruby/object:Gem::Version
54
- version: '0'
69
+ version: 1.0.0
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *16907640
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.0.0
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: networking
60
- requirement: &16907220 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
- - - ! '>='
83
+ - - '='
64
84
  - !ruby/object:Gem::Version
65
- version: '0'
85
+ version: 1.0.0
66
86
  type: :runtime
67
87
  prerelease: false
68
- version_requirements: *16907220
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.0.0
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: params
71
- requirement: &16906580 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 1.0.0
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.0.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: process_monitoring
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 1.0.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - '='
124
+ - !ruby/object:Gem::Version
125
+ version: 1.0.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: rake
128
+ requirement: !ruby/object:Gem::Requirement
72
129
  none: false
73
130
  requirements:
74
- - - ! '>='
131
+ - - '='
75
132
  - !ruby/object:Gem::Version
76
- version: '0'
133
+ version: 0.9.2.2
77
134
  type: :runtime
78
135
  prerelease: false
79
- version_requirements: *16906580
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - '='
140
+ - !ruby/object:Gem::Version
141
+ version: 0.9.2.2
80
142
  - !ruby/object:Gem::Dependency
81
143
  name: run_in_background
82
- requirement: &16905880 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - '='
148
+ - !ruby/object:Gem::Version
149
+ version: 1.0.0
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - '='
156
+ - !ruby/object:Gem::Version
157
+ version: 1.0.0
158
+ - !ruby/object:Gem::Dependency
159
+ name: content_data
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - '='
164
+ - !ruby/object:Gem::Version
165
+ version: 1.0.0
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 1.0.0
174
+ - !ruby/object:Gem::Dependency
175
+ name: file_indexing
176
+ requirement: !ruby/object:Gem::Requirement
83
177
  none: false
84
178
  requirements:
85
- - - ! '>='
179
+ - - '='
86
180
  - !ruby/object:Gem::Version
87
- version: '0'
181
+ version: 1.0.0
88
182
  type: :runtime
89
183
  prerelease: false
90
- version_requirements: *16905880
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - '='
188
+ - !ruby/object:Gem::Version
189
+ version: 1.0.0
190
+ - !ruby/object:Gem::Dependency
191
+ name: file_monitoring
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - '='
196
+ - !ruby/object:Gem::Version
197
+ version: 1.0.0
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - '='
204
+ - !ruby/object:Gem::Version
205
+ version: 1.0.0
206
+ - !ruby/object:Gem::Dependency
207
+ name: log
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - '='
212
+ - !ruby/object:Gem::Version
213
+ version: 1.0.0
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - '='
220
+ - !ruby/object:Gem::Version
221
+ version: 1.0.0
222
+ - !ruby/object:Gem::Dependency
223
+ name: networking
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - '='
228
+ - !ruby/object:Gem::Version
229
+ version: 1.0.0
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - '='
236
+ - !ruby/object:Gem::Version
237
+ version: 1.0.0
238
+ - !ruby/object:Gem::Dependency
239
+ name: params
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - '='
244
+ - !ruby/object:Gem::Version
245
+ version: 1.0.0
246
+ type: :runtime
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - '='
252
+ - !ruby/object:Gem::Version
253
+ version: 1.0.0
254
+ - !ruby/object:Gem::Dependency
255
+ name: process_monitoring
256
+ requirement: !ruby/object:Gem::Requirement
257
+ none: false
258
+ requirements:
259
+ - - '='
260
+ - !ruby/object:Gem::Version
261
+ version: 1.0.0
262
+ type: :runtime
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - '='
268
+ - !ruby/object:Gem::Version
269
+ version: 1.0.0
270
+ - !ruby/object:Gem::Dependency
271
+ name: rake
272
+ requirement: !ruby/object:Gem::Requirement
273
+ none: false
274
+ requirements:
275
+ - - '='
276
+ - !ruby/object:Gem::Version
277
+ version: 0.9.2.2
278
+ type: :runtime
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ none: false
282
+ requirements:
283
+ - - '='
284
+ - !ruby/object:Gem::Version
285
+ version: 0.9.2.2
286
+ - !ruby/object:Gem::Dependency
287
+ name: run_in_background
288
+ requirement: !ruby/object:Gem::Requirement
289
+ none: false
290
+ requirements:
291
+ - - '='
292
+ - !ruby/object:Gem::Version
293
+ version: 1.0.0
294
+ type: :runtime
295
+ prerelease: false
296
+ version_requirements: !ruby/object:Gem::Requirement
297
+ none: false
298
+ requirements:
299
+ - - '='
300
+ - !ruby/object:Gem::Version
301
+ version: 1.0.0
91
302
  description: Monitor and Index a directory and back it up to backup server.
92
- email: kolmanv@gmail.com
303
+ email: bbfsdev@gmail.com
93
304
  executables:
94
305
  - content_server
95
306
  - backup_server
@@ -99,15 +310,17 @@ files:
99
310
  - lib/content_server.rb
100
311
  - lib/content_server/file_streamer.rb
101
312
  - lib/content_server/queue_copy.rb
313
+ - lib/content_server/content_server.rb
102
314
  - lib/content_server/content_receiver.rb
103
315
  - lib/content_server/remote_content.rb
104
316
  - lib/content_server/version.rb
317
+ - lib/content_server/backup_server.rb
105
318
  - lib/content_server/queue_indexer.rb
106
319
  - spec/content_server/content_server_spec.rb
107
320
  - spec/content_server/file_streamer_spec.rb
108
321
  - bin/content_server
109
322
  - bin/backup_server
110
- homepage: http://github.com/kolmanv/bbfs
323
+ homepage: http://github.com/bbfsdev/bbfs
111
324
  licenses: []
112
325
  post_install_message:
113
326
  rdoc_options: []
@@ -127,7 +340,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
340
  version: '0'
128
341
  requirements: []
129
342
  rubyforge_project:
130
- rubygems_version: 1.8.10
343
+ rubygems_version: 1.8.24
131
344
  signing_key:
132
345
  specification_version: 3
133
346
  summary: Servers for backing up content.