odba 1.0.0 → 1.0.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.
File without changes
@@ -0,0 +1,36 @@
1
+ = odba
2
+
3
+ ODBA is an unintrusive Object Cache system. It adresses the crosscutting
4
+ concern of object storage by disconnecting and serializing objects into
5
+ storage. All disconnected connections are replaced by instances of
6
+ ODBA::Stub, thus enabling transparent object-loading.
7
+
8
+ == ODBA supports
9
+
10
+ * transparent loading of connected objects
11
+ * index-vectors
12
+ * transactions
13
+ * transparently fetches Hash-Elements without loading the entire Hash
14
+
15
+ == Example
16
+ include 'odba'
17
+
18
+ # connect default storage manager to a relational database
19
+ ODBA.storage.dbi = ODBA::ConnectionPool.new('DBI::pg::database', 'user', 'pw')
20
+
21
+ class Counter
22
+ include ODBA::Persistable
23
+ def initialize
24
+ @pos = 0
25
+ end
26
+ def up
27
+ @pos += 1
28
+ self.odba_store
29
+ @pos
30
+ end
31
+ def down
32
+ @pos -= 1
33
+ self.odba_store
34
+ @pos
35
+ end
36
+ end
@@ -1,3 +1,7 @@
1
+ === 1.0.1 / 08.12.2010
2
+
3
+ * Added file lock exclusive control to create a new odba_id between processes.
4
+
1
5
  === 1.0.0 / 20.12.2010
2
6
 
3
7
  * Add ODBA.cache.index_matches(index_name, substring)
File without changes
data/README.txt CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  * http://scm.ywesee.com/?p=odba/.git;a=summary
4
4
 
5
+ To see a graphical overview of the Library please see
6
+
7
+ * http://odba.rubyforge.org/odba.jpeg
8
+
5
9
  == DESCRIPTION:
6
10
 
7
11
  Object Database Access - Ruby Software for ODDB.org Memory Management
data/Rakefile CHANGED
@@ -3,6 +3,8 @@
3
3
  require 'rubygems'
4
4
  require 'hoe'
5
5
 
6
+ Hoe.plugin :git
7
+
6
8
  # Hoe.plugin :compiler
7
9
  # Hoe.plugin :cucumberfeatures
8
10
  # Hoe.plugin :gem_prelude_sucks
@@ -1,61 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- #-- ODBA -- odba -- 13.05.2004 -- hwyss@ywesee.com rwaltert@ywesee.com mwalder@ywesee.com
3
- # Copyright (C) 2004 Hannes Wyss
4
- #
5
- # This library is free software; you can redistribute it and/or
6
- # modify it under the terms of the GNU Lesser General Public
7
- # License as published by the Free Software Foundation; either
8
- # version 2.1 of the License, or (at your option) any later version.
9
- #
10
- # This library is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- # Lesser General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU Lesser General Public
16
- # License along with this library; if not, write to the Free Software
17
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
- #
19
- # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Z�rich, Switzerland
20
- # hwyss@ywesee.com
21
- #++
22
- # = ODBA - Object DataBase Access
23
- #
24
- # ODBA is an unintrusive Object Cache system. It adresses the crosscutting
25
- # concern of object storage by disconnecting and serializing objects into
26
- # storage. All disconnected connections are replaced by instances of
27
- # ODBA::Stub, thus enabling transparent object-loading.
28
- #
29
- # ODBA supports:
30
- # * transparent loading of connected objects
31
- # * index-vectors
32
- # * transactions
33
- # * transparently fetches Hash-Elements without loading the entire Hash
34
- #
35
- # == Example
36
- # include 'odba'
37
- #
38
- # # connect default storage manager to a relational database
39
- # ODBA.storage.dbi = ODBA::ConnectionPool.new('DBI::pg::database', 'user', 'pw')
40
- #
41
- # class Counter
42
- # include ODBA::Persistable
43
- # def initialize
44
- # @pos = 0
45
- # end
46
- # def up
47
- # @pos += 1
48
- # self.odba_store
49
- # @pos
50
- # end
51
- # def down
52
- # @pos -= 1
53
- # self.odba_store
54
- # @pos
55
- # end
56
- # end
57
- #
58
- # :main:lib/odba.rb
59
2
 
