GithubHelp home page GithubHelp logo

googleapis / gax-ruby Goto Github PK

View Code? Open in Web Editor NEW
20.0 47.0 22.0 457 KB

Google API Extensions for Ruby

Home Page: https://rubygems.org/gems/google-gax

License: BSD 3-Clause "New" or "Revised" License

Ruby 100.00%

gax-ruby's Introduction

Google API Extensions for Ruby

This gem is officially end-of-life

The gax-ruby gem included common code used by obsolete versions of the Google API clients in https://github.com/googleapis/google-cloud-ruby. Up-to-date versions of the client libraries no longer use this gem. If your app depends on gax-ruby, we recommend updating the client library gems that depend on it. Modern clients will depend on the gapic-common gem instead of gax-ruby.

This gem is officially end-of-life

Gem Version

Google API Extensions for Ruby (gax-ruby) is a set of modules which aids the development of APIs for clients and servers based on gRPC and Google API conventions.

Application code will rarely need to use most of the classes within this library directly, but code generated automatically from the API definition files in Google APIs can use services such as page streaming and request bundling to provide a more convenient and idiomatic API surface to callers.

Ruby Versions

This library requires Ruby 2.4 or later.

In general, this library supports Ruby versions that are considered current and supported by Ruby Core (that is, Ruby versions that are either in normal maintenance or in security maintenance). See https://www.ruby-lang.org/en/downloads/branches/ for further details.

Contributing

Contributions to this library are always welcome and highly encouraged.

See the CONTRIBUTING documentation for more information on how to get started.

Versioning

This library follows Semantic Versioning.

It is currently in major version zero (0.y.z), which means that anything may change at any time and the public API should not be considered stable.

Details

For detailed documentation of the modules in gax-ruby, please watch DOCUMENTATION.

License

BSD - See LICENSE for more information.

gax-ruby's People

Contributors

blowmage avatar dazuma avatar eoogbe avatar euanlau avatar geigerj avatar google-cloud-policy-bot[bot] avatar jbolinger avatar jmuk avatar justinbeckwith avatar landrito avatar pongad avatar randypiper avatar saicheems avatar swcloud avatar theacodes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gax-ruby's Issues

Segmentation Fault

Hi. This is a report for a Segmentation Fault that happened while performance testing changes to the Google Cloud Pub/Sub Ruby library. This happened right after the segfault reported in grpc/grpc#11762, and was also reported in protocolbuffers/protobuf#3352, but since the trace shows it happened in google-gax I am also reporting it here.

System details:

  • gRPC language and version: grpc (1.4.1 universal-darwin)
  • Operating System: MacOS Sierra
  • Runtime version: ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
  • Protobuf version: google-protobuf (3.3.0 universal-darwin)
  • GAX version: google-gax (0.8.4)
segfault details
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:343: [BUG] Segmentation fault at 0x00000000000008
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]

-- Crash Report log information --------------------------------------------
   See Crash Report log file under the one of following:                    
     * ~/Library/Logs/CrashReporter                                         
     * /Library/Logs/CrashReporter                                          
     * ~/Library/Logs/DiagnosticReports                                     
     * /Library/Logs/DiagnosticReports                                      
   for more details.                                                        
Don't forget to include the above Crash Report log file in bug reports.     

