Merge branch '15699-update-gem'
authorTom Clegg <tclegg@veritasgenetics.com>
Mon, 21 Oct 2019 14:38:48 +0000 (10:38 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Mon, 21 Oct 2019 14:38:48 +0000 (10:38 -0400)
refs #15699

Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

sdk/go/keepclient/discover.go
sdk/ruby/lib/arvados/collection.rb
sdk/ruby/test/test_collection.rb
services/api/app/helpers/commits_helper.rb
services/api/app/models/keep_service.rb
services/api/lib/tasks/symbols.rake

index 62936e71831fb1fa055b213fac470f2adeb5ea16..02c788bd9ae2196812bd856a2894855c372ca9df 100644 (file)
@@ -27,8 +27,9 @@ func RefreshServiceDiscovery() {
        defer svcListCacheMtx.Unlock()
        for _, ent := range svcListCache {
                wg.Add(1)
+               clear := ent.clear
                go func() {
-                       ent.clear <- struct{}{}
+                       clear <- struct{}{}
                        wg.Done()
                }()
        }
index 29c7663f7ba521543e542d83da11f7f419a01793..e29deba6c9de314f1deb9c14fd6e723c8e085ac9 100644 (file)
@@ -207,7 +207,7 @@ module Arv
         loop do
           ii = (lo + hi) / 2
           range = @ranges[ii]
-          if range.include?(target) && (target < range.end || ii == hi)
+          if range.include?(target) && (target < range.end || ii == hi-1)
             return ii
           elsif ii == lo
             raise RangeError.new("%i not in segment" % target)
index 1979443733a7821b4a655833d96ac19b41ba4fa6..8b747c365211b742d303a2d2894129253d830d37 100644 (file)
@@ -36,6 +36,29 @@ class CollectionTest < Minitest::Test
     end
   end
 
+  def test_range_edge_cases
+    [
+      ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:file1\n",
+      ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:file1 0:0:file2\n",
+      ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:file1 0:0:file1\n",
+      ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:file1 0:0:file2 0:0:file1\n",
+      ". 0cc175b9c0f1b6a831c399e269772661+1 0:0:file1 1:0:file2 1:0:file1\n",
+    ].each do |txt|
+      coll = Arv::Collection.new(txt)
+      coll.normalize
+      assert_match(/ 0:0:file1/, coll.manifest_text)
+    end
+    [
+      ". d41d8cd98f00b204e9800998ecf8427e+0 1:0:file1\n",
+      ". 0cc175b9c0f1b6a831c399e269772661+1 0:0:file1 2:0:file2 1:0:file1\n",
+    ].each do |txt|
+      assert_raises(RangeError) do
+        coll = Arv::Collection.new(txt)
+        coll.normalize
+      end
+    end
+  end
+
   def test_non_manifest_construction_error
     ["word", ". abc def", ". #{random_block} 0:", ". / !"].each do |m_text|
       assert_raises(ArgumentError,
index b1c02b2a76a1597f7caf0837cf609b2deffa1eac..fdb83a03751b1b81e45b0e9cd71ec910a81f7cca 100644 (file)
@@ -3,6 +3,7 @@
 # SPDX-License-Identifier: AGPL-3.0
 
 module CommitsHelper
+  extend CurrentApiClient
 
   class GitError < RequestError
     def http_status
index 60f2632029dc4bf2cf2ead9dc19522551b8bbb10..f76f5e47a5c68c7cb338a1e2bc836d80bf05a314 100644 (file)
@@ -7,6 +7,7 @@ class KeepService < ArvadosModel
   include KindAndEtag
   include CommonApiTemplate
   extend DbCurrentTime
+  extend CurrentApiClient
 
   SERVER_START_TIME = db_current_time
 
index a2e6df8b580c0fc8c80f7a97188699870352f754..dc9ed461dd95831a1f67318f2eeb47c9c63d0e21 100644 (file)
@@ -4,7 +4,12 @@
 
 require 'current_api_client'
 
-include CurrentApiClient
+# This is needed instead of just including CurrentApiClient so that its
+# methods don't get imported as Object's class methods; this is a problem because
+# the methods would be imported only on test environment. See #15716 for more info.
+class CurrentApiClientHelper
+  extend CurrentApiClient
+end
 
 def has_symbols? x
   if x.is_a? Hash
@@ -83,7 +88,7 @@ namespace :symbols do
      Node, PipelineInstance, PipelineTemplate,
      Repository, Specimen, Trait, User, VirtualMachine,
      Workflow].each do |klass|
-      act_as_system_user do
+      CurrentApiClientHelper.act_as_system_user do
         klass.all.each do |c|
           check_for_serialized_symbols c
         end
@@ -99,7 +104,7 @@ namespace :symbols do
      Node, PipelineInstance, PipelineTemplate,
      Repository, Specimen, Trait, User, VirtualMachine,
      Workflow].each do |klass|
-      act_as_system_user do
+      CurrentApiClientHelper.act_as_system_user do
         klass.all.each do |c|
           stringify_serialized_symbols c
         end