60
3
  require 'odba/persistable'
61
4
  require 'odba/storage'
@@ -68,5 +11,5 @@ require 'odba/index'
68
11
  require 'odba/odba'
69
12
 
70
13
  class Odba
71
- VERSION = '1.0.0'
14
+ VERSION = '1.0.1'
72
15
  end
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- #-- Cache -- odba -- 29.04.2004 -- hwyss@ywesee.com rwaltert@ywesee.com mwalder@ywesee.com
2
+ # encoding: utf-8
3
+ # ODBA::Cache -- odba -- 08.12.2011 -- mhatakeyama@ywesee.com
4
+ # ODBA::Cache -- odba -- 29.04.2004 -- hwyss@ywesee.com rwaltert@ywesee.com mwalder@ywesee.com
3
5
 
4
6
  require 'singleton'
5
7
  require 'date'
@@ -361,9 +363,41 @@ module ODBA
361
363
  invalidate odba_id
362
364
  end
363
365
  end
366
+ # File lock exclusive control between processes, not threads, to create safely a new odba_id
367
+ # Sometimes several update jobs (processes) to the same database at the same time
368
+ LOCK_FILE = '/tmp/lockfile'
369
+ COUNT_FILE = '/tmp/count'
370
+ def lock(dbname)
371
+ lock_file = LOCK_FILE + "." + dbname
372
+ open(lock_file, 'a') do |st|
373
+ st.flock(File::LOCK_EX)
374
+ yield
375
+ st.flock(File::LOCK_UN)
376
+ end
377
+ end
378
+ def new_id(dbname, odba_storage)
379
+ count_file = COUNT_FILE + "." + dbname
380
+ count = nil
381
+ lock(dbname) do
382
+ unless File.exist?(count_file)
383
+ open(count_file, "w") do |out|
384
+ out.print odba_storage.max_id
385
+ end
386
+ end
387
+ count = File.read(count_file).to_i
388
+ count += 1
389
+ open(count_file, "w") do |out|
390
+ out.print count
391
+ end
392
+ odba_storage.update_max_id(count)
393
+ end
394
+ count
395
+ end
364
396
  # Returns the next valid odba_id
365
397
  def next_id
366
- id = ODBA.storage.next_id
398
+ #id = ODBA.storage.next_id
399
+ dbname = ODBA.storage.dbi.dbi_args.first.split(/:/).last
400
+ id = new_id(dbname, ODBA.storage)
367
401
  @peers.each do |peer|
368
402
  peer.reserve_next_id id rescue DRb::DRbError
369
403
  end
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- #-- ConnectionPool -- ODBA -- 08.03.2005 -- hwyss@ywesee.com
2
+ # encoding: utf-8
3
+ # ODBA::ConnectionPool -- odba -- 08.12.2011 -- mhatakeyama@ywesee.com
4
+ # ODBA::ConnectionPool -- odba -- 08.03.2005 -- hwyss@ywesee.com
3
5
 
4
6
  require 'dbi'
5
7
  require 'thread'
@@ -8,7 +10,8 @@ module ODBA
8
10
  class ConnectionPool
9
11
  POOL_SIZE = 5
10
12
  SETUP_RETRIES = 3
11
- attr_reader :connections
13
+ #attr_reader :connections
14
+ attr_reader :connections, :dbi_args
12
15
  # All connections are delegated to DBI. The constructor simply records
13
16
  # the DBI-arguments and reuses them to setup connections when needed.
14
17
  def initialize(*dbi_args)
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- #-- Storage -- odba -- 29.04.2004 -- hwyss@ywesee.com rwaltert@ywesee.com mwalder@ywesee.com
2
+ # encoding: utf-8
3
+ # ODBA::Storage -- odba -- 08.12.2011 -- mhatakeyama@ywesee.com
4
+ # ODBA::Storage -- odba -- 29.04.2004 -- hwyss@ywesee.com rwaltert@ywesee.com mwalder@ywesee.com
3
5
 