-- Control frame information -----------------------------------------------
c:0027 p:---- s:0141 e:000140 CFUNC  :sleep
c:0026 p:0078 s:0136 e:000135 RESCUE /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:352
c:0025 p:0031 s:0132 e:000131 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:343 [FINISH]
c:0024 p:---- s:0128 e:000127 CFUNC  :loop
c:0023 p:0073 s:0124 e:000123 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:342 [FINISH]
c:0022 p:0013 s:0115 e:000114 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:262 [FINISH]
c:0021 p:0011 s:0111 e:000110 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:224 [FINISH]
c:0020 p:0093 s:0106 e:000105 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:250 [FINISH]
c:0019 p:0048 s:0099 e:000098 METHOD /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/v1/publisher_client.rb:326
c:0018 p:0023 s:0090 e:000089 BLOCK  /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/service.rb:149
c:0017 p:0006 s:0087 e:000086 METHOD /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/service.rb:459
c:0016 p:0009 s:0082 e:000081 METHOD /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/service.rb:148
c:0015 p:0019 s:0076 e:000075 BLOCK  /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/topic/async_publisher.rb:149 [FINISH]
c:0014 p:0030 s:0071 e:000070 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/safe_task_executor.rb:24
c:0013 p:0006 s:0064 e:000063 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_lockable_object.rb:38 [FINISH]
c:0012 p:---- s:0061 e:000060 CFUNC  :synchronize
c:0011 p:0027 s:0057 e:000056 METHOD /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_lockable_object.rb:38
c:0010 p:0009 s:0053 e:000052 METHOD /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/safe_task_executor.rb:19
c:0009 p:0042 s:0048 e:000047 METHOD /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/ivar.rb:170
c:0008 p:0014 s:0039 e:000038 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/future.rb:52 [FINISH]
c:0007 p:0013 s:0036 e:000035 METHOD /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:348
c:0006 p:0056 s:0028 e:000027 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:337 [FINISH]
c:0005 p:---- s:0022 e:000021 CFUNC  :loop
c:0004 p:0009 s:0018 e:000017 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:320 [FINISH]
c:0003 p:---- s:0015 e:000014 CFUNC  :catch
c:0002 p:0025 s:0010 e:000009 BLOCK  /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:319 [FINISH]
c:0001 p:---- s:0003 e:000002 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:319:in `block in create_worker'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:319:in `catch'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:320:in `block (2 levels) in create_worker'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:320:in `loop'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:337:in `block (3 levels) in create_worker'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb:348:in `run_task'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/future.rb:52:in `block in execute'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/ivar.rb:170:in `safe_execute'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/safe_task_executor.rb:19:in `execute'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_lockable_object.rb:38:in `synchronize'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_lockable_object.rb:38:in `synchronize'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_lockable_object.rb:38:in `block in synchronize'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/safe_task_executor.rb:24:in `block in execute'
/Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/topic/async_publisher.rb:149:in `block in publish_batch_async'
/Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/service.rb:148:in `publish'
/Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/service.rb:459:in `execute'
/Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/service.rb:149:in `block in publish'
/Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/v1/publisher_client.rb:326:in `publish'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:250:in `block in create_api_call'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:224:in `block in create_api_call'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:262:in `block in catch_errors'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:342:in `block in retryable'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:342:in `loop'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:343:in `block (2 levels) in retryable'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:352:in `rescue in block (2 levels) in retryable'
/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:352:in `sleep'

-- Machine register context ------------------------------------------------
 rax: 0x0000000000000000 rbx: 0x00007f9c381b9a70 rcx: 0x00007f9c4265f328
 rdx: 0x0000000000000000 rdi: 0x0000700007c3e270 rsi: 0x00007f9c4265f310
 rbp: 0x0000700007c3ce30 rsp: 0x0000700007c3ce30  r8: 0x00000000ffffffff
  r9: 0x00007f9c307bd668 r10: 0xffffffffffffffff r11: 0x0000000000000202
 r12: 0x0000700007c3e270 r13: 0x0000000000000004 r14: 0x0000700007c3e270
 r15: 0x0000000000000000 rip: 0x0000000105db9160 rfl: 0x0000000000010202

-- C level backtrace information -------------------------------------------
0   ruby                                0x00000001053f8d92 rb_vm_bugreport + 386
1   ruby                                0x0000000105299b5c rb_bug_context + 476
2   ruby                                0x0000000105377645 sigsegv + 69
3   libsystem_platform.dylib            0x00007fff9015eb3a _sigtramp + 26
4   grpc_c.bundle                       0x0000000105db9160 grpc_slice_unref_internal + 16
5   grpc_c.bundle                       0x0000000105de794a build_auth_metadata_context + 1386
6   grpc_c.bundle                       0x0000000105da0d5c grpc_call_stack_destroy + 76
7   grpc_c.bundle                       0x0000000105df88e4 grpc_connected_subchannel_create_call + 324
8   grpc_c.bundle                       0x0000000105dab164 grpc_exec_ctx_flush + 84
9   grpc_c.bundle                       0x0000000105da9370 grpc_init_poll_cv_posix + 4800
10  grpc_c.bundle                       0x0000000105daae34 grpc_pollset_work + 36
11  grpc_c.bundle                       0x0000000105dc33c2 grpc_cq_can_listen + 2642
12  grpc_c.bundle                       0x0000000105d9cc68 rb_completion_queue_pluck + 248
13  ruby                                0x00000001053aaa18 rb_thread_call_without_gvl + 88
14  grpc_c.bundle                       0x0000000105d9cbd8 rb_completion_queue_pluck + 104
15  grpc_c.bundle                       0x0000000105d997e2 Init_grpc_call + 3874
16  ruby                                0x00000001053ec636 vm_call_cfunc + 278
17  ruby                                0x00000001053d76c8 vm_exec_core + 11352
18  ruby                                0x00000001053e729c vm_exec + 108
19  ruby                                0x00000001053f4a80 invoke_iseq_block_from_c + 1040
20  ruby                                0x00000001053f394b vm_call0_body + 2011
21  ruby                                0x00000001053e1173 rb_vm_call + 51
22  ruby                                0x00000001053ec636 vm_call_cfunc + 278
23  ruby                                0x00000001053d76c8 vm_exec_core + 11352
24  ruby                                0x00000001053e729c vm_exec + 108
25  ruby                                0x00000001053e5b89 vm_invoke_proc + 297
26  ruby                                0x00000001053edc02 vm_call_opt_call + 162
27  ruby                                0x00000001053d76c8 vm_exec_core + 11352
28  ruby                                0x00000001053e729c vm_exec + 108
29  ruby                                0x00000001053f4428 invoke_block_from_c_splattable + 344
30  ruby                                0x00000001053f550f loop_i + 31
31  ruby                                0x00000001052a3768 rb_rescue2 + 296
32  ruby                                0x00000001053ec636 vm_call_cfunc + 278
33  ruby                                0x00000001053d6fb7 vm_exec_core + 9543
34  ruby                                0x00000001053e729c vm_exec + 108
35  ruby                                0x00000001053e5b89 vm_invoke_proc + 297
36  ruby                                0x00000001053edc02 vm_call_opt_call + 162
37  ruby                                0x00000001053d76c8 vm_exec_core + 11352
38  ruby                                0x00000001053e729c vm_exec + 108
39  ruby                                0x00000001053e5b89 vm_invoke_proc + 297
40  ruby                                0x00000001053edc02 vm_call_opt_call + 162
41  ruby                                0x00000001053d76c8 vm_exec_core + 11352
42  ruby                                0x00000001053e729c vm_exec + 108
43  ruby                                0x00000001053e5b89 vm_invoke_proc + 297
44  ruby                                0x00000001053edc02 vm_call_opt_call + 162
45  ruby                                0x00000001053d76c8 vm_exec_core + 11352
46  ruby                                0x00000001053e729c vm_exec + 108
47  ruby                                0x00000001053e5b89 vm_invoke_proc + 297
48  ruby                                0x00000001053edc02 vm_call_opt_call + 162
49  ruby                                0x00000001053d76c8 vm_exec_core + 11352
50  ruby                                0x00000001053e729c vm_exec + 108
51  ruby                                0x00000001053e5b89 vm_invoke_proc + 297
52  ruby                                0x00000001053edc02 vm_call_opt_call + 162
53  ruby                                0x00000001053d76c8 vm_exec_core + 11352
54  ruby                                0x00000001053e729c vm_exec + 108
55  ruby                                0x00000001053f4428 invoke_block_from_c_splattable + 344
56  ruby                                0x00000001052a3b14 rb_ensure + 180
57  ruby                                0x00000001053ec636 vm_call_cfunc + 278
58  ruby                                0x00000001053d6fb7 vm_exec_core + 9543
59  ruby                                0x00000001053e729c vm_exec + 108
60  ruby                                0x00000001053e5b89 vm_invoke_proc + 297
61  ruby                                0x00000001053edc02 vm_call_opt_call + 162
62  ruby                                0x00000001053d76c8 vm_exec_core + 11352
63  ruby                                0x00000001053e729c vm_exec + 108
64  ruby                                0x00000001053f4428 invoke_block_from_c_splattable + 344
65  ruby                                0x00000001053f550f loop_i + 31
66  ruby                                0x00000001052a3768 rb_rescue2 + 296
67  ruby                                0x00000001053ec636 vm_call_cfunc + 278
68  ruby                                0x00000001053d6fb7 vm_exec_core + 9543
69  ruby                                0x00000001053e729c vm_exec + 108
70  ruby                                0x00000001053f4428 invoke_block_from_c_splattable + 344
71  ruby                                0x00000001053f54ca catch_i + 74
72  ruby                                0x00000001053e3f7e vm_catch_protect + 174
73  ruby                                0x00000001053e4642 rb_f_catch + 66
74  ruby                                0x00000001053ec636 vm_call_cfunc + 278
75  ruby                                0x00000001053d6fb7 vm_exec_core + 9543
76  ruby                                0x00000001053e729c vm_exec + 108
77  ruby                                0x00000001053e5b89 vm_invoke_proc + 297
78  ruby                                0x00000001053b105c thread_start_func_2 + 1564
79  ruby                                0x00000001053b0a25 thread_start_func_1 + 165
80  libsystem_pthread.dylib             0x00007fff9016893b _pthread_body + 180
81  libsystem_pthread.dylib             0x00007fff90168887 _pthread_body + 0

-- Other runtime information -----------------------------------------------

* Loaded script: bench_publish.rb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/enc/encdb.bundle
    5 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/enc/trans/transdb.bundle
    6 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/unicode_normalize.rb
    7 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/rbconfig.rb
    8 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/compatibility.rb
    9 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/defaults.rb
   10 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/deprecate.rb
   11 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/errors.rb
   12 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/version.rb
   13 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/requirement.rb
   14 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/platform.rb
   15 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/basic_specification.rb
   16 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/stub_specification.rb
   17 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/util/list.rb
   18 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/stringio.bundle
   19 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/specification.rb
   20 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/exceptions.rb
   21 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/dependency.rb
   22 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_gem.rb
   23 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/monitor.rb
   24 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb
   25 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems.rb
   26 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/path_support.rb
   27 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/version.rb
   28 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/core_ext/name_error.rb
   29 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/levenshtein.rb
   30 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/jaro_winkler.rb
   31 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checker.rb
   32 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/delegate.rb
   33 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   34 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   35 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
   36 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
   37 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/null_checker.rb
   38 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/formatter.rb
   39 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean.rb
   40 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/vendor/postit/lib/postit/parser.rb
   41 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/vendor/postit/lib/postit/environment.rb
   42 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/vendor/postit/lib/postit/installer.rb
   43 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/vendor/postit/lib/postit/version.rb
   44 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/vendor/postit/lib/postit.rb
   45 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/postit_trampoline.rb
   46 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/pathname.bundle
   47 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/pathname.rb
   48 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/constants.rb
   49 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/util.rb
   50 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/io/console.bundle
   51 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/user_interaction.rb
   52 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/etc.bundle
   53 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/config_file.rb
   54 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/rubygems_integration.rb
   55 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/current_ruby.rb
   56 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/shared_helpers.rb
   57 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/fileutils.rb
   58 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/tmpdir.rb
   59 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/errors.rb
   60 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/environment_preserver.rb
   61 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/plugin/api.rb
   62 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/plugin.rb
   63 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/rfc2396_parser.rb
   64 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/rfc3986_parser.rb
   65 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/common.rb
   66 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/generic.rb
   67 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/ftp.rb
   68 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/http.rb
   69 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/https.rb
   70 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/ldap.rb
   71 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/ldaps.rb
   72 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/mailto.rb
   73 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/uri.rb
   74 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/digest.bundle
   75 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/digest.rb
   76 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/source/git.rb
   77 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/source/installed.rb
   78 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/source/specific_file.rb
   79 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/source/local.rb
   80 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/source/lock.rb
   81 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/source/vendor.rb
   82 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/source.rb
   83 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/gem_helpers.rb
   84 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/match_platform.rb
   85 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/rubygems_ext.rb
   86 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/version.rb
   87 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler.rb
   88 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/settings.rb
   89 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/ext/builder.rb
   90 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/source.rb
   91 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/digest/sha1.bundle
   92 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/source/path.rb
   93 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/source/git.rb
   94 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/source/rubygems.rb
   95 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/lockfile_parser.rb
   96 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/set.rb
   97 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/definition.rb
   98 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/dependency.rb
   99 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/ruby_dsl.rb
  100 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/dsl.rb
  101 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/source_list.rb
  102 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/version.rb
  103 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/index.rb
  104 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/source/gemspec.rb
  105 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/lazy_specification.rb
  106 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb
  107 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/forwardable/impl.rb
  108 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/forwardable.rb
  109 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/spec_set.rb
  110 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-env/lib/google/cloud/env/version.rb
  111 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/ui.rb
  112 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/ui/silent.rb
  113 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/ui/rg_proxy.rb
  114 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/text.rb
  115 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/util/licenses.rb
  116 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/remote_specification.rb
  117 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-core/lib/google/cloud/core/version.rb
  118 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/shellwords.rb
  119 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/tempfile.rb
  120 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/source/git/git_proxy.rb
  121 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/gem_version_promoter.rb
  122 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/runtime.rb
  123 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/dep_proxy.rb
  124 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/stub_specification.rb
  125 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/endpoint_specification.rb
  126 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/ruby_version.rb
  127 /Users/blowmage/.gem/repos/gcloud-ruby/gems/bundler-1.15.1/lib/bundler/setup.rb
  128 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/cgi/core.rb
  129 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/cgi/escape.bundle
  130 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/cgi/util.rb
  131 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/cgi/cookie.rb
  132 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/cgi.rb
  133 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/timeout.rb
  134 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/utils.rb
  135 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/options.rb
  136 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/connection.rb
  137 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/rack_builder.rb
  138 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/parameters.rb
  139 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/middleware.rb
  140 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/adapter.rb
  141 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/request.rb
  142 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/response.rb
  143 /Users/blowmage/.gem/ruby/2.4.0/gems/multipart-post-2.0.0/lib/composite_io.rb
  144 /Users/blowmage/.gem/ruby/2.4.0/gems/multipart-post-2.0.0/lib/parts.rb
  145 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/upload_io.rb
  146 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/error.rb
  147 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/autoload.rb
  148 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday.rb
  149 /Users/blowmage/.gem/repos/gcloud-ruby/gems/json-2.1.0/lib/json/version.rb
  150 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/ostruct.rb
  151 /Users/blowmage/.gem/repos/gcloud-ruby/gems/json-2.1.0/lib/json/generic_object.rb
  152 /Users/blowmage/.gem/repos/gcloud-ruby/gems/json-2.1.0/lib/json/common.rb
  153 /Users/blowmage/.gem/repos/gcloud-ruby/gems/json-2.1.0/lib/json/ext/parser.bundle
  154 /Users/blowmage/.gem/repos/gcloud-ruby/gems/json-2.1.0/lib/json/ext/generator.bundle
  155 /Users/blowmage/.gem/repos/gcloud-ruby/gems/json-2.1.0/lib/json/ext.rb
  156 /Users/blowmage/.gem/repos/gcloud-ruby/gems/json-2.1.0/lib/json.rb
  157 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/request/url_encoded.rb
  158 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/socket.bundle
  159 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/io/wait.bundle
  160 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/socket.rb
  161 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/protocol.rb
  162 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/zlib.bundle
  163 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/exceptions.rb
  164 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/header.rb
  165 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/enc/windows_31j.bundle
  166 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/generic_request.rb
  167 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/request.rb
  168 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/requests.rb
  169 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/response.rb
  170 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/responses.rb
  171 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/proxy_delta.rb
  172 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http/backward.rb
  173 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/http.rb
  174 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/openssl.bundle
  175 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/bn.rb
  176 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/pkey.rb
  177 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/cipher.rb
  178 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/config.rb
  179 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/digest.rb
  180 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/x509.rb
  181 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/buffering.rb
  182 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/io/nonblock.bundle
  183 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl/ssl.rb
  184 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/openssl.rb
  185 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/net/https.rb
  186 /Users/blowmage/.gem/repos/gcloud-ruby/gems/faraday-0.12.1/lib/faraday/adapter/net_http.rb
  187 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-env/lib/google/cloud/env.rb
  188 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-env/lib/google-cloud-env.rb
  189 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-core/lib/google/cloud.rb
  190 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google-cloud-pubsub.rb
  191 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-core/lib/google/cloud/errors.rb
  192 /Users/blowmage/.gem/repos/gcloud-ruby/gems/addressable-2.5.1/lib/addressable/version.rb
  193 /Users/blowmage/.gem/repos/gcloud-ruby/gems/addressable-2.5.1/lib/addressable/idna/pure.rb
  194 /Users/blowmage/.gem/repos/gcloud-ruby/gems/addressable-2.5.1/lib/addressable/idna.rb
  195 /Users/blowmage/.gem/repos/gcloud-ruby/gems/public_suffix-2.0.5/lib/public_suffix/domain.rb
  196 /Users/blowmage/.gem/repos/gcloud-ruby/gems/public_suffix-2.0.5/lib/public_suffix/version.rb
  197 /Users/blowmage/.gem/repos/gcloud-ruby/gems/public_suffix-2.0.5/lib/public_suffix/errors.rb
  198 /Users/blowmage/.gem/repos/gcloud-ruby/gems/public_suffix-2.0.5/lib/public_suffix/rule.rb
  199 /Users/blowmage/.gem/repos/gcloud-ruby/gems/public_suffix-2.0.5/lib/public_suffix/list.rb
  200 /Users/blowmage/.gem/repos/gcloud-ruby/gems/public_suffix-2.0.5/lib/public_suffix.rb
  201 /Users/blowmage/.gem/repos/gcloud-ruby/gems/addressable-2.5.1/lib/addressable/uri.rb
  202 /Users/blowmage/.gem/repos/gcloud-ruby/gems/signet-0.7.3/lib/signet/version.rb
  203 /Users/blowmage/.gem/repos/gcloud-ruby/gems/signet-0.7.3/lib/signet.rb
  204 /Users/blowmage/.gem/repos/gcloud-ruby/gems/signet-0.7.3/lib/signet/errors.rb
  205 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/base64.rb
  206 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json/options.rb
  207 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json/version.rb
  208 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json/adapter_error.rb
  209 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json/parse_error.rb
  210 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json/options_cache.rb
  211 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json.rb
  212 /Users/blowmage/.gem/repos/gcloud-ruby/gems/signet-0.7.3/lib/compat/multi_json.rb
  213 /Users/blowmage/.gem/repos/gcloud-ruby/gems/signet-0.7.3/lib/signet/oauth_2.rb
  214 /Users/blowmage/.gem/repos/gcloud-ruby/gems/jwt-1.5.6/lib/jwt/json.rb
  215 /Users/blowmage/.gem/repos/gcloud-ruby/gems/jwt-1.5.6/lib/jwt/error.rb
  216 /Users/blowmage/.gem/repos/gcloud-ruby/gems/jwt-1.5.6/lib/jwt/verify.rb
  217 /Users/blowmage/.gem/repos/gcloud-ruby/gems/jwt-1.5.6/lib/jwt/decode.rb
  218 /Users/blowmage/.gem/repos/gcloud-ruby/gems/jwt-1.5.6/lib/jwt.rb
  219 /Users/blowmage/.gem/repos/gcloud-ruby/gems/signet-0.7.3/lib/signet/oauth_2/client.rb
  220 /Users/blowmage/.gem/repos/gcloud-ruby/gems/memoist-0.16.0/lib/memoist/version.rb
  221 /Users/blowmage/.gem/repos/gcloud-ruby/gems/memoist-0.16.0/lib/memoist/core_ext/singleton_class.rb
  222 /Users/blowmage/.gem/repos/gcloud-ruby/gems/memoist-0.16.0/lib/memoist.rb
  223 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/versions.rb
  224 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/exception.rb
  225 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/syntax_error.rb
  226 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/psych.bundle
  227 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/omap.rb
  228 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/set.rb
  229 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/class_loader.rb
  230 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/strscan.bundle
  231 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/scalar_scanner.rb
  232 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/node.rb
  233 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/stream.rb
  234 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/document.rb
  235 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/sequence.rb
  236 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/scalar.rb
  237 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/mapping.rb
  238 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes/alias.rb
  239 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/nodes.rb
  240 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/streaming.rb
  241 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/visitor.rb
  242 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/to_ruby.rb
  243 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/emitter.rb
  244 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/handler.rb
  245 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/tree_builder.rb
  246 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/yaml_tree.rb
  247 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/json/ruby_events.rb
  248 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/json_tree.rb
  249 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors/depth_first.rb
  250 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/visitors.rb
  251 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/parser.rb
  252 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/coder.rb
  253 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/core_ext.rb
  254 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/x86_64-darwin16/date_core.bundle
  255 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/date.rb
  256 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/deprecated.rb
  257 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/stream.rb
  258 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/json/yaml_events.rb
  259 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/json/tree_builder.rb
  260 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/json/stream.rb
  261 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych/handlers/document_stream.rb
  262 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/psych.rb
  263 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/yaml.rb
  264 /Users/blowmage/.gem/repos/gcloud-ruby/gems/os-0.9.6/lib/os.rb
  265 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/credentials_loader.rb
  266 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/signet.rb
  267 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/compute_engine.rb
  268 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/service_account.rb
  269 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/scope_util.rb
  270 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/user_refresh.rb
  271 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/client_id.rb
  272 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/user_authorizer.rb
  273 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/securerandom.rb
  274 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth/web_user_authorizer.rb
  275 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleauth-0.5.1/lib/googleauth.rb
  276 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-core/lib/google/cloud/credentials.rb
  277 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/credentials.rb
  278 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/time.rb
  279 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/English.rb
  280 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/errors.rb
  281 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/bundling.rb
  282 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb
  283 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/constants.rb
  284 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/version.rb
  285 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/lex_token.rb
  286 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/lex.rb
  287 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/file_lex.rb
  288 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/parse/production.rb
  289 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/parse/lr_item.rb
  290 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/parse/grammar.rb
  291 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/parse/yacc_production.rb
  292 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/parse/yacc_symbol.rb
  293 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/parse/lr_table.rb
  294 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/erb.rb
  295 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/parse/ply_dump.rb
  296 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/yacc.rb
  297 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly/parse/rule_parser.rb
  298 /Users/blowmage/.gem/repos/gcloud-ruby/gems/rly-0.2.3/lib/rly.rb
  299 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/path_template.rb
  300 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/settings.rb
  301 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/util.rb
  302 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/version.rb
  303 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax.rb
  304 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-protobuf-3.3.0-universal-darwin/lib/google/protobuf/message_exts.rb
  305 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-protobuf-3.3.0-universal-darwin/lib/google/2.4/protobuf_c.bundle
  306 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-protobuf-3.3.0-universal-darwin/lib/google/protobuf/repeated_field.rb
  307 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-protobuf-3.3.0-universal-darwin/lib/google/protobuf.rb
  308 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-google-iam-v1-0.6.8/lib/google/iam/v1/policy_pb.rb
  309 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-google-iam-v1-0.6.8/lib/google/iam/v1/iam_policy_pb.rb
  310 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleapis-common-protos-1.3.5/lib/google/api/http_pb.rb
  311 /Users/blowmage/.gem/repos/gcloud-ruby/gems/googleapis-common-protos-1.3.5/lib/google/api/annotations_pb.rb
  312 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-protobuf-3.3.0-universal-darwin/lib/google/protobuf/duration_pb.rb
  313 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-protobuf-3.3.0-universal-darwin/lib/google/protobuf/empty_pb.rb
  314 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-protobuf-3.3.0-universal-darwin/lib/google/protobuf/field_mask_pb.rb
  315 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-protobuf-3.3.0-universal-darwin/lib/google/protobuf/timestamp_pb.rb
  316 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/pubsub/v1/pubsub_pb.rb
  317 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/v1/publisher_client.rb
  318 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/v1/subscriber_client.rb
  319 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/v1.rb
  320 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/service.rb
  321 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/version.rb
  322 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/constants.rb
  323 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/errors.rb
  324 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/engine.rb
  325 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/abstract_object.rb
  326 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/native_extension_loader.rb
  327 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_object.rb
  328 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/jruby_object.rb
  329 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/rbx_object.rb
  330 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/truffle_object.rb
  331 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/object.rb
  332 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/volatile.rb
  333 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/abstract_lockable_object.rb
  334 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_lockable_object.rb
  335 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/jruby_lockable_object.rb
  336 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/rbx_lockable_object.rb
  337 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/truffle_lockable_object.rb
  338 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/lockable_object.rb
  339 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/condition.rb
  340 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/lock.rb
  341 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization.rb
  342 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/event.rb
  343 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/dereferenceable.rb
  344 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/obligation.rb
  345 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/logger.rb
  346 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/logging.rb
  347 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/executor_service.rb
  348 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/at_exit.rb
  349 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/abstract_executor_service.rb
  350 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/serial_executor_service.rb
  351 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/immediate_executor.rb
  352 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/delay.rb
  353 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/concurrent_update_error.rb
  354 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/direct_update.rb
  355 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb
  356 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/mutex_atomic.rb
  357 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/ruby.rb
  358 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/atomic_reference.rb
  359 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/processor_counter.rb
  360 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/configuration.rb
  361 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/mutex_atomic_boolean.rb
  362 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/atomic_boolean.rb
  363 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/native_integer.rb
  364 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/mutex_atomic_fixnum.rb
  365 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/atomic_fixnum.rb
  366 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/cyclic_barrier.rb
  367 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/mutex_count_down_latch.rb
  368 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/java_count_down_latch.rb
  369 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/count_down_latch.rb
  370 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/read_write_lock.rb
  371 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/abstract_thread_local_var.rb
  372 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/ruby_thread_local_var.rb
  373 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/java_thread_local_var.rb
  374 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/thread_local_var.rb
  375 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/reentrant_read_write_lock.rb
  376 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/mutex_semaphore.rb
  377 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/semaphore.rb
  378 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomics.rb
  379 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_executor_service.rb
  380 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/monotonic_time.rb
  381 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb
  382 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/thread_pool_executor.rb
  383 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/cached_thread_pool.rb
  384 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/fixed_thread_pool.rb
  385 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/simple_executor_service.rb
  386 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/indirect_immediate_executor.rb
  387 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/java_executor_service.rb
  388 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/java_single_thread_executor.rb
  389 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/java_thread_pool_executor.rb
  390 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_single_thread_executor.rb
  391 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/safe_task_executor.rb
  392 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/serialized_execution.rb
  393 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/serialized_execution_delegator.rb
  394 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/single_thread_executor.rb
  395 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/copy_on_write_observer_set.rb
  396 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/copy_on_notify_observer_set.rb
  397 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/observable.rb
  398 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/ivar.rb
  399 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/options.rb
  400 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/scheduled_task.rb
  401 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/java_non_concurrent_priority_queue.rb
  402 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb
  403 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/non_concurrent_priority_queue.rb
  404 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/timer_set.rb
  405 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executors.rb
  406 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/agent.rb
  407 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atom.rb
  408 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util.rb
  409 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/array.rb
  410 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/hash.rb
  411 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/map/non_concurrent_map_backend.rb
  412 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/map/mri_map_backend.rb
  413 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/map.rb
  414 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/tuple.rb
  415 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/async.rb
  416 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/future.rb
  417 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/dataflow.rb
  418 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/maybe.rb
  419 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/exchanger.rb
  420 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/abstract_struct.rb
  421 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/immutable_struct.rb
  422 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/mutable_struct.rb
  423 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/mvar.rb
  424 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/promise.rb
  425 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/settable_struct.rb
  426 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/timer_task.rb
  427 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/tvar.rb
  428 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/synchronized_delegator.rb
  429 /Users/blowmage/.gem/repos/gcloud-ruby/gems/concurrent-ruby-1.0.5/lib/concurrent.rb
  430 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/publish_result.rb
  431 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/topic/async_publisher.rb
  432 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/topic/batch_publisher.rb
  433 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/topic/list.rb
  434 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/subscription/list.rb
  435 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/convert.rb
  436 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/message.rb
  437 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/received_message.rb
  438 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/snapshot/list.rb
  439 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/snapshot.rb
  440 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/subscriber/async_acknowledger.rb
  441 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/subscriber/async_delayer.rb
  442 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/subscriber/stream.rb
  443 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/subscriber/enumerator_queue.rb
  444 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/subscriber.rb
  445 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/subscription.rb
  446 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/policy.rb
  447 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/topic.rb
  448 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/project.rb
  449 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub.rb
  450 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/singleton.rb
  451 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json/adapter.rb
  452 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json/adapters/json_common.rb
  453 /Users/blowmage/.gem/repos/gcloud-ruby/gems/multi_json-1.12.1/lib/multi_json/adapters/json_gem.rb
  454 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/2.4/grpc_c.bundle
  455 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/grpc.rb
  456 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/errors.rb
  457 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/logconfig.rb
  458 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/notifier.rb
  459 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/version.rb
  460 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/core/time_consts.rb
  461 /Users/blowmage/.rubies/ruby-2.4.0/lib/ruby/2.4.0/weakref.rb
  462 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/generic/bidi_call.rb
  463 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/generic/active_call.rb
  464 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/generic/client_stub.rb
  465 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/generic/rpc_desc.rb
  466 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/generic/service.rb
  467 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc/generic/rpc_server.rb
  468 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-1.4.1-universal-darwin/src/ruby/lib/grpc.rb
  469 /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/grpc.rb
  470 /Users/blowmage/.gem/repos/gcloud-ruby/gems/grpc-google-iam-v1-0.6.8/lib/google/iam/v1/iam_policy_services_pb.rb
  471 /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/pubsub/v1/pubsub_services_pb.rb

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

PathTemplate#match returning different params that given to PathTemplate#render

While evaluating the behavior of Google::Gax::PathTemplate, I noticed a behavior that surprised me. Consider the following spec that I wrote to try to understand the existing behavior:

it 'match returns the same params that render uses' do
  template = PathTemplate.new('v1/{name=parent/*}')
  params = { 'name' => 'parent/child' }
  path = 'v1/parent/child'

  expect(template.render(symbolize_keys(params))).to eq(path)

  expect(template.match(path)).to eq(params)
end

It fails with the following:

Failures:

  1) Google::Gax::PathTemplate match returns the same params that render uses
     Failure/Error: expect(template.match(path)).to eq(params)
     
       expected: {"name"=>"parent/child"}
            got: {"name"=>"child"}
     
       (compared using ==)
     
       Diff:
       @@ -1,2 +1,2 @@
       -"name" => "parent/child",
       +"name" => "child",
       
     # ./spec/google/gax/path_template_spec.rb:51:in `block (2 levels) in <top (required)>'

