sqlite_server2018_plus 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6900438f7b755d08eedf31edf27cc0ee526c92f7512d7d1e6fcd8eabb5c36081
4
+ data.tar.gz: e0cc5c285f94952d175880b1836029c5841ea6eb5248837206c7e7ea291dfe4f
5
+ SHA512:
6
+ metadata.gz: e65ee264b49bd330702575717fa30c51b02514a9250c31c127c0cce309d08350d04029d678920ec2215c4136aa2cbce180a40d99eea187e8a0793557b3b35e2e
7
+ data.tar.gz: ea370c2daa39de8ecfcb564b22832e5482ce7ae336fc84903122b6d8c56ed449234dc8ecf21f70f7b218742af9b02921ca3b3962ea602b69ab93d5c231baefb1
checksums.yaml.gz.sig ADDED
Binary file
data.tar.gz.sig ADDED
Binary file
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: sqlite_server2018_plus.rb
4
+
5
+ # description: Designed to provide fault tolerant access to a DRb SQLite server
6
+ # when 2 or more back-end nodes are running.
7
+
8
+ require 'drb'
9
+ require 'socket'
10
+
11
+ class SQLiteServer2018PlusException < Exception
12
+ end
13
+
14
+ class SQLiteServer2018
15
+
16
+ attr_accessor :nodes
17
+
18
+ def initialize(nodes, debug: debug)
19
+
20
+ @nodes, @debug = nodes, debug
21
+
22
+
23
+ if (nodes & Socket.ip_address_list.map(&:ip_address)).any? then
24
+ raise SQLiteServer2018PlusException,
25
+ 'Cannot use host IP address in node list'
26
+ end
27
+
28
+ @failcount = 0
29
+ @db = fetch_server(nodes.first)
30
+
31
+ end
32
+
33
+ def execute(dbfile, *args, &blk)
34
+
35
+ puts 'inside SQLiteServer2018::execute args: ' + args.inspect if @debug
36
+
37
+ if block_given? then
38
+ a = db_op { @db.execute(dbfile, *args) }
39
+ a.each(&blk)
40
+ else
41
+ db_op { @db.execute dbfile, *args, &blk }
42
+ end
43
+
44
+ end
45
+
46
+ def exists?(dbfile)
47
+
48
+ puts 'inside SQLiteServer2018::exists?' if @debug
49
+ db_op { @db.exists? dbfile }
50
+
51
+ end
52
+
53
+ def load(dbfile)
54
+
55
+ puts 'inside SQLiteServer2018::load' if @debug
56
+ db_op { @db.load dbfile }
57
+
58
+ end
59
+
60
+ def query(*args, &blk)
61
+
62
+ puts 'inside SQLiteServer2018::query args: ' + args.inspect if @debug
63
+ db_op { @db.query *args, &blk }
64
+
65
+ end
66
+
67
+
68
+ private
69
+
70
+ def db_op()
71
+
72
+ begin
73
+ r = yield()
74
+ @failcount = 0
75
+ r
76
+ rescue
77
+ puts 'warning: ' + ($!).inspect
78
+
79
+ if @debug then
80
+ puts '@nodes: ' + @nodes.inspect
81
+ puts '@failcount: ' + @failcount.inspect
82
+ end
83
+
84
+ @nodes.rotate!
85
+ @db = fetch_server(@nodes.first)
86
+ @failcount += 1
87
+ retry unless @failcount > @nodes.length
88
+ raise 'SQLiteServer2018Plus nodes exhausted'
89
+ exit
90
+ end
91
+
92
+ end
93
+
94
+ def fetch_server(host)
95
+ port = '57000'
96
+ DRbObject.new nil, "druby://#{host}:#{port}"
97
+ end
98
+
99
+ end
100
+
101
+ class SQLiteServer2018Plus
102
+
103
+
104
+ def initialize(host: 'localhost', port: '57000', nodes: [], debug: false)
105
+
106
+ @host, @port, @nodes, @debug = host, port, nodes, debug
107
+
108
+ end
109
+
110
+ def start()
111
+
112
+ DRb.start_service "druby://#{@host}:#{@port}",
113
+ SQLiteServer2018.new(@nodes, debug: @debug)
114
+ DRb.thread.join
115
+
116
+ end
117
+
118
+ end
119
+
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sqlite_server2018_plus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwODMxMTI0ODQ2WhcN
15
+ MTkwODMxMTI0ODQ2WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC+iQhB
17
+ 9U3O5NYFtISb/MQTonQ38h8X9b0pgOJunGDv4JahCD839BfV3GEg4aZh0fjl+nhf
18
+ nW5k3sRrJCuUkjk4pHbDDW0UuAFl2rpYBHUuyns+imVw3usuZyoXuIKd8kE81rhK
19
+ c+9Qhre75OuAMXcydo6jxV5bfpoHD6F2k8PmEklXVMVgHEU0TxIBQTa9e6grx/5x
20
+ j1d1K61krWlcyIZtL4Bh9xyoNo1VcKJ75thGoBSfqJSDtREyRUgsL8j2oRqb/lXE
21
+ PnW4OiBnWWV8+++x9ScLfNbg4/Y/an/N/dzYejv9r6QQwz6RB7X+WiaWnAJgNn1v
22
+ r0+VQV8+bhtyVz8PcBhWFDTWRV8odn/t2IBchjupRioB4Hq/0o6m/a1lD7xBYSkS
23
+ 1BSCm5luR/KedpdFoXEfa3tT+1BS01MQAwZTDllXWFDRwo4HnVrbhBrWt8Ay0hYF
24
+ Ry4fppvHq0xfTvJFocdDXQlBD2iRGgU5ufQ/y0Ga59dk24CD+XCdG/N50wsCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUC/CQuMEP
26
+ evbG2lWyw7szctTvft8wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEApmGw5ylga5KwleDwFprFCdRmzIT07Z1vmae51/Nb
29
+ slI4Q1bCiK39XTBGF2e1Kj5lDlHWtTfIY+KF70aQkTkW1wuSL73V+7ijUBEs8cbd
30
+ SY73rb92qAbTrBUFJYwLJIqqDVlwNfCkNfHtlTeD5lJTc2T5QZGFlh3yfAWEvQBD
31
+ lXP8/JQGjKyh1mMssMhtz/zF9c1w0pDp51gGBxF+U87wM5AY2DPhvFavnRXwv55f
32
+ Zl3U10AHZfb6HDm9Gn6ikqwxilV90G/QwqWY04A7oQLgBBzkixIipx6sBvik5wDn
33
+ gSusXrtWbut94fK6chN/yHZWok5r07UcdiEkYen7UKy2aUTUHDm7s2ZSAOEKAVJ8
34
+ 0dVz12h8YVl/k52cLLQSHELjpfj745eFNw8OpOMI4fjKxddZRiKuTYPBIxrt1qjR
35
+ +dKNs1JqPjM4l+H0RuY7wuiq2vnC73wCJp9RbRu5V/LGpRr0LgL6ZnjtcFfsmX5O
36
+ V2nAiVKAs4Tra2rVUd8oAqsS
37
+ -----END CERTIFICATE-----
38
+ date: 2018-08-31 00:00:00.000000000 Z
39
+ dependencies: []
40
+ description:
41
+ email: james@jamesrobertson.eu
42
+ executables: []
43
+ extensions: []
44
+ extra_rdoc_files: []
45
+ files:
46
+ - lib/sqlite_server2018_plus.rb
47
+ homepage: https://github.com/jrobertson/sqlite_server2018_plus
48
+ licenses:
49
+ - MIT
50
+ metadata: {}
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 2.7.6
68
+ signing_key:
69
+ specification_version: 4
70
+ summary: sqlite_server2018_plus
71
+ test_files: []
metadata.gz.sig ADDED
Binary file