4
6
  require 'thread'
5
7
  require 'singleton'
@@ -391,6 +393,11 @@ CREATE INDEX target_id_#{table_name} ON #{table_name}(target_id);
391
393
  @next_id += 1
392
394
  end
393
395
  end
396
+ def update_max_id(id)
397
+ @id_mutex.synchronize do
398
+ @next_id = id
399
+ end
400
+ end
394
401
  def reserve_next_id(reserved_id)
395
402
  @id_mutex.synchronize do
396
403
  ensure_next_id_set
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: odba
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease: false
4
+ hash: 21
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 0
10
- version: 1.0.0
9
+ - 1
10
+ version: 1.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Masaomi Hatakeyama, Zeno R.R. Davatz
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-20 00:00:00 +01:00
18
+ date: 2011-12-08 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -26,12 +26,12 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 47
29
+ hash: 41
30
30
  segments:
31
31
  - 2
32
- - 8
33
- - 0
34
- version: 2.8.0
32
+ - 9
33
+ - 1
34
+ version: 2.9.1
35
35
  type: :development
36
36
  version_requirements: *id001
37
37
  description: Object Database Access - Ruby Software for ODDB.org Memory Management
@@ -42,13 +42,14 @@ executables: []
42
42
  extensions: []
43
43
 
44
44
  extra_rdoc_files:
45
+ - Guide.txt
45
46
  - History.txt
46
- - Manifest.txt
47
+ - LICENSE.txt
47
48
  - README.txt
48
49
  files:
50
+ - Guide.txt
49
51
  - History.txt
50
- - LICENSE
51
- - Manifest.txt
52
+ - LICENSE.txt
52
53
  - README.txt
53
54
  - Rakefile
54
55
  - install.rb
@@ -84,6 +85,7 @@ files:
84
85
  - test/test_persistable.rb
85
86
  - test/test_storage.rb
86
87
  - test/test_stub.rb
88
+ - .gemtest
87
89
  has_rdoc: true
88
90
  homepage: http://scm.ywesee.com/?p=odba/.git;a=summary
89
91
  licenses: []
@@ -115,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
117
  requirements: []
116
118
 
117
119
  rubyforge_project: odba
118
- rubygems_version: 1.3.7
120
+ rubygems_version: 1.4.2
119
121
  signing_key:
120
122
  specification_version: 3
121
123
  summary: Object Database Access - Ruby Software for ODDB.org Memory Management
@@ -1,38 +0,0 @@
1
- History.txt
2
- LICENSE
3
- Manifest.txt
4
- README.txt
5
- Rakefile
6
- install.rb
7
- lib/odba.rb
8
- lib/odba/18_19_loading_compatibility.rb
9
- lib/odba/cache.rb
10
- lib/odba/cache_entry.rb
11
- lib/odba/connection_pool.rb
12
- lib/odba/drbwrapper.rb
13
- lib/odba/id_server.rb
14
- lib/odba/index.rb
15
- lib/odba/index_definition.rb
16
- lib/odba/marshal.rb
17
- lib/odba/odba.rb
18
- lib/odba/odba_error.rb
19
- lib/odba/persistable.rb
20
- lib/odba/storage.rb
21
- lib/odba/stub.rb
22
- sql/collection.sql
23
- sql/create_tables.sql
24
- sql/object.sql
25
- sql/object_connection.sql
26
- test/suite.rb
27
- test/test_array.rb
28
- test/test_cache.rb
29
- test/test_cache_entry.rb
30
- test/test_connection_pool.rb
31
- test/test_drbwrapper.rb
32
- test/test_hash.rb
33
- test/test_id_server.rb
34
- test/test_index.rb
35
- test/test_marshal.rb
36
- test/test_persistable.rb
37
- test/test_storage.rb
38
- test/test_stub.rb