I find this surprising. Can someone verify that the behavior of Google::Gax::PathTemplate#match here is correct? If so, why isn't the value returned not matching the constraint given in the template?

Timeout parameter doesn't work when retry is configured

Originally reported by @frankyn

What

Setting CallOptions timeout does nothing when the RPC is configured to retry.

To reproduce

video_service_client = Google::Cloud::VideoIntelligence::V1beta1::VideoIntelligenceServiceClient.new
features             = [Google::Cloud::Videointelligence::V1beta1::Feature::LABEL_DETECTION]                                                                                           
options = Google::Gax::CallOptions.new(timeout: 60)
path = "gs://cloudmleap/video/next/volleyball_court.mp4"
                                                                                                                  
operation = video_service_client.annotate_video(path, features, options: options) do |op|
  ...
end

Expected behavior

The call retries with an initial timeout of 60s.

Observed behavior

The call fails with "INVALID_ARGUMENT" due to an initial timeout of 19s; the configured timeout is ignored. It is possible to change the timeout only by manually configuring the full backoff settings.

GaxError Exception. Received message larger than max (5371623 vs. 4194304)

I'm sending audio files to Google Speech API and I'm hitting this limit on file size. Is there any way to relax this limit ? It seems wrong that the Google Speech API can handle audio files up to 180 minutes in length but this interim library is limiting the file size to 4.2 MB ? I think I might be interpreting the error message incorrectly.

