seapig-server 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/seapig-server +22 -13
- data/lib/seapig/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e65c3f295cd0df66fa6eb84b5f378f5bdaf154c
|
4
|
+
data.tar.gz: bc08a91525e10c22b8b43f53229c88730fc9cb87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d45ae2a851d939a90e515d2fb1f77f45cec89448d66f5e4e57e9817b964814fcb97a7f49335d45c9c488176426236c45cd8b829e99ed26d138f6310183ed2bf2
|
7
|
+
data.tar.gz: 955bcee21a5a417cbaa682562336c618a10380f9c7c8261f8a72f70c35f5a95f2eb8efe5635494bb5689d2db07825dbddafef4ac551c7cb11e9ebab7360089c6
|
data/bin/seapig-server
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
require 'websocket-eventmachine-server'
|
5
5
|
require 'narray'
|
6
6
|
require 'oj'
|
7
|
-
require '
|
7
|
+
require 'jsondiff'
|
8
8
|
require 'hana'
|
9
9
|
require 'set'
|
10
10
|
|
@@ -18,7 +18,7 @@ OBJECT_CACHE_SIZE = 1
|
|
18
18
|
|
19
19
|
$stdout.sync = true
|
20
20
|
|
21
|
-
Oj.default_options = { mode: :
|
21
|
+
Oj.default_options = { mode: :compat }
|
22
22
|
|
23
23
|
|
24
24
|
module WebSocket
|
@@ -141,6 +141,11 @@ module SeapigObjectStore
|
|
141
141
|
end
|
142
142
|
|
143
143
|
|
144
|
+
# data can be one of:
|
145
|
+
# - Hash => given version corresponds to given data
|
146
|
+
# - false => given version has no data (aka. stall)
|
147
|
+
# - true => given version exists (data unknown)
|
148
|
+
# - nil => given version could not be generated (data unknown)
|
144
149
|
def self.version_set(client,id,version,data,requested_version)
|
145
150
|
raise "Update of pattern doesn't make sense" if id.starexp?
|
146
151
|
|
@@ -165,7 +170,7 @@ module SeapigObjectStore
|
|
165
170
|
end
|
166
171
|
}
|
167
172
|
if version.kind_of? Hash
|
168
|
-
object.version_needed = {} if not object.version_needed
|
173
|
+
object.version_needed = {} if (not object.version_needed) or object.version_needed.kind_of?(Integer)
|
169
174
|
old_dependencies = (@@dependencies[id] or Set.new)
|
170
175
|
new_dependencies = (@@dependencies[id] = Set.new(version.keys))
|
171
176
|
(new_dependencies - old_dependencies).each { |added_dependency|
|
@@ -237,7 +242,9 @@ private
|
|
237
242
|
|
238
243
|
def version_set(data,version,requested_version)
|
239
244
|
return false if data == nil
|
240
|
-
return false if not version_newer?(version)
|
245
|
+
return false if not SeapigObject.version_newer?(version_latest, version)
|
246
|
+
@version_needed = version if data == true and ((not @version_needed) or SeapigObject.version_newer?(@version_needed, version))
|
247
|
+
return false if data == true
|
241
248
|
@versions << [version,data]
|
242
249
|
(Set.new(@wildcard_consumers.keys)+@direct_consumers).each { |client| client.object_update(@id, version, data) } if data
|
243
250
|
versions_with_valid_data = 0
|
@@ -257,8 +264,7 @@ private
|
|
257
264
|
end
|
258
265
|
|
259
266
|
|
260
|
-
def version_newer?(vb)
|
261
|
-
latest = version_latest
|
267
|
+
def self.version_newer?(latest,vb)
|
262
268
|
return latest <=> vb if (not latest.kind_of?(Hash)) and (not vb.kind_of?(Hash))
|
263
269
|
return -1 if (not latest.kind_of?(Hash)) and ( vb.kind_of?(Hash))
|
264
270
|
return 1 if ( latest.kind_of?(Hash)) and (not vb.kind_of?(Hash))
|
@@ -390,7 +396,7 @@ private
|
|
390
396
|
def self.dequeue(client,object)
|
391
397
|
object = @@queue.find { |candidate_object| candidate_object.direct_producers.include?(client) or candidate_object.wildcard_producers.has_key?(client) } if not object
|
392
398
|
return false if not @@queue.include?(object)
|
393
|
-
version_snapshot = (object.version_needed == nil ? nil : object.version_needed.clone)
|
399
|
+
version_snapshot = (object.version_needed == nil ? nil : (object.version_needed.kind_of?(Fixnum) ? object.version_needed : object.version_needed.clone))
|
394
400
|
client.object_produce(object.id, version_snapshot)
|
395
401
|
@@queue.delete(object)
|
396
402
|
@@producing[client] = object
|
@@ -480,9 +486,10 @@ class Client
|
|
480
486
|
end
|
481
487
|
|
482
488
|
|
483
|
-
def producer_register(pattern)
|
489
|
+
def producer_register(pattern, known_version)
|
484
490
|
@produces.add(pattern)
|
485
491
|
SeapigObjectStore.producer_register(pattern, self)
|
492
|
+
SeapigObjectStore.version_set(self, pattern, known_version, true, false) if known_version and not pattern.starexp?
|
486
493
|
end
|
487
494
|
|
488
495
|
|
@@ -497,9 +504,11 @@ class Client
|
|
497
504
|
end
|
498
505
|
|
499
506
|
|
500
|
-
def consumer_register(pattern)
|
507
|
+
def consumer_register(pattern, known_version)
|
501
508
|
@consumes.add(pattern)
|
509
|
+
@versions[pattern] = known_version if not pattern.starexp?
|
502
510
|
SeapigObjectStore.consumer_register(pattern, self)
|
511
|
+
gc_versions
|
503
512
|
end
|
504
513
|
|
505
514
|
|
@@ -527,7 +536,7 @@ class Client
|
|
527
536
|
{ "value" => object_data }
|
528
537
|
else
|
529
538
|
diff = SeapigObjectStore.cache_get(object_id,[:diff,old_version,object_version])
|
530
|
-
diff = SeapigObjectStore.cache_set(object_id,[:diff,old_version,object_version],JsonDiff.
|
539
|
+
diff = SeapigObjectStore.cache_set(object_id,[:diff,old_version,object_version],JsonDiff.generate(old_data, object_data)) if not diff
|
531
540
|
{ "patch" => diff }
|
532
541
|
end
|
533
542
|
|
@@ -607,7 +616,7 @@ class Client
|
|
607
616
|
|
608
617
|
|
609
618
|
def self.send_heartbeats
|
610
|
-
@@clients_by_socket.each_pair { |socket,client| socket.send Oj.dump(action
|
619
|
+
@@clients_by_socket.each_pair { |socket,client| socket.send Oj.dump('action' => 'heartbeat') if client.options['heartbeat'] }
|
611
620
|
end
|
612
621
|
|
613
622
|
|
@@ -664,7 +673,7 @@ EM.run {
|
|
664
673
|
case message['action']
|
665
674
|
when 'object-producer-register'
|
666
675
|
fail unless message['pattern']
|
667
|
-
client.producer_register(message['pattern'])
|
676
|
+
client.producer_register(message['pattern'],message['known-version'])
|
668
677
|
when 'object-producer-unregister'
|
669
678
|
fail unless message['pattern']
|
670
679
|
client.producer_unregister(message['pattern'])
|
@@ -673,7 +682,7 @@ EM.run {
|
|
673
682
|
client.object_patch(object_id,message['patch'], message['value'], message['old_version'], message['new_version'])
|
674
683
|
when 'object-consumer-register'
|
675
684
|
fail unless message['id']
|
676
|
-
client.consumer_register(object_id)
|
685
|
+
client.consumer_register(object_id,message['known-version'])
|
677
686
|
when 'object-consumer-unregister'
|
678
687
|
fail unless message['id']
|
679
688
|
client.consumer_unregister(object_id)
|
data/lib/seapig/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seapig-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yunta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09
|
11
|
+
date: 2016-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket-eventmachine-server
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: jsondiff
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|