archipelago 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/TODO +14 -8
- data/lib/archipelago/disco.rb +14 -1
- metadata +2 -2
data/TODO
CHANGED
@@ -1,16 +1,22 @@
|
|
1
1
|
|
2
|
-
* Create a
|
3
|
-
|
2
|
+
* Create a failover/redundancy framework
|
3
|
+
* For example: Create a new HashishProvider with built in redundancy,
|
4
|
+
for example using the Chord project: http://pdos.csail.mit.edu/chord/
|
5
|
+
* Or: Create migration methods that move objects between Chests opon
|
6
|
+
startup and shutdown, and make them keep backups at each others
|
7
|
+
persistence backends.
|
4
8
|
|
5
9
|
* Make Chest aware about whether transactions have affected it 'for real' ie
|
6
10
|
check whether the instance before the call differs from the instance after
|
7
11
|
the call. Preferably without incurring performance lossage.
|
8
|
-
|
9
|
-
|
10
|
-
whether they are to be considered dirty, clean or auto-select.
|
12
|
+
* For example: Make Dubloon proxy targets able to provide a dirty_state
|
13
|
+
method that decide whether they are to be considered dirty, clean or auto-select.
|
11
14
|
|
12
15
|
* Test the transaction recovery mechanism of Chest.
|
13
16
|
|
14
|
-
*
|
15
|
-
|
16
|
-
|
17
|
+
* Create a memcached-starter that publishes the address to the started memcached
|
18
|
+
instance on the Disco network.
|
19
|
+
|
20
|
+
* Create a memcached-client that uses Disco instance to find all memcached instances
|
21
|
+
in the network and distribute requests among them.
|
22
|
+
|
data/lib/archipelago/disco.rb
CHANGED
@@ -409,7 +409,9 @@ module Archipelago
|
|
409
409
|
@unicast_address = "#{HOST}:#{this_port}"
|
410
410
|
|
411
411
|
@sender = UDPSocket.new
|
412
|
-
@
|
412
|
+
@multiaddress = options[:address] || ADDRESS
|
413
|
+
@multiport = options[:port] || PORT
|
414
|
+
@sender.connect(@multiaddress, @multiport)
|
413
415
|
|
414
416
|
@unisender = UDPSocket.new
|
415
417
|
end
|
@@ -530,9 +532,17 @@ module Archipelago
|
|
530
532
|
recipient, data = @outgoing.pop
|
531
533
|
if recipient
|
532
534
|
address, port = recipient.split(/:/)
|
535
|
+
if $DEBUG
|
536
|
+
puts "sending to #{address}:#{port}:"
|
537
|
+
puts Marshal.dump(data)
|
538
|
+
end
|
533
539
|
@unisender.send(Marshal.dump(data), 0, address, port.to_i)
|
534
540
|
else
|
535
541
|
begin
|
542
|
+
if $DEBUG
|
543
|
+
puts "broadcasting to #{@multiaddress}:#{@multiport}:"
|
544
|
+
puts Marshal.dump(data)
|
545
|
+
end
|
536
546
|
@sender.write(Marshal.dump(data))
|
537
547
|
rescue Errno::ECONNREFUSED => e
|
538
548
|
retry
|
@@ -554,6 +564,9 @@ module Archipelago
|
|
554
564
|
loop do
|
555
565
|
begin
|
556
566
|
@incoming << Marshal.load(@listener.recv(1024))
|
567
|
+
rescue ArgumentError => e
|
568
|
+
# An ArgumentError here means that the data describes a class we dont know anything
|
569
|
+
# about, which we just have to ignore.
|
557
570
|
rescue Exception => e
|
558
571
|
puts e
|
559
572
|
pp e.backtrace
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: archipelago
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.2.4
|
7
|
+
date: 2006-12-02 00:00:00 +01:00
|
8
8
|
summary: A set of tools for distributed computing in ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib
|