GaxError Exception occurred in retry method that was not classified as transient, caused by 8:Received message larger than max (5371623 vs. 4194304)
 /Users/brianarpie/.rvm/gems/ruby-2.3.0/gems/google-gax-1.3.0/lib/google/gax/api_callable.rb:369:in `rescue in block in retryable'
 /Users/brianarpie/.rvm/gems/ruby-2.3.0/gems/google-gax-1.3.0/lib/google/gax/api_callable.rb:358:in `block in retryable'
 /Users/brianarpie/.rvm/gems/ruby-2.3.0/gems/google-gax-1.3.0/lib/google/gax/api_callable.rb:230:in `block in create_api_call'
 /Users/brianarpie/.rvm/gems/ruby-2.3.0/gems/google-gax-1.3.0/lib/google/gax/api_callable.rb:260:in `block in create_api_call'
 /Users/brianarpie/.rvm/gems/ruby-2.3.0/gems/google-gax-1.3.0/lib/google/longrunning/operations_client.rb:225:in `get_operation'

Google::Longrunning::OperationsClient prints warnings

The generated GAPIC code that exposes operations endpoints prints the following warning, with no way to avoid it.

`service_path` and `port` parameters are deprecated and will be removed

This is because the generated GAPIC code creates an Google::Longrunning::OperationsClient with the service_path argument, causing the warning.

Investigate Path template performance

Recent investigation by @blowmage found that GAPIC utility methods that rely on the GAX path template code are very slow, to the point that they are the bottleneck for some google-cloud-ruby acceptance tests. This is likely due to the use of rly to implement template parsing.

Investigate these performance concerns. If rly is the issue, addressable may be a good substitute, although be cautious of differences between Google's path templates and RFC 6570. Another approach might be to drop parsing and use basic string interpolation, which @pongad has already done in the Go GAPICs.

0.8.3 File permissions cause LoadError

As reported in googleapis/google-cloud-ruby#1562, google-gax 0.8.3 has removed global read from the file permissions, causing problems when the gem is installed and run with different users. This has happened previously in #54.

Here are the file permissions for the gem:

$ tree -p /Users/blowmage/Downloads/google-gax-0.8.3/data 
/Users/blowmage/Downloads/google-gax-0.8.3/data
├── [-rw-r-----]  README.md
├── [-rw-r-----]  Rakefile
├── [drwxr-xr-x]  lib
│   └── [drwxr-xr-x]  google
│       ├── [drwxr-xr-x]  gax
│       │   ├── [-rw-r-----]  api_callable.rb
│       │   ├── [-rw-r-----]  bundling.rb
│       │   ├── [-rw-r-----]  constants.rb
│       │   ├── [-rw-r-----]  errors.rb
│       │   ├── [-rw-r-----]  grpc.rb
│       │   ├── [-rw-r-----]  operation.rb
│       │   ├── [-rw-r-----]  path_template.rb
│       │   ├── [-rw-r-----]  settings.rb
│       │   └── [-rw-r-----]  version.rb
│       ├── [-rw-r-----]  gax.rb
│       └── [drwxr-xr-x]  longrunning
│           ├── [-rw-r-----]  operations_client.rb
│           └── [-rw-r-----]  operations_client_config.json
└── [drwxr-xr-x]  spec
    ├── [drwxr-xr-x]  google
    │   └── [drwxr-xr-x]  gax
    │       ├── [-rw-r-----]  api_callable_spec.rb
    │       ├── [-rw-r-----]  bundling_spec.rb
    │       ├── [-rw-r-----]  operation_spec.rb
    │       ├── [-rw-r-----]  path_template_spec.rb
    │       └── [-rw-r-----]  settings_spec.rb
    └── [-rw-r-----]  spec_helper.rb

7 directories, 20 files

Remove CallSettings

The next release will remove CallSettings and instead use a combination of sensible defaults and error introspection for this functionality.

Remove grpc dependency from api_callable.rb

GAX files are usually designed to be orthogonal with underlying APIs, but catch_errors function assumes gRPC errors (and wrap it with GaxError).

This needs to be factored out. It shouldn't depend on grpc.

  • list of known errors should be brought to call settings
  • construct_settings should accept the list of known errors
  • then, googleapis/toolkit should pass the gRPC errors

File permissions cause LoadError

Hi, the google-cloud-ruby project has a couple of reports of LoadError when requiring "google/gax". (See googleapis/google-cloud-ruby#1193 and googleapis/google-cloud-ruby#1194) The cause for this is that the gems are packaged with files using 640 permissions, where 664 or 644 permissions are expected.

A very common production scenario for Ruby applications is to have a deploy user install the application and all dependent libraries, and an app user account run the application. Because of how the google-gax file permissions are set, it is entirely possible that the app user cannot read the files, and a LoadError is raised.

Here are the permissions for google-gax 0.6.0:

├── [-rw-r-----]  README.md
├── [-rw-r-----]  Rakefile
├── [drwxr-xr-x]  lib
│   └── [drwxr-xr-x]  google
│       ├── [drwxr-xr-x]  gax
│       │   ├── [-rw-r-----]  api_callable.rb
│       │   ├── [-rw-r-----]  bundling.rb
│       │   ├── [-rw-r-----]  errors.rb
│       │   ├── [-rw-r-----]  grpc.rb
│       │   ├── [-rw-r-----]  path_template.rb
│       │   ├── [-rw-r-----]  settings.rb
│       │   └── [-rw-r-----]  version.rb
│       ├── [-rw-r-----]  gax.rb
│       └── [drwxr-xr-x]  longrunning
│           ├── [-rw-r-----]  operations_api.rb
│           └── [-rw-r-----]  operations_client_config.json
└── [drwxr-xr-x]  spec
    ├── [drwxr-xr-x]  google
    │   └── [drwxr-xr-x]  gax
    │       ├── [-rw-r-----]  api_callable_spec.rb
    │       ├── [-rw-r-----]  bundling_spec.rb
    │       ├── [-rw-r-----]  path_template_spec.rb
    │       └── [-rw-r-----]  settings_spec.rb
    └── [-rw-r-----]  spec_helper.rb

7 directories, 17 files

This problem also affects googleapis-common-protos, but I don't see a repo for that gem, so I'm mentioning it here.

Error messages for Ruby version are confusing

When my connection had failed (for unknown reasons) I got this error:

Google::Gax::RetryError: GaxError Exception occurred in retry method that was not classified as transient, caused by 13:{"created":"@1494283961.020680000","description":"Transport closed","file":"src/core/ext/transport/chttp2/transport/chttp2_transport.c","file_line":1072}

As a user it is unclear to me what action I should take in this case. The "Exception occurred in retry method that was not classified as transient" part is especially confusing. Can we improve the error message to suggest an action the user should take? I ended up retrying and things started working again.

Hash coercion: unhelpful error message

Observed behavior

Attempt to coerce a hash to proto that does not contain an array for a repeated field using util:

ArgumentError (ArgumentError)

Expected behavior

Could not coerce value XXX to array (ArgumentError)

Hash coercion: incorrect handling of map types

Observed behavior

util.coerce will attempt to coerce the my_map field of {:my_map => {'a_string_key', 'a_string_val'}} to a proto because the value is a hash. The proto constructor then fails.

Expected

util.coerce should convert hashes to protos only if they are message fields, not map fields.

"Call dropped by load balancing policy" bug in gRPC 1.6.X dependency breaks "gax-ruby"

After we upgraded to the latest gax-ruby version 0.8.12, half of our tests started to fail with this error:
GRPC::Unknown: 2:Call dropped by load balancing policy.

Seems in 0.8.12 we started to require gRPC version 1.6.6 in order to pick up the partial success fix: 5167ef9#diff-566e79ce8151caa84850d18bbabde74d

There is already an open issue in gRPC to fix the load balancing bug: grpc/grpc#12506.

We need to upgrade to a working gRPC version once that issue is fixed.

File/IO coercion

Coercion logic should automatically convert File and IO instances to bytes in request messages.

review and remove remaining Pythonic styles

I got some feedback saying gax-ruby contains a few things which is kinda Pythonic (that's because originally this was based on googleapis/gax-python). Likewise, underscores-functions or some comments mention things like 'None'.

I'll have to review the entire code and rewrite these things to Ruby style.

Remove PathTemplate

The 2.0 release will remove PathTemplate from the library. This functionality will be replaced in the upcoming GAPIC protobuf generator, which will parse the templates and create helper methods during the generation. This will avoid the performance issues using PathTemplate discussed in #119.

How do I override grpc Max Receive Message Length ?

Hi, I want to override this grpc configuration option because my use of google-cloud-ruby is hitting the 4.19MB limit:
https://github.com/grpc/grpc/blob/master/include/grpc/impl/codegen/grpc_types.h#L153
"GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH"

I'm looking at
https://github.com/googleapis/gax-ruby/blob/master/lib/google/longrunning/operations_client.rb
and I don't see anything about grpc options.

Is it possible to do it with a custom client_config object? Looking at the default config, it's not clear to me how I can modify it to change the grpc configuration:
https://github.com/googleapis/gax-ruby/blob/master/lib/google/longrunning/operations_client_config.json

This is the google issue that brought me here:
https://issuetracker.google.com/issues/113502127

Any help much appreciated, thanks!

GAPIC helper methods are inconvenient

As discussed in #119, the GAPIC client helper methods are inconvenient and are being avoided in code examples. They could be better.

Take this Spanner GAPIC client example, the longest line is calling the session_path code example:

require "google/cloud/spanner/v1"

spanner_client = Google::Cloud::Spanner::V1.new

session = Google::Cloud::Spanner::V1::SpannerClient.session_path("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]")
sql = "SELECT * FROM users"

response = spanner_client.execute_sql(session, sql)

Stabilize rubocop style checking

I've seen new rubocop failures happening on travis even if no changes are made on the related file. An example is https://github.com/googleapis/gax-ruby/pull/67/files (change of version string) and https://travis-ci.org/googleapis/gax-ruby/jobs/219042228.

This would be due to rubocop's behavioral changes; gax's gemspec (https://github.com/googleapis/gax-ruby/blob/master/google-gax.gemspec) says s.add_development_dependency 'rubocop', '~> 0.32', and every new CI invocation installs the latest version of rubocop compatible with this spec, and sometimes the newer version of rubocop starts complaining new violations on existing code.

And note that '~> 0.32' means >=0.32 and <1.0. The latest version of rubocop is 0.48.1, which is compatible with this spec.

I think we should specify some exact version of rubocop (like =0.48.0) or at least allows only the patch level changes (like ~>0.48.0), and then, manually bump the rubocop version dependency if we want additional style checking.

Thoughts?

Concurrent Requests Lock Client

Hello, we are unable to make more than 4 concurrent requests using a GAPIC client. When more than 4 concurrent requests are made the client seems to lock up until the requests time out. We are currently in an effort to add more concurrency in the Google Cloud Pub/Sub Ruby library, and while this seems to be working well while making concurrent streaming API calls, we are seeing the grpc client lock up while concurrently calling non-streaming APIs under moderate load.

To illustrate, I have included a ruby script that attempts to benchmark the performance differences between making sequential and concurrent requests. The default number of requests is 4, but you can pass in an argument to change the number of requests. This script will lock up and eventually time out when passing in a number larger than 4. Here is the output when running 4 and 6 concurrent requests:

$ ruby benchmark_gapic.rb 4
       user     system      total        real
sequential#<Google::Pubsub::V1::PublishResponse:0x007faed3afb160>
#<Google::Pubsub::V1::PublishResponse:0x007faed3ad8660>
#<Google::Pubsub::V1::PublishResponse:0x007faed3aa9bd0>
#<Google::Pubsub::V1::PublishResponse:0x007faed3a7b118>
  0.390000   0.500000   0.890000 ( 16.913990)
concurrent#<Google::Pubsub::V1::PublishResponse:0x007faed1845b20>
#<Google::Pubsub::V1::PublishResponse:0x007faed18a7898>
#<Google::Pubsub::V1::PublishResponse:0x007faed19372b8>
#<Google::Pubsub::V1::PublishResponse:0x007faed1955178>
  0.390000   0.540000   0.930000 ( 11.678385)

$ ruby benchmark_gapic.rb 6
       user     system      total        real
sequential#<Google::Pubsub::V1::PublishResponse:0x007ffd71951f48>
#<Google::Pubsub::V1::PublishResponse:0x007ffd71923418>
#<Google::Pubsub::V1::PublishResponse:0x007ffd719009b8>
#<Google::Pubsub::V1::PublishResponse:0x007ffd718d1f28>
#<Google::Pubsub::V1::PublishResponse:0x007ffd6f847488>
#<Google::Pubsub::V1::PublishResponse:0x007ffd6f8979d8>
  0.570000   0.700000   1.270000 ( 18.899312)
concurrent/Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:357:in `rescue in block (2 levels) in retryable': GaxError Retry total timeout exceeded with exception, caused by 4:Deadline Exceeded (Google::Gax::RetryError)
	from /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:343:in `block (2 levels) in retryable'
	from /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:342:in `loop'
	from /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:342:in `block in retryable'
	from /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:262:in `block in catch_errors'
	from /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:224:in `block in create_api_call'
	from /Users/blowmage/.gem/repos/gcloud-ruby/gems/google-gax-0.8.4/lib/google/gax/api_callable.rb:250:in `block in create_api_call'
	from /Users/blowmage/google/codez/gcloud-ruby/google-cloud-pubsub/lib/google/cloud/pubsub/v1/publisher_client.rb:326:in `publish'
	from benchmark_gapic.rb:56:in `block (4 levels) in <main>'

