mongodb-mongo 0.6.2 → 0.6.3
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.
- data/README.rdoc +11 -10
- data/bin/run_test_script +1 -1
- data/bin/standard_benchmark +82 -23
- data/examples/info.rb +1 -1
- data/examples/queries.rb +1 -1
- data/lib/mongo/admin.rb +9 -9
- data/lib/mongo/collection.rb +16 -15
- data/lib/mongo/cursor.rb +9 -9
- data/lib/mongo/db.rb +36 -18
- data/lib/mongo/gridfs/chunk.rb +16 -0
- data/lib/mongo/gridfs/grid_store.rb +28 -5
- data/lib/mongo/gridfs.rb +15 -0
- data/lib/mongo/message/get_more_message.rb +16 -0
- data/lib/mongo/message/insert_message.rb +16 -0
- data/lib/mongo/message/kill_cursors_message.rb +16 -0
- data/lib/mongo/message/message.rb +16 -0
- data/lib/mongo/message/message_header.rb +16 -0
- data/lib/mongo/message/msg_message.rb +16 -0
- data/lib/mongo/message/opcodes.rb +16 -0
- data/lib/mongo/message/query_message.rb +16 -0
- data/lib/mongo/message/remove_message.rb +16 -0
- data/lib/mongo/message/update_message.rb +16 -0
- data/lib/mongo/message.rb +16 -0
- data/lib/mongo/mongo.rb +9 -9
- data/lib/mongo/query.rb +9 -9
- data/lib/mongo/types/binary.rb +9 -9
- data/lib/mongo/types/dbref.rb +9 -9
- data/lib/mongo/types/objectid.rb +9 -9
- data/lib/mongo/types/regexp_of_holding.rb +9 -9
- data/lib/mongo/types/undefined.rb +9 -9
- data/lib/mongo/util/byte_buffer.rb +9 -9
- data/lib/mongo/util/ordered_hash.rb +9 -9
- data/lib/mongo/util/xml_to_ruby.rb +9 -9
- data/lib/mongo.rb +7 -0
- data/mongo-ruby-driver.gemspec +3 -3
- data/tests/mongo-qa/indices +5 -2
- data/tests/test_bson.rb +6 -3
- data/tests/test_db_api.rb +11 -11
- data/tests/test_grid_store.rb +19 -2
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -315,16 +315,17 @@ Adrian Madrid, aemadrid@gmail.com
|
|
315
315
|
|
316
316
|
= License
|
317
317
|
|
318
|
-
Copyright
|
318
|
+
Copyright 2008-2009 10gen Inc.
|
319
319
|
|
320
|
-
|
321
|
-
|
322
|
-
the
|
320
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
321
|
+
you may not use this file except in compliance with the License.
|
322
|
+
You may obtain a copy of the License at
|
323
323
|
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
324
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
325
|
+
|
326
|
+
Unless required by applicable law or agreed to in writing, software
|
327
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
328
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
329
|
+
See the License for the specific language governing permissions and
|
330
|
+
limitations under the License.
|
328
331
|
|
329
|
-
See http://www.gnu.org/licenses for a copy of the GNU Affero General Public
|
330
|
-
License.
|
data/bin/run_test_script
CHANGED
data/bin/standard_benchmark
CHANGED
@@ -7,19 +7,46 @@ require 'mongo'
|
|
7
7
|
|
8
8
|
include XGen::Mongo::Driver
|
9
9
|
|
10
|
-
|
10
|
+
TRIALS = 2
|
11
|
+
PER_TRIAL = 5000
|
12
|
+
BATCH_SIZE = 100
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
14
|
+
SMALL = {}
|
15
|
+
MEDIUM = {
|
16
|
+
'integer' => 5,
|
17
|
+
'number' => 5.05,
|
18
|
+
'boolean' => false,
|
19
|
+
'array' => ['test', 'benchmark']
|
20
|
+
}
|
21
|
+
LARGE = {
|
22
|
+
'base_url' => 'http://www.example.com/test-me',
|
23
|
+
'total_word_count' => 6743,
|
24
|
+
'access_time' => Time.now,
|
25
|
+
'meta_tags' => {
|
26
|
+
'description' => 'i am a long description string',
|
27
|
+
'author' => 'Holly Man',
|
28
|
+
'dynamically_created_meta_tag' => 'who know\n what'
|
29
|
+
},
|
30
|
+
'page_structure' => {
|
31
|
+
'counted_tags' => 3450,
|
32
|
+
'no_of_js_attached' => 10,
|
33
|
+
'no_of_images' => 6
|
34
|
+
},
|
35
|
+
'harvested_words' => ['10gen','web','open','source','application','paas',
|
36
|
+
'platform-as-a-service','technology','helps',
|
37
|
+
'developers','focus','building','mongodb','mongo'] * 20
|
38
|
+
}
|
39
|
+
|
40
|
+
def report(str, t)
|
41
|
+
printf("%s%d\n", str.ljust(60, '.'), PER_TRIAL / t)
|
15
42
|
end
|
16
43
|
|
17
|
-
def benchmark(str, n, db,
|
18
|
-
coll = db.collection(
|
44
|
+
def benchmark(str, proc, n, db, coll_name, object, setup=nil)
|
45
|
+
coll = db.collection(coll_name)
|
46
|
+
setup.call(coll, object) if setup
|
19
47
|
t0 = Time.new
|
20
|
-
n.times { |i|
|
21
|
-
|
22
|
-
report(str, t0, Time.new, n)
|
48
|
+
n.times { |i| proc.call(coll, object, i) }
|
49
|
+
report(str, Time.new.to_f - t0.to_f)
|
23
50
|
end
|
24
51
|
|
25
52
|
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
@@ -27,23 +54,55 @@ port = ENV['MONGO_RUBY_DRIVER_PORT'] || XGen::Mongo::Driver::Mongo::DEFAULT_PORT
|
|
27
54
|
|
28
55
|
db = Mongo.new(host, port).db('ruby-benchmark')
|
29
56
|
db.drop_collection('benchmark')
|
30
|
-
coll = db.collection('benchmark')
|
31
57
|
|
32
|
-
coll
|
58
|
+
insert = Proc.new { |coll, object, i|
|
59
|
+
object['x'] = i
|
60
|
+
coll.insert(object)
|
61
|
+
}
|
62
|
+
benchmark('insert (small, no index)', insert, PER_TRIAL, db, 'small_none', SMALL)
|
63
|
+
benchmark('insert (medium, no index)', insert, PER_TRIAL, db, 'medium_none', MEDIUM)
|
64
|
+
benchmark('insert (large, no index)', insert, PER_TRIAL, db, 'large_none', LARGE)
|
33
65
|
|
34
|
-
|
35
|
-
|
36
|
-
coll.insert('i' => i)
|
66
|
+
index_on_x = Proc.new { |coll, object|
|
67
|
+
coll.create_index('foo', 'x') # TODO fix this in the driver!!
|
37
68
|
}
|
38
|
-
benchmark('
|
39
|
-
|
69
|
+
benchmark('insert (small, indexed)', insert, PER_TRIAL, db, 'small_index', SMALL, index_on_x)
|
70
|
+
benchmark('insert (medium, indexed)', insert, PER_TRIAL, db, 'medium_index', MEDIUM, index_on_x)
|
71
|
+
benchmark('insert (large, indexed)', insert, PER_TRIAL, db, 'large_index', LARGE, index_on_x)
|
72
|
+
|
73
|
+
insert_batch = Proc.new { |coll, object, i|
|
74
|
+
object['x'] = i
|
75
|
+
coll.insert([object] * BATCH_SIZE)
|
40
76
|
}
|
41
|
-
benchmark('
|
42
|
-
|
43
|
-
|
44
|
-
|
77
|
+
benchmark('batch insert (small, no index)', insert_batch, PER_TRIAL/BATCH_SIZE, db, 'small_bulk', SMALL)
|
78
|
+
benchmark('batch insert (medium, no index)', insert_batch, PER_TRIAL/BATCH_SIZE, db, 'medium_bulk', MEDIUM)
|
79
|
+
benchmark('batch insert (large, no index)', insert_batch, PER_TRIAL/BATCH_SIZE, db, 'large_bulk', LARGE)
|
80
|
+
|
81
|
+
find_one = Proc.new { |coll, x, i|
|
82
|
+
coll.find_first('x' => x)
|
45
83
|
}
|
46
|
-
benchmark('
|
47
|
-
|
48
|
-
|
84
|
+
benchmark('find_one (small, no index)', find_one, PER_TRIAL, db, 'small_none', PER_TRIAL / 2)
|
85
|
+
benchmark('find_one (medium, no index)', find_one, PER_TRIAL, db, 'medium_none', PER_TRIAL / 2)
|
86
|
+
benchmark('find_one (large, no index)', find_one, PER_TRIAL, db, 'large_none', PER_TRIAL / 2)
|
87
|
+
|
88
|
+
benchmark('find_one (small, indexed)', find_one, PER_TRIAL, db, 'small_index', PER_TRIAL / 2)
|
89
|
+
benchmark('find_one (medium, indexed)', find_one, PER_TRIAL, db, 'medium_index', PER_TRIAL / 2)
|
90
|
+
benchmark('find_one (large, indexed)', find_one, PER_TRIAL, db, 'large_index', PER_TRIAL / 2)
|
91
|
+
|
92
|
+
find = Proc.new { |coll, x, i|
|
93
|
+
coll.find('x' => x).each {}
|
49
94
|
}
|
95
|
+
benchmark('find (small, no index)', find, PER_TRIAL, db, 'small_none', PER_TRIAL / 2)
|
96
|
+
benchmark('find (medium, no index)', find, PER_TRIAL, db, 'medium_none', PER_TRIAL / 2)
|
97
|
+
benchmark('find (large, no index)', find, PER_TRIAL, db, 'large_none', PER_TRIAL / 2)
|
98
|
+
|
99
|
+
benchmark('find (small, indexed)', find, PER_TRIAL, db, 'small_index', PER_TRIAL / 2)
|
100
|
+
benchmark('find (medium, indexed)', find, PER_TRIAL, db, 'medium_index', PER_TRIAL / 2)
|
101
|
+
benchmark('find (large, indexed)', find, PER_TRIAL, db, 'large_index', PER_TRIAL / 2)
|
102
|
+
|
103
|
+
benchmark('find range (small, indexed)', find, PER_TRIAL, db, 'small_index',
|
104
|
+
{"$gt" => PER_TRIAL / 2, "$lt" => PER_TRIAL / 2 + BATCH_SIZE})
|
105
|
+
benchmark('find range (medium, indexed)', find, PER_TRIAL, db, 'medium_index',
|
106
|
+
{"$gt" => PER_TRIAL / 2, "$lt" => PER_TRIAL / 2 + BATCH_SIZE})
|
107
|
+
benchmark('find range (large, indexed)', find, PER_TRIAL, db, 'large_index',
|
108
|
+
{"$gt" => PER_TRIAL / 2, "$lt" => PER_TRIAL / 2 + BATCH_SIZE})
|
data/examples/info.rb
CHANGED
data/examples/queries.rb
CHANGED
@@ -59,7 +59,7 @@ pp coll.find('a' => /[1|2]/).explain()
|
|
59
59
|
# collection, in which case they will be used with all queries, or they can be
|
60
60
|
# specified per query, in which case that hint overrides the hint associated
|
61
61
|
# with the collection if any.
|
62
|
-
coll.create_index('
|
62
|
+
coll.create_index('a')
|
63
63
|
coll.hint = 'a'
|
64
64
|
|
65
65
|
# You will see a different explanation now that the hint is in place
|
data/lib/mongo/admin.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
# --
|
2
2
|
# Copyright (C) 2008-2009 10gen Inc.
|
3
3
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
7
|
#
|
8
|
-
#
|
9
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
10
|
-
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
|
11
|
-
# for more details.
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
9
|
#
|
13
|
-
#
|
14
|
-
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
15
|
# ++
|
16
16
|
|
17
17
|
require 'mongo/util/ordered_hash'
|
data/lib/mongo/collection.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
# --
|
2
2
|
# Copyright (C) 2008-2009 10gen Inc.
|
3
3
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
7
|
#
|
8
|
-
#
|
9
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
10
|
-
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
|
11
|
-
# for more details.
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
9
|
#
|
13
|
-
#
|
14
|
-
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
15
|
# ++
|
16
16
|
|
17
17
|
require 'mongo/query'
|
@@ -70,7 +70,7 @@ module XGen
|
|
70
70
|
h = options.dup
|
71
71
|
h[:limit] = 1
|
72
72
|
cursor = find(selector, h)
|
73
|
-
cursor.next_object # don't need to explicitly close b/c of limit
|
73
|
+
cursor.next_object # don't need to explicitly close b/c of limit
|
74
74
|
end
|
75
75
|
|
76
76
|
# Insert +objects+, which are hashes. "<<" is aliased to this method.
|
@@ -113,11 +113,12 @@ module XGen
|
|
113
113
|
@db.modify_in_db(@name, selector, modifier_obj)
|
114
114
|
end
|
115
115
|
|
116
|
-
# Create a new index
|
117
|
-
# of field
|
118
|
-
|
119
|
-
|
120
|
-
|
116
|
+
# Create a new index. +field_or_spec+
|
117
|
+
# should be either a single field name or a Array of [field name,
|
118
|
+
# direction] pairs. Directions should be specified as
|
119
|
+
# XGen::Mongo::ASCENDING or XGen::Mongo::DESCENDING.
|
120
|
+
def create_index(field_or_spec)
|
121
|
+
@db.create_index(@name, field_or_spec)
|
121
122
|
end
|
122
123
|
|
123
124
|
# Drop index +name+.
|
data/lib/mongo/cursor.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
# --
|
2
2
|
# Copyright (C) 2008-2009 10gen Inc.
|
3
3
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
7
|
#
|
8
|
-
#
|
9
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
10
|
-
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
|
11
|
-
# for more details.
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
9
|
#
|
13
|
-
#
|
14
|
-
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
15
|
# ++
|
16
16
|
|
17
17
|
require 'mongo/message'
|
data/lib/mongo/db.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
# --
|
2
2
|
# Copyright (C) 2008-2009 10gen Inc.
|
3
3
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
7
|
#
|
8
|
-
#
|
9
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
10
|
-
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
|
11
|
-
# for more details.
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
9
|
#
|
13
|
-
#
|
14
|
-
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
15
|
# ++
|
16
16
|
|
17
17
|
require 'socket'
|
@@ -305,7 +305,7 @@ module XGen
|
|
305
305
|
def send_message(msg)
|
306
306
|
send_to_db(MsgMessage.new(msg))
|
307
307
|
end
|
308
|
-
|
308
|
+
|
309
309
|
# Returns a Cursor over the query results.
|
310
310
|
#
|
311
311
|
# Note that the query gets sent lazily; the cursor calls
|
@@ -401,17 +401,28 @@ module XGen
|
|
401
401
|
}
|
402
402
|
end
|
403
403
|
|
404
|
-
# Create a new index on +collection_name
|
405
|
-
# should be
|
406
|
-
#
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
404
|
+
# Create a new index on +collection_name+. +field_or_spec+
|
405
|
+
# should be either a single field name or a Array of [field name,
|
406
|
+
# direction] pairs. Directions should be specified as
|
407
|
+
# XGen::Mongo::ASCENDING or XGen::Mongo::DESCENDING. Normally called
|
408
|
+
# by Collection#create_index.
|
409
|
+
def create_index(collection_name, field_or_spec)
|
410
|
+
field_h = OrderedHash.new
|
411
|
+
if field_or_spec.is_a? String
|
412
|
+
field_h[field_or_spec] = 1
|
413
|
+
else
|
414
|
+
field_or_spec.each { |f| field_h[f[0]] = f[1] }
|
415
|
+
end
|
416
|
+
name = gen_index_name(field_h)
|
417
|
+
sel = {
|
418
|
+
:name => name,
|
419
|
+
:ns => full_coll_name(collection_name),
|
420
|
+
:key => field_h
|
421
|
+
}
|
412
422
|
@semaphore.synchronize {
|
413
423
|
send_to_db(InsertMessage.new(@name, SYSTEM_INDEX_COLLECTION, sel))
|
414
424
|
}
|
425
|
+
name
|
415
426
|
end
|
416
427
|
|
417
428
|
# Insert +objects+ into +collection_name+. Normally called by
|
@@ -471,6 +482,13 @@ module XGen
|
|
471
482
|
Digest::MD5.hexdigest("#{username}:mongo:#{plaintext}")
|
472
483
|
end
|
473
484
|
|
485
|
+
def gen_index_name(spec)
|
486
|
+
temp = []
|
487
|
+
spec.each_pair { |field, direction|
|
488
|
+
temp = temp.push("#{field}_#{direction}")
|
489
|
+
}
|
490
|
+
return temp.join("_")
|
491
|
+
end
|
474
492
|
end
|
475
493
|
end
|
476
494
|
end
|
data/lib/mongo/gridfs/chunk.rb
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
1
17
|
require 'mongo/types/objectid'
|
2
18
|
require 'mongo/util/byte_buffer'
|
3
19
|
require 'mongo/util/ordered_hash'
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
1
17
|
require 'mongo/types/objectid'
|
2
18
|
require 'mongo/util/ordered_hash'
|
3
19
|
require 'mongo/gridfs/chunk'
|
@@ -27,7 +43,7 @@ module XGen
|
|
27
43
|
# }
|
28
44
|
class GridStore
|
29
45
|
|
30
|
-
DEFAULT_ROOT_COLLECTION = '
|
46
|
+
DEFAULT_ROOT_COLLECTION = 'fs'
|
31
47
|
DEFAULT_CONTENT_TYPE = 'text/plain'
|
32
48
|
|
33
49
|
include Enumerable
|
@@ -51,6 +67,8 @@ module XGen
|
|
51
67
|
|
52
68
|
attr_accessor :lineno
|
53
69
|
|
70
|
+
attr_reader :md5
|
71
|
+
|
54
72
|
class << self
|
55
73
|
|
56
74
|
def exist?(db, name, root_collection=DEFAULT_ROOT_COLLECTION)
|
@@ -126,6 +144,7 @@ module XGen
|
|
126
144
|
@aliases = doc['aliases']
|
127
145
|
@length = doc['length']
|
128
146
|
@metadata = doc['metadata']
|
147
|
+
@md5 = doc['md5']
|
129
148
|
else
|
130
149
|
@files_id = XGen::Mongo::Driver::ObjectID.new
|
131
150
|
@content_type = DEFAULT_CONTENT_TYPE
|
@@ -138,7 +157,7 @@ module XGen
|
|
138
157
|
@curr_chunk = nth_chunk(0)
|
139
158
|
@position = 0
|
140
159
|
when 'w'
|
141
|
-
chunk_collection.create_index(
|
160
|
+
chunk_collection.create_index([['files_id', XGen::Mongo::ASCENDING], ['n', XGen::Mongo::ASCENDING]])
|
142
161
|
delete_chunks
|
143
162
|
@curr_chunk = Chunk.new(self, 'n' => 0)
|
144
163
|
@content_type = options[:content_type] if options[:content_type]
|
@@ -146,7 +165,7 @@ module XGen
|
|
146
165
|
@metadata = options[:metadata] if options[:metadata]
|
147
166
|
@position = 0
|
148
167
|
when 'w+'
|
149
|
-
chunk_collection.create_index(
|
168
|
+
chunk_collection.create_index([['files_id', XGen::Mongo::ASCENDING], ['n', XGen::Mongo::ASCENDING]])
|
150
169
|
@curr_chunk = nth_chunk(last_chunk_number) || Chunk.new(self, 'n' => 0) # might be empty
|
151
170
|
@curr_chunk.pos = @curr_chunk.data.length if @curr_chunk
|
152
171
|
@metadata = options[:metadata] if options[:metadata]
|
@@ -354,7 +373,7 @@ module XGen
|
|
354
373
|
when IO::SEEK_SET
|
355
374
|
pos
|
356
375
|
end
|
357
|
-
|
376
|
+
|
358
377
|
new_chunk_number = (target_pos / @chunk_size).to_i
|
359
378
|
if new_chunk_number != @curr_chunk.chunk_number
|
360
379
|
@curr_chunk.save if @mode[0] == ?w
|
@@ -389,7 +408,7 @@ module XGen
|
|
389
408
|
end
|
390
409
|
@db = nil
|
391
410
|
end
|
392
|
-
|
411
|
+
|
393
412
|
def closed?
|
394
413
|
@db == nil
|
395
414
|
end
|
@@ -410,6 +429,10 @@ module XGen
|
|
410
429
|
h['uploadDate'] = @upload_date
|
411
430
|
h['aliases'] = @aliases
|
412
431
|
h['metadata'] = @metadata
|
432
|
+
md5_command = OrderedHash.new
|
433
|
+
md5_command['filemd5'] = @files_id
|
434
|
+
md5_command['root'] = @root
|
435
|
+
h['md5'] = @db.db_command(md5_command)['md5']
|
413
436
|
h
|
414
437
|
end
|
415
438
|
|
data/lib/mongo/gridfs.rb
CHANGED
@@ -1 +1,16 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
1
16
|
require 'mongo/gridfs/grid_store'
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
1
17
|
require 'mongo/message/message'
|
2
18
|
require 'mongo/message/opcodes'
|
3
19
|
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
1
17
|
require 'mongo/message/message'
|
2
18
|
require 'mongo/message/opcodes'
|
3
19
|
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
1
17
|
require 'mongo/message/message'
|
2
18
|
require 'mongo/message/opcodes'
|
3
19
|
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
1
17
|
require 'mongo/util/bson'
|
2
18
|
require 'mongo/util/byte_buffer'
|
3
19
|
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
1
17
|
require 'mongo/util/byte_buffer'
|
2
18
|
|
3
19
|
module XGen
|
@@ -1,3 +1,19 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
1
17
|
require 'mongo/message/message'
|
2
18
|
require 'mongo/message/opcodes'
|
3
19
|
|