tupelo 0.1 → 0.2

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/tspy +40 -0
  3. data/bin/tup +163 -0
  4. data/lib/tupelo/version.rb +1 -1
  5. metadata +6 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7b7dc03d833db67770e720b9bea6ec44cecd57e
4
- data.tar.gz: 86bda705a11cd4802746fe77d9f14e7c74537685
3
+ metadata.gz: 85aab8de585bbe205e0d0646ed13c3c59e6fc364
4
+ data.tar.gz: d43dd9d8e6dfe6c6b76380d25715cf25d5ea442f
5
5
  SHA512:
6
- metadata.gz: baa626f2c08643a301200896da84b68e2b6ed0d3d30fa9c296a36c514df660c035608eec8b77ace273093fed35673038dd273d996c8158a868455b70ee8ef850
7
- data.tar.gz: 1b18b2f49961bb0741331dc493024f5643db0cf49ed2c0d0029ff05f8b2a2a44b5e98a2be61b6d6034fa49fbc6a901b811d00380106fcd43e83950de95340df9
6
+ metadata.gz: 4bed46e18b23568aa1a0cb29d4900a279cdc202c7deb8bd43c3c77e69b6de7741ddcf333a929723a1d5cf7e5e913be17ead8af24db0c57783e3faf8c2e80dfed
7
+ data.tar.gz: 5c858ea811be67a255f09c9fae784a62f7afc993c41c1188280fda67554f8b8884b9928d96dba5b5153b63425ff08495044a1eae2c2a48e86bc4b1c43d4d9bad
data/bin/tspy ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ARGV.delete("-h") or ARGV.delete("--help")
4
+ puts <<-END
5
+ Usage:
6
+ #$0 servers_file
7
+
8
+ Connect to the tuplespace specified by the servers_file and
9
+ use the notification api to print out all events.
10
+
11
+ For example, you can start a tup with
12
+
13
+ tup svr
14
+
15
+ and then in another terminal
16
+
17
+ tspy svr
18
+
19
+ Options:
20
+
21
+ --debug set the log level
22
+ --info
23
+ --warn <-- default
24
+ --error
25
+ --fatal
26
+ END
27
+ exit
28
+ end
29
+
30
+ require 'tupelo/app'
31
+
32
+ Tupelo.application do |app|
33
+ app.local do |client|
34
+ note = client.notifier
35
+ client.log "%10s %10s %10s %s" % %w{ status tick client operation }
36
+ loop do
37
+ client.log "%10s %10d %10d %p" % note.wait
38
+ end
39
+ end
40
+ end
data/bin/tup ADDED
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ARGV.delete("-h") or ARGV.delete("--help")
4
+ puts <<-END
5
+ Usage:
6
+ #$0
7
+
8
+ #$0 servers_file
9
+ #$0 servers_file <script...
10
+
11
+ #$0 servers_file unix [path]
12
+ #$0 servers_file tcp [host [port]]]
13
+
14
+ The first form starts a tuplespace server as a child process. Then it
15
+ enters an interactive session in which the current object is the proxy to
16
+ that tuplespace. This form is useful for an isolated tuplespace for
17
+ simple experiments.
18
+
19
+ The second form tries to open the servers_file. If it cannot, then as in the
20
+ first form, it starts a tuplespace server child process and writes its
21
+ address to servers_file. If it can open the servers_file, then it simply
22
+ connects to the referenced tuplespace server. In either case, as in the
23
+ first form, an interactive session starts. This form (in its two variants)
24
+ is useful for starting two sessions operating on the same tuplespace.
25
+
26
+ The third form is like the second form, but executes the input instead of
27
+ starting an interactive session. Output is like irb output, with input lines
28
+ alternating with their output. This is useful for generating human-readable
29
+ transcripts.
30
+
31
+ The fourth and fifth forms are like the previous, but can be used to expose
32
+ the server on more or less public sockets with specified addresses. In the
33
+ tcp case, the servers_file can be copied to other hosts and used with tup
34
+ to connect to the servers (adjust the host references as needed). The
35
+ default for unix is, as in the first three forms, a path in a tmpdir. The
36
+ default for tcp is localhost with port 0, and hence a dynamically chosen
37
+ port. These forms are only for starting a new server; connecting to an
38
+ existing server uses the simpler form "#$0 servers_file".
39
+
40
+ Options:
41
+
42
+ --debug set the log level
43
+ --info
44
+ --warn <-- default
45
+ --error
46
+ --fatal
47
+
48
+ -v verbose mode (include time and pid in log messages)
49
+
50
+ --pubsub publish/subscribe mode; does not keep local tuple store:
51
+
52
+ * read only works in blocking mode (waiting for new tuple)
53
+ * write and pulse work normally
54
+ * take does not work
55
+
56
+ --marshal use specified library to serialize objects
57
+ --yaml
58
+ --json
59
+ --msgpack <-- default
60
+
61
+ END
62
+ exit
63
+ end
64
+
65
+ require 'easy-serve'
66
+
67
+ log_level = case
68
+ when ARGV.delete("--debug"); Logger::DEBUG
69
+ when ARGV.delete("--info"); Logger::INFO
70
+ when ARGV.delete("--warn"); Logger::WARN
71
+ when ARGV.delete("--error"); Logger::ERROR
72
+ when ARGV.delete("--fatal"); Logger::FATAL
73
+ else Logger::WARN
74
+ end
75
+ verbose = ARGV.delete("-v")
76
+ pubsub = ARGV.delete("--pubsub")
77
+
78
+ blob_type = nil
79
+ %w{--marshal --yaml --json --msgpack}.each do |switch|
80
+ s = ARGV.delete(switch) and
81
+ blob_type ||= s.delete("--")
82
+ end
83
+
84
+ ez_opts = {
85
+ servers_file: ARGV.shift,
86
+ interactive: $stdin.isatty
87
+ }
88
+
89
+ addr = ARGV.shift(3)
90
+
91
+ EasyServe.start ez_opts do |ez|
92
+ log = ez.log
93
+ log.level = log_level
94
+ log.formatter = nil if verbose
95
+ log.progname = File.basename($0)
96
+
97
+ ez.start_servers do
98
+ arc_to_seq_sock, seq_to_arc_sock = UNIXSocket.pair
99
+ arc_to_cseq_sock, cseq_to_arc_sock = UNIXSocket.pair
100
+
101
+ ez.server :seqd, *addr do |svr|
102
+ require 'funl/message-sequencer'
103
+ seq_opts = {}
104
+ seq_opts[:blob_type] = blob_type if blob_type
105
+ seq = Funl::MessageSequencer.new svr, seq_to_arc_sock, log: log,
106
+ **seq_opts
107
+ seq.start ## thwait? or can easy-serve do that?
108
+ end
109
+
110
+ ez.server :cseqd, *addr do |svr|
111
+ require 'funl/client-sequencer'
112
+ cseq = Funl::ClientSequencer.new svr, cseq_to_arc_sock, log: log
113
+ cseq.start
114
+ end
115
+
116
+ ez.server :arcd, *addr do |svr|
117
+ require 'tupelo/archiver'
118
+ arc = Tupelo::Archiver.new svr, seq: arc_to_seq_sock,
119
+ cseq: arc_to_cseq_sock, log: log
120
+ arc.start
121
+ end
122
+ end
123
+
124
+ ez.local :seqd, :cseqd, :arcd do |seqd, cseqd, arcd|
125
+ log.progname = "client <starting in #{log.progname}>"
126
+
127
+ require 'tupelo/client'
128
+ class TupClient < Tupelo::Client
129
+ alias w write_wait
130
+ alias pl pulse_wait
131
+ alias t take
132
+ alias r read_wait
133
+ alias ra read_all
134
+ alias tr transaction
135
+ CMD_ALIASES = %w{ w pl t r ra tr }
136
+ private *CMD_ALIASES
137
+ end
138
+
139
+ client_opts = {seq: seqd, cseq: cseqd, log: log}
140
+ if pubsub
141
+ client_opts[:arc] = nil
142
+ client_opts[:tuplespace] = TupClient::NullTuplespace
143
+ else
144
+ client_opts[:arc] = arcd
145
+ end
146
+
147
+ client = TupClient.new client_opts
148
+ client.start do
149
+ log.progname = "client #{client.client_id}"
150
+ end
151
+ log.info {
152
+ "cpu time: %.2fs" % Process.times.inject {|s,x|s+x}
153
+ }
154
+ log.info {
155
+ "starting shell. Commands: #{TupClient::CMD_ALIASES.join(", ")}"
156
+ }
157
+
158
+ require 'irb-shell'
159
+ IRB.start_session(client)
160
+
161
+ client.stop
162
+ end
163
+ end
@@ -1,3 +1,3 @@
1
1
  module Tupelo
2
- VERSION = "0.1"
2
+ VERSION = "0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tupelo
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel VanderWerf
@@ -26,7 +26,9 @@ dependencies:
26
26
  version: '0'
27
27
  description: Distributed tuplespace.
28
28
  email: vjoel@users.sourceforge.net
29
- executables: []
29
+ executables:
30
+ - tup
31
+ - tspy
30
32
  extensions: []
31
33
  extra_rdoc_files:
32
34
  - README.md
@@ -96,6 +98,8 @@ files:
96
98
  - test/unit/test-mock-seq.rb
97
99
  - test/unit/test-mock-queue.rb
98
100
  - test/stress/concurrent-transactions.rb
101
+ - bin/tup
102
+ - bin/tspy
99
103
  homepage: https://github.com/vjoel/tupelo
100
104
  licenses:
101
105
  - BSD