Here is the script:

$stdout.sync = true
Thread.abort_on_exception = true

require "google/cloud/pubsub/v1"
require "grpc"
require "googleauth"
require "securerandom"
require "benchmark"

# This will benchmark publishing 1 million 4KB messages
# using the previous batch method, and the new async publisher

project = ENV["GOOGLE_CLOUD_PROJECT"] || "<ENTER-PROJECT-ID-HERE>"
keyfile = ENV["GOOGLE_CLOUD_KEYFILE"] || "<ENTER-KEYFILE-PATH-HERE>"

host = Google::Cloud::Pubsub::V1::PublisherClient::SERVICE_ADDRESS
chan_args = { "grpc.max_send_message_length"    => -1,
              "grpc.max_receive_message_length" => -1 }
auth = Google::Auth::ServiceAccountCredentials.make_creds \
  json_key_io: File.open(keyfile, mode: "r"),
  scope: Google::Cloud::Pubsub::V1::PublisherClient::ALL_SCOPES
chan_creds = GRPC::Core::ChannelCredentials.new.compose \
  GRPC::Core::CallCredentials.new(auth.updater_proc)
channel = GRPC::Core::Channel.new host, chan_args, chan_creds
pub_client = Google::Cloud::Pubsub::V1::PublisherClient.new channel: channel

topic_name = "loadtest"
topic_path = Google::Cloud::Pubsub::V1::PublisherClient.topic_path project, topic_name
topic_grpc = begin
               pub_client.get_topic topic_path
             rescue Google::Gax::GaxError => e
               raise e unless e.cause.code == 5
               pub_client.create_topic topic_path
             end

msg_data = SecureRandom.random_bytes 4*1024
messages = 1000.times.map { Google::Pubsub::V1::PubsubMessage.new data: msg_data }

n = (ARGV.first || 4).to_i

Benchmark.bm do |bm|
  bm.report "sequential" do
    # runs the publish requests synchronously
    responses = n.times.map do
      pub_response = pub_client.publish topic_path, messages
      puts pub_response # uncomment to see when recieved
      pub_response
    end
    # puts responses.inspect
  end

  bm.report "concurrent" do
    # runs the publish requests asynchronously
    threads = n.times.map do
      Thread.new do
        pub_response = pub_client.publish topic_path, messages
        puts pub_response # uncomment to see when recieved
        pub_response
      end
    end
    responses = threads.map &:value
    # puts responses.inspect
  end
end

This script is using the GAPIC layer to make the calls. I have a version of this script that uses the GRPC stub instead and is able to make more than 4 concurrent requests without locking up.

gRPC error messages are missing metadata

Originally reported by @frankyn

What

Metadata is stripped from the gRPC error message.

To reproduce

Call the Video Intelligence with a timeout <45s.

Observed behavior

A vague/unhelpful error message is reported, specifying only that an argument is invalid, but not which:

api_callable.rb:349:in `rescue in block (2 levels) in retryable': GaxError Exception occurred in retry method that was not classified as transient, caused by 3:Request contains an invalid argument. (Google::Gax::RetryError)

Expected behavior

The full error message, with details of what went wrong, should be displayed. The full error message is currently observable by setting the gRPC debug flags:

invalid_argument: RPC deadline too short. Mininum deadline per request: 45s. Requested deadline: 19s

Generated gem's permission is wrong

It is not a direct issue of gax-ruby itself (or any others), but somehow, the default configuration for my development environment is 027 which drops any permissions for others.

% umask
027

Because of that, any of the installations drop the read permissions -- and that could cause permission denied error in some environment. It would be better to regenerate the gem packages.

Update Ruby version support in README.md

Please apply the following patch to generated README files. This change is being applied manually to existing generated files in googleapis/google-cloud-ruby#2130.

-This library is supported on Ruby 2.0+.
-
-However, Ruby 2.3 or later is strongly recommended, as earlier releases have
-reached or are nearing end-of-life. After June 1, 2018, Google will provide
-official support only for Ruby versions that are considered current and
-supported by Ruby Core (that is, Ruby versions that are either in normal
-maintenance or in security maintenance).
-See https://www.ruby-lang.org/en/downloads/branches/ for further details.
+This library is supported on Ruby 2.3+.
+
+Google provides official support for Ruby versions that are actively supported
+by Ruby Core—that is, Ruby versions that are either in normal maintenance or
+in security maintenance, and not end of life. Currently, this means Ruby 2.3
+and later. Older versions of Ruby _may_ still work, but are unsupported and not
+recommended. See https://www.ruby-lang.org/en/downloads/branches/ for details
+about the Ruby support schedule.

TypeError: Expected Map instance

In the conversion of google-cloud-logging from GRPC to GAPIC using GAX, we ran into the following problem dealing with hash objects not being converted to Map objects.

The generated write_log_entries method is as follows:

# Writes log entries to Stackdriver Logging.  All log entries are
# written by this method.
#
# @param log_name [String]
#   Optional. A default log resource name that is assigned to all log entries
#   in +entries+ that do not specify a value for +log_name+.  Example:
#   +"projects/my-project/logs/syslog"+.  See
#   LogEntry.
# @param resource [Google::Api::MonitoredResource]
#   Optional. A default monitored resource object that is assigned to all log
#   entries in +entries+ that do not specify a value for +resource+. Example:
#
#       { "type": "gce_instance",
#         "labels": {
#           "zone": "us-central1-a", "instance_id": "00000000000000000000" }}
#
#   See LogEntry.
# @param labels [Hash{String => String}]
#   Optional. Default labels that are added to the +labels+ field of all log
#   entries in +entries+. If a log entry already has a label with the same key
#   as a label in this parameter, then the log entry's label is not changed.
#   See LogEntry.
# @param entries [Array<Google::Logging::V2::LogEntry>]
#   Required. The log entries to write. Values supplied for the fields
#   +log_name+, +resource+, and +labels+ in this +entries.write+ request are
#   added to those log entries that do not provide their own values for the
#   fields.
#
#   To improve throughput and to avoid exceeding the
#   {quota limit}[https://cloud.google.com/logging/quota-policy] for calls to +entries.write+,
#   you should write multiple log entries at once rather than
#   calling this method for each individual log entry.
# @param partial_success [true, false]
#   Optional. Whether valid entries should be written even if some other
#   entries fail due to INVALID_ARGUMENT or PERMISSION_DENIED errors. If any
#   entry is not written, the response status will be the error associated
#   with one of the failed entries and include error details in the form of
#   WriteLogEntriesPartialErrors.
# @param options [Google::Gax::CallOptions]
#   Overrides the default settings for this call, e.g, timeout,
#   retries, etc.
# @return [Google::Logging::V2::WriteLogEntriesResponse]
# @raise [Google::Gax::GaxError] if the RPC is aborted.
# @example
#   require "google/cloud/logging/v2/logging_service_v2_api"
#
#   LoggingServiceV2Api = Google::Cloud::Logging::V2::LoggingServiceV2Api
#
#   logging_service_v2_api = LoggingServiceV2Api.new
#   entries = []
#   response = logging_service_v2_api.write_log_entries(entries)

def write_log_entries \
    entries,
    log_name: nil,
    resource: nil,
    labels: nil,
    partial_success: nil,
    options: nil
  req = Google::Logging::V2::WriteLogEntriesRequest.new(
    entries: entries
  )
  req.log_name = log_name unless log_name.nil?
  req.resource = resource unless resource.nil?
  req.labels = labels unless labels.nil?
  req.partial_success = partial_success unless partial_success.nil?
  @write_log_entries.call(req, options)
end

The labels argument is clearly documented as a hash of strings ([Hash{String => String}]). However, when providing a hash of strings, TypeError: Expected Map instance is raised. This is because the protobuf object is inconsistent in how it automatically boxes Hash to Map when setting the value using an accessor method. One option is to track which arguments are going to be Maps and convert them in the GAPIC method:

def write_log_entries \
    entries,
    log_name: nil,
    resource: nil,
    labels: nil,
    partial_success: nil,
    options: nil
  req = Google::Logging::V2::WriteLogEntriesRequest.new(
    entries: entries
  )
  req.log_name = log_name unless log_name.nil?
  req.resource = resource unless resource.nil?
  unless labels.nil?
    labels_map = Google::Protobuf::Map.new(:string, :string)
    labels.each { |k, v| labels_map[String(k)] = String(v) }
    req.labels = labels_map
  end
  req.partial_success = partial_success unless partial_success.nil?
  @write_log_entries.call(req, options)
end

Another option is to skip the use of accessor methods and set all values in the constructor. The protobuf class correctly boxes Hash to Map in the constructor. This is how google-cloud-ruby has chosen to avoid this bug before converting to GAPIC and GAX:

def write_log_entries \
    entries,
    log_name: nil,
    resource: nil,
    labels: nil,
    partial_success: nil,
    options: nil
  req = Google::Logging::V2::WriteLogEntriesRequest.new(
    {
      entries: entries,
      log_name: log_name,
      resource: resource,
      labels: labels,
      partial_success: partial_success
    }.delete_if { |_, v| v.nil? }
  )

  @write_log_entries.call(req, options)
end

File permissions issue with version 0.8.3

Hi,

I'm seeing the same file permissions issue (#54) that affected other versions happening with version 0.8.3.

This is not happening for version 0.8.2.

I've downloaded the gem and manually unpacked:

$ wget https://rubygems.org/downloads/google-gax-0.8.3.gem
--2017-06-21 16:16:17--  https://rubygems.org/downloads/google-gax-0.8.3.gem
Resolving rubygems.org... 151.101.194.2, 151.101.130.2, 151.101.66.2, ...
Connecting to rubygems.org|151.101.194.2|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 33792 (33K) [application/octet-stream]
Saving to: ‘google-gax-0.8.3.gem’

google-gax-0.8.3.gem                                               100%[==============================================================================================================================================================>]  33.00K  --.-KB/s    in 0.02s   

2017-06-21 16:16:17 (1.42 MB/s) - ‘google-gax-0.8.3.gem’ saved [33792/33792]

16:16:17- tmp $ gem unpack google-gax-0.8.3.gem 
Unpacked gem: '/private/tmp/google-gax-0.8.3'
16:16:23- tmp $ cd google-gax-0.8.3
16:16:27- google-gax-0.8.3 $ find . -type f -perm 640 -print 
./lib/google/gax/api_callable.rb
./lib/google/gax/bundling.rb
./lib/google/gax/constants.rb
./lib/google/gax/errors.rb
./lib/google/gax/grpc.rb
./lib/google/gax/operation.rb
./lib/google/gax/path_template.rb
./lib/google/gax/settings.rb
./lib/google/gax/version.rb
./lib/google/gax.rb
./lib/google/longrunning/operations_client.rb
./lib/google/longrunning/operations_client_config.json
./Rakefile
./README.md
./spec/google/gax/api_callable_spec.rb
./spec/google/gax/bundling_spec.rb
./spec/google/gax/operation_spec.rb
./spec/google/gax/path_template_spec.rb
./spec/google/gax/settings_spec.rb
./spec/spec_helper.rb

Load Error with Gax 0.8.9

Just flagging a possible regression:

I'm aware of #54 and that this issue is to do with file permissions + was supposed to be fixed with 0.8.4, however I've run into the following error when deploying a rails app with gax 0.8.9 via K8s and I can't help but think it's the same issue again:

13:04:36 rake aborted!
13:04:36 LoadError: cannot load such file -- /srv/bundle/gems/google-gax-0.8.9/lib/google/gax/errors.rb
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require'
13:04:36 /srv/bundle/gems/google-gax-0.8.9/lib/google/gax/api_callable.rb:32:in `<top (required)>'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require'
13:04:36 /srv/bundle/gems/google-gax-0.8.9/lib/google/gax.rb:30:in `<top (required)>'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require'
13:04:36 /srv/bundle/gems/google-cloud-vision-0.23.0/lib/google/cloud/vision/v1/image_annotator_client.rb:28:in `<top (required)>'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require'
13:04:36 /srv/bundle/gems/google-cloud-vision-0.23.0/lib/google/cloud/vision/v1.rb:15:in `<top (required)>'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require'
13:04:36 /srv/bundle/gems/google-cloud-vision-0.23.0/lib/google/cloud/vision/service.rb:18:in `<top (required)>'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require'
13:04:36 /srv/bundle/gems/google-cloud-vision-0.23.0/lib/google/cloud/vision/project.rb:18:in `<top (required)>'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require'
13:04:36 /srv/bundle/gems/google-cloud-vision-0.23.0/lib/google/cloud/vision.rb:17:in `<top (required)>'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `block in require'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:240:in `load_dependency'
13:04:36 /srv/bundle/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:274:in `require'
13:04:36 /srv/bundle/bundler/gems/my_app-f051dd78048b/lib/my_app.rb:20:in `<top (required)>'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/bundle/gems/bootscale-0.7.0/lib/bootscale/core_ext.rb:4:in `require'
13:04:36 /srv/code/config/application.rb:7:in `<top (required)>'
13:04:36 /srv/code/Rakefile:5:in `require'
13:04:36 /srv/code/Rakefile:5:in `<top (required)>'
13:04:36 /usr/local/rbenv/versions/2.3.3/bin/bundle:23:in `load'
13:04:36 /usr/local/rbenv/versions/2.3.3/bin/bundle:23:in `<main>'
13:04:36 (See full trace by running task with --trace)

Works perfectly on development environment.
Ruby version: ruby 2.3.3p222

Update gRPC dependency

Update gRPC dependency to 1.0.0.pre2.

This is actually a big change, because protobuf version becomes 3.0.0 (non ALPHA), and it changes the require file paths. Therefore, in addition to the changes on gemspec files (in both here and https://github.com/GoogleCloudPlatform/gcloud-ruby), the following action items need to be addressed.

CallOptions kwargs doesn't work

What

The CallOptions kwarg seems to be passed to metadata instead of being used as arbitrary optional args. See:

a_func.call(request, deadline: Time.now + timeout, metadata: kwargs)
:

Why

Users may want to use gRPC optional arguments that we don't explicitly support through GAX. In particular, I encountered this bug trying to use the gRPC setting return_op:

require 'google/cloud/logging'

client = Google::Cloud::Logging::V2::LoggingServiceV2Client.new
options = Google::Gax::CallOptions.new kwargs: {return_op: true}
client.list_logs 'projects/gapic-test', options: options

# Results in:
#   Google::Gax::RetryError: GaxError Exception occurred in retry method that was not classified as transient, caused by Header values must be of type string or array
#   ...

allow specifying per-call method credentials

Probably we should allow specifying per-call credentials in CallOptions in case the user wants to customize the credentials for individual calls but share the very basic client (or share connection channels with other services).

Add page_token into CallOptions (and retire is_page_streaming)

From googleapis/gapic-generator#139:

  • CallOptions should accept 'page_token' field as a parameter to start a stream from a specific position
  • PagedEnumerable should provide the interface to access to the current response object and the next page token in the current response (they are accessible through page instance, but a bit obscure).
  • remove is_page_streaming from CallOptions. page-streaming methods should always return PagedEnumerable.

Remove JSON Configuration

The next release will remove the JSON configuration, and all code related to the JSON configuration.

Issue a 0.6.1 release

We continue to see issues created because of the file permission problems in release 0.6.0 (#54). While this has been corrected in 0.7.0, some users continue to use the older versions and run into this issue. See googleapis/google-cloud-ruby#1387

Unfortunately the release isn't tagged in the git repo, so it may be difficult to find the exact release commit in the repo. If you can't find the release commit, can you download the 0.6.0 gem, correct the gem's file permissions, update the version number to 0.6.1, package the gem, and then manually push the updated gem?

GaxError Exception occurred in retry method

Hi,

While using Gax in google-cloud-language development, both my local testing and our Travis CI build sometimes get the following error. Retrying the call usually succeeds.

The backtrace pasted below is from Job #1433, which should contain all details about the environment.

Thank you!

Google::Gax::RetryError: GaxError Exception occurred in retry method that was not classified as transient, caused by 14:{"created":"@1472169812.007530609","description":"Secure read failed","file":"src/core/lib/security/transport/secure_endpoint.c","file_line":157,"grpc_status":14,"referenced_errors":[{"created":"@1472169812.007501620","description":"EOF","file":"src/core/lib/iomgr/tcp_posix.c","file_line":235}]}
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:352:in `rescue in block (2 levels) in retryable'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:346:in `block (2 levels) in retryable'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:345:in `loop'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:345:in `block in retryable'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:264:in `call'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:264:in `block in catch_errors'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:226:in `call'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:226:in `block in create_api_call'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:252:in `call'
    /home/travis/.rvm/gems/ruby-2.2.5/gems/google-gax-0.4.4/lib/google/gax/api_callable.rb:252:in `block in create_api_call'
    /home/travis/build/GoogleCloudPlatform/google-cloud-ruby/google-cloud-language/lib/google/cloud/language/v1beta1/language_service_api.rb:198:in `call'
    /home/travis/build/GoogleCloudPlatform/google-cloud-ruby/google-cloud-language/lib/google/cloud/language/v1beta1/language_service_api.rb:198:in `annotate_text'
    /home/travis/build/GoogleCloudPlatform/google-cloud-ruby/google-cloud-language/lib/google/cloud/language/service.rb:80:in `block in annotate'
    /home/travis/build/GoogleCloudPlatform/google-cloud-ruby/google-cloud-language/lib/google/cloud/language/service.rb:105:in `execute'
    /home/travis/build/GoogleCloudPlatform/google-cloud-ruby/google-cloud-language/lib/google/cloud/language/service.rb:80:in `annotate'
    /home/travis/build/GoogleCloudPlatform/google-cloud-ruby/google-cloud-language/lib/google/cloud/language/project.rb:176:in `annotate'
    /home/travis/build/GoogleCloudPlatform/google-cloud-ruby/google-cloud-language/acceptance/language/text_test.rb:60:in `block (3 levels) in <top (required)>'

Document releases

It would be very helpful to have release notes when a release is made, so we can track changes over time. I'd like to see the following:

  1. Add a CHANGELOG file that lists releases and shows release notes.
  2. Each release commit is tagged, so we can easily check out each release using git.
  3. Create a GitHub Release using the tagged commit, and add the release notes to the release description.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.