planetscale 0.2.0 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. checksums.yaml +4 -4
  2. data/.buildkite/pipeline.yml +21 -0
  3. data/.github/workflows/ci.yml +9 -1
  4. data/.github/workflows/gem-push.yml +9 -2
  5. data/.licenses/go/github.com/matoous/go-nanoid/v2.dep.yml +34 -0
  6. data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +56 -3
  7. data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +205 -172
  8. data/.licenses/go/go.uber.org/zap/buffer.dep.yml +1 -1
  9. data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +1 -1
  10. data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +1 -1
  11. data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +1 -1
  12. data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +1 -1
  13. data/.licenses/go/go.uber.org/zap.dep.yml +1 -1
  14. data/README.md +11 -8
  15. data/controller.go +24 -26
  16. data/go.mod +4 -3
  17. data/go.sum +42 -27
  18. data/lib/generators/planetscale/install_generator.rb +8 -6
  19. data/lib/planetscale/version.rb +1 -1
  20. data/lib/planetscale.rb +14 -15
  21. data/planetscale.gemspec +2 -2
  22. data/proxy/planetscale-darwin.h +1 -1
  23. data/proxy/planetscale-darwin.so +0 -0
  24. data/proxy/planetscale-linux.h +1 -1
  25. data/proxy/planetscale-linux.so +0 -0
  26. data/proxy.go +1 -5
  27. metadata +6 -342
  28. data/vendor/github.com/armon/circbuf/.gitignore +0 -22
  29. data/vendor/github.com/armon/circbuf/LICENSE +0 -20
  30. data/vendor/github.com/armon/circbuf/README.md +0 -28
  31. data/vendor/github.com/armon/circbuf/circbuf.go +0 -92
  32. data/vendor/github.com/armon/circbuf/go.mod +0 -1
  33. data/vendor/github.com/golang/protobuf/AUTHORS +0 -3
  34. data/vendor/github.com/golang/protobuf/CONTRIBUTORS +0 -3
  35. data/vendor/github.com/golang/protobuf/LICENSE +0 -28
  36. data/vendor/github.com/golang/protobuf/proto/buffer.go +0 -324
  37. data/vendor/github.com/golang/protobuf/proto/defaults.go +0 -63
  38. data/vendor/github.com/golang/protobuf/proto/deprecated.go +0 -113
  39. data/vendor/github.com/golang/protobuf/proto/discard.go +0 -58
  40. data/vendor/github.com/golang/protobuf/proto/extensions.go +0 -356
  41. data/vendor/github.com/golang/protobuf/proto/properties.go +0 -306
  42. data/vendor/github.com/golang/protobuf/proto/proto.go +0 -167
  43. data/vendor/github.com/golang/protobuf/proto/registry.go +0 -317
  44. data/vendor/github.com/golang/protobuf/proto/text_decode.go +0 -801
  45. data/vendor/github.com/golang/protobuf/proto/text_encode.go +0 -560
  46. data/vendor/github.com/golang/protobuf/proto/wire.go +0 -78
  47. data/vendor/github.com/golang/protobuf/proto/wrappers.go +0 -34
  48. data/vendor/github.com/gorilla/mux/AUTHORS +0 -8
  49. data/vendor/github.com/gorilla/mux/LICENSE +0 -27
  50. data/vendor/github.com/gorilla/mux/README.md +0 -805
  51. data/vendor/github.com/gorilla/mux/doc.go +0 -306
  52. data/vendor/github.com/gorilla/mux/go.mod +0 -3
  53. data/vendor/github.com/gorilla/mux/middleware.go +0 -74
  54. data/vendor/github.com/gorilla/mux/mux.go +0 -606
  55. data/vendor/github.com/gorilla/mux/regexp.go +0 -388
  56. data/vendor/github.com/gorilla/mux/route.go +0 -736
  57. data/vendor/github.com/gorilla/mux/test_helpers.go +0 -19
  58. data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +0 -363
  59. data/vendor/github.com/hashicorp/go-cleanhttp/README.md +0 -30
  60. data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +0 -58
  61. data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +0 -20
  62. data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +0 -3
  63. data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +0 -48
  64. data/vendor/github.com/mitchellh/go-homedir/LICENSE +0 -21
  65. data/vendor/github.com/mitchellh/go-homedir/README.md +0 -14
  66. data/vendor/github.com/mitchellh/go-homedir/go.mod +0 -1
  67. data/vendor/github.com/mitchellh/go-homedir/homedir.go +0 -167
  68. data/vendor/github.com/pkg/errors/.gitignore +0 -24
  69. data/vendor/github.com/pkg/errors/.travis.yml +0 -10
  70. data/vendor/github.com/pkg/errors/LICENSE +0 -23
  71. data/vendor/github.com/pkg/errors/Makefile +0 -44
  72. data/vendor/github.com/pkg/errors/README.md +0 -59
  73. data/vendor/github.com/pkg/errors/appveyor.yml +0 -32
  74. data/vendor/github.com/pkg/errors/errors.go +0 -288
  75. data/vendor/github.com/pkg/errors/go113.go +0 -38
  76. data/vendor/github.com/pkg/errors/stack.go +0 -177
  77. data/vendor/github.com/planetscale/planetscale-go/planetscale/backups.go +0 -139
  78. data/vendor/github.com/planetscale/planetscale-go/planetscale/branches.go +0 -258
  79. data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +0 -142
  80. data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +0 -305
  81. data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +0 -131
  82. data/vendor/github.com/planetscale/planetscale-go/planetscale/deploy_requests.go +0 -368
  83. data/vendor/github.com/planetscale/planetscale-go/planetscale/organizations.go +0 -78
  84. data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +0 -163
  85. data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +0 -467
  86. data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +0 -73
  87. data/vendor/go.uber.org/atomic/.codecov.yml +0 -19
  88. data/vendor/go.uber.org/atomic/.gitignore +0 -12
  89. data/vendor/go.uber.org/atomic/.travis.yml +0 -27
  90. data/vendor/go.uber.org/atomic/CHANGELOG.md +0 -76
  91. data/vendor/go.uber.org/atomic/LICENSE.txt +0 -19
  92. data/vendor/go.uber.org/atomic/Makefile +0 -78
  93. data/vendor/go.uber.org/atomic/README.md +0 -63
  94. data/vendor/go.uber.org/atomic/bool.go +0 -81
  95. data/vendor/go.uber.org/atomic/bool_ext.go +0 -53
  96. data/vendor/go.uber.org/atomic/doc.go +0 -23
  97. data/vendor/go.uber.org/atomic/duration.go +0 -82
  98. data/vendor/go.uber.org/atomic/duration_ext.go +0 -40
  99. data/vendor/go.uber.org/atomic/error.go +0 -51
  100. data/vendor/go.uber.org/atomic/error_ext.go +0 -39
  101. data/vendor/go.uber.org/atomic/float64.go +0 -76
  102. data/vendor/go.uber.org/atomic/float64_ext.go +0 -47
  103. data/vendor/go.uber.org/atomic/gen.go +0 -26
  104. data/vendor/go.uber.org/atomic/go.mod +0 -8
  105. data/vendor/go.uber.org/atomic/go.sum +0 -9
  106. data/vendor/go.uber.org/atomic/int32.go +0 -102
  107. data/vendor/go.uber.org/atomic/int64.go +0 -102
  108. data/vendor/go.uber.org/atomic/nocmp.go +0 -35
  109. data/vendor/go.uber.org/atomic/string.go +0 -54
  110. data/vendor/go.uber.org/atomic/string_ext.go +0 -43
  111. data/vendor/go.uber.org/atomic/uint32.go +0 -102
  112. data/vendor/go.uber.org/atomic/uint64.go +0 -102
  113. data/vendor/go.uber.org/atomic/value.go +0 -31
  114. data/vendor/go.uber.org/multierr/.codecov.yml +0 -15
  115. data/vendor/go.uber.org/multierr/.gitignore +0 -4
  116. data/vendor/go.uber.org/multierr/.travis.yml +0 -23
  117. data/vendor/go.uber.org/multierr/CHANGELOG.md +0 -60
  118. data/vendor/go.uber.org/multierr/LICENSE.txt +0 -19
  119. data/vendor/go.uber.org/multierr/Makefile +0 -42
  120. data/vendor/go.uber.org/multierr/README.md +0 -23
  121. data/vendor/go.uber.org/multierr/error.go +0 -449
  122. data/vendor/go.uber.org/multierr/glide.yaml +0 -8
  123. data/vendor/go.uber.org/multierr/go.mod +0 -8
  124. data/vendor/go.uber.org/multierr/go.sum +0 -11
  125. data/vendor/go.uber.org/multierr/go113.go +0 -52
  126. data/vendor/go.uber.org/zap/.codecov.yml +0 -17
  127. data/vendor/go.uber.org/zap/.gitignore +0 -32
  128. data/vendor/go.uber.org/zap/.readme.tmpl +0 -109
  129. data/vendor/go.uber.org/zap/.travis.yml +0 -23
  130. data/vendor/go.uber.org/zap/CHANGELOG.md +0 -432
  131. data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +0 -75
  132. data/vendor/go.uber.org/zap/CONTRIBUTING.md +0 -81
  133. data/vendor/go.uber.org/zap/FAQ.md +0 -156
  134. data/vendor/go.uber.org/zap/LICENSE.txt +0 -19
  135. data/vendor/go.uber.org/zap/Makefile +0 -63
  136. data/vendor/go.uber.org/zap/README.md +0 -134
  137. data/vendor/go.uber.org/zap/array.go +0 -320
  138. data/vendor/go.uber.org/zap/buffer/buffer.go +0 -123
  139. data/vendor/go.uber.org/zap/buffer/pool.go +0 -49
  140. data/vendor/go.uber.org/zap/checklicense.sh +0 -17
  141. data/vendor/go.uber.org/zap/config.go +0 -264
  142. data/vendor/go.uber.org/zap/doc.go +0 -113
  143. data/vendor/go.uber.org/zap/encoder.go +0 -79
  144. data/vendor/go.uber.org/zap/error.go +0 -80
  145. data/vendor/go.uber.org/zap/field.go +0 -539
  146. data/vendor/go.uber.org/zap/flag.go +0 -39
  147. data/vendor/go.uber.org/zap/glide.yaml +0 -34
  148. data/vendor/go.uber.org/zap/global.go +0 -168
  149. data/vendor/go.uber.org/zap/global_go112.go +0 -26
  150. data/vendor/go.uber.org/zap/global_prego112.go +0 -26
  151. data/vendor/go.uber.org/zap/go.mod +0 -13
  152. data/vendor/go.uber.org/zap/go.sum +0 -56
  153. data/vendor/go.uber.org/zap/http_handler.go +0 -81
  154. data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +0 -31
  155. data/vendor/go.uber.org/zap/internal/color/color.go +0 -44
  156. data/vendor/go.uber.org/zap/internal/exit/exit.go +0 -64
  157. data/vendor/go.uber.org/zap/level.go +0 -132
  158. data/vendor/go.uber.org/zap/logger.go +0 -344
  159. data/vendor/go.uber.org/zap/options.go +0 -140
  160. data/vendor/go.uber.org/zap/sink.go +0 -161
  161. data/vendor/go.uber.org/zap/stacktrace.go +0 -85
  162. data/vendor/go.uber.org/zap/sugar.go +0 -304
  163. data/vendor/go.uber.org/zap/time.go +0 -27
  164. data/vendor/go.uber.org/zap/writer.go +0 -99
  165. data/vendor/go.uber.org/zap/zapcore/console_encoder.go +0 -161
  166. data/vendor/go.uber.org/zap/zapcore/core.go +0 -113
  167. data/vendor/go.uber.org/zap/zapcore/doc.go +0 -24
  168. data/vendor/go.uber.org/zap/zapcore/encoder.go +0 -443
  169. data/vendor/go.uber.org/zap/zapcore/entry.go +0 -264
  170. data/vendor/go.uber.org/zap/zapcore/error.go +0 -115
  171. data/vendor/go.uber.org/zap/zapcore/field.go +0 -227
  172. data/vendor/go.uber.org/zap/zapcore/hook.go +0 -68
  173. data/vendor/go.uber.org/zap/zapcore/increase_level.go +0 -66
  174. data/vendor/go.uber.org/zap/zapcore/json_encoder.go +0 -534
  175. data/vendor/go.uber.org/zap/zapcore/level.go +0 -175
  176. data/vendor/go.uber.org/zap/zapcore/level_strings.go +0 -46
  177. data/vendor/go.uber.org/zap/zapcore/marshaler.go +0 -61
  178. data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +0 -179
  179. data/vendor/go.uber.org/zap/zapcore/sampler.go +0 -208
  180. data/vendor/go.uber.org/zap/zapcore/tee.go +0 -81
  181. data/vendor/go.uber.org/zap/zapcore/write_syncer.go +0 -123
  182. data/vendor/golang.org/x/net/AUTHORS +0 -3
  183. data/vendor/golang.org/x/net/CONTRIBUTORS +0 -3
  184. data/vendor/golang.org/x/net/LICENSE +0 -27
  185. data/vendor/golang.org/x/net/PATENTS +0 -22
  186. data/vendor/golang.org/x/net/context/context.go +0 -56
  187. data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +0 -71
  188. data/vendor/golang.org/x/net/context/go17.go +0 -73
  189. data/vendor/golang.org/x/net/context/go19.go +0 -21
  190. data/vendor/golang.org/x/net/context/pre_go17.go +0 -301
  191. data/vendor/golang.org/x/net/context/pre_go19.go +0 -110
  192. data/vendor/golang.org/x/oauth2/.travis.yml +0 -13
  193. data/vendor/golang.org/x/oauth2/AUTHORS +0 -3
  194. data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +0 -26
  195. data/vendor/golang.org/x/oauth2/CONTRIBUTORS +0 -3
  196. data/vendor/golang.org/x/oauth2/LICENSE +0 -27
  197. data/vendor/golang.org/x/oauth2/README.md +0 -36
  198. data/vendor/golang.org/x/oauth2/go.mod +0 -9
  199. data/vendor/golang.org/x/oauth2/go.sum +0 -361
  200. data/vendor/golang.org/x/oauth2/internal/client_appengine.go +0 -14
  201. data/vendor/golang.org/x/oauth2/internal/doc.go +0 -6
  202. data/vendor/golang.org/x/oauth2/internal/oauth2.go +0 -37
  203. data/vendor/golang.org/x/oauth2/internal/token.go +0 -294
  204. data/vendor/golang.org/x/oauth2/internal/transport.go +0 -33
  205. data/vendor/golang.org/x/oauth2/oauth2.go +0 -381
  206. data/vendor/golang.org/x/oauth2/token.go +0 -178
  207. data/vendor/golang.org/x/oauth2/transport.go +0 -89
  208. data/vendor/google.golang.org/appengine/LICENSE +0 -202
  209. data/vendor/google.golang.org/appengine/internal/api.go +0 -678
  210. data/vendor/google.golang.org/appengine/internal/api_classic.go +0 -169
  211. data/vendor/google.golang.org/appengine/internal/api_common.go +0 -123
  212. data/vendor/google.golang.org/appengine/internal/app_id.go +0 -28
  213. data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +0 -308
  214. data/vendor/google.golang.org/appengine/internal/base/api_base.proto +0 -33
  215. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +0 -4367
  216. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +0 -551
  217. data/vendor/google.golang.org/appengine/internal/identity.go +0 -55
  218. data/vendor/google.golang.org/appengine/internal/identity_classic.go +0 -61
  219. data/vendor/google.golang.org/appengine/internal/identity_flex.go +0 -11
  220. data/vendor/google.golang.org/appengine/internal/identity_vm.go +0 -134
  221. data/vendor/google.golang.org/appengine/internal/internal.go +0 -110
  222. data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +0 -1313
  223. data/vendor/google.golang.org/appengine/internal/log/log_service.proto +0 -150
  224. data/vendor/google.golang.org/appengine/internal/main.go +0 -16
  225. data/vendor/google.golang.org/appengine/internal/main_common.go +0 -7
  226. data/vendor/google.golang.org/appengine/internal/main_vm.go +0 -69
  227. data/vendor/google.golang.org/appengine/internal/metadata.go +0 -60
  228. data/vendor/google.golang.org/appengine/internal/net.go +0 -56
  229. data/vendor/google.golang.org/appengine/internal/regen.sh +0 -40
  230. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +0 -361
  231. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +0 -44
  232. data/vendor/google.golang.org/appengine/internal/transaction.go +0 -115
  233. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +0 -527
  234. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +0 -64
  235. data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +0 -210
  236. data/vendor/google.golang.org/protobuf/AUTHORS +0 -3
  237. data/vendor/google.golang.org/protobuf/CONTRIBUTORS +0 -3
  238. data/vendor/google.golang.org/protobuf/LICENSE +0 -27
  239. data/vendor/google.golang.org/protobuf/PATENTS +0 -22
  240. data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +0 -773
  241. data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +0 -7
  242. data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +0 -371
  243. data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +0 -538
  244. data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +0 -318
  245. data/vendor/google.golang.org/protobuf/internal/descopts/options.go +0 -29
  246. data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +0 -69
  247. data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +0 -213
  248. data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +0 -241
  249. data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +0 -207
  250. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +0 -665
  251. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +0 -190
  252. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +0 -161
  253. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +0 -373
  254. data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +0 -29
  255. data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +0 -265
  256. data/vendor/google.golang.org/protobuf/internal/errors/errors.go +0 -89
  257. data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +0 -39
  258. data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +0 -12
  259. data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +0 -158
  260. data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +0 -631
  261. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +0 -471
  262. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +0 -704
  263. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +0 -450
  264. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +0 -356
  265. data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +0 -107
  266. data/vendor/google.golang.org/protobuf/internal/filetype/build.go +0 -297
  267. data/vendor/google.golang.org/protobuf/internal/flags/flags.go +0 -24
  268. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +0 -9
  269. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +0 -9
  270. data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +0 -34
  271. data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +0 -106
  272. data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +0 -829
  273. data/vendor/google.golang.org/protobuf/internal/genid/doc.go +0 -11
  274. data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +0 -34
  275. data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +0 -19
  276. data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +0 -31
  277. data/vendor/google.golang.org/protobuf/internal/genid/goname.go +0 -25
  278. data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +0 -16
  279. data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +0 -31
  280. data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +0 -116
  281. data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +0 -34
  282. data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +0 -184
  283. data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +0 -13
  284. data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +0 -175
  285. data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +0 -177
  286. data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +0 -141
  287. data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +0 -223
  288. data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +0 -830
  289. data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +0 -5637
  290. data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +0 -388
  291. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +0 -37
  292. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +0 -11
  293. data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +0 -217
  294. data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +0 -123
  295. data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +0 -209
  296. data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +0 -557
  297. data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +0 -17
  298. data/vendor/google.golang.org/protobuf/internal/impl/convert.go +0 -496
  299. data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +0 -141
  300. data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +0 -121
  301. data/vendor/google.golang.org/protobuf/internal/impl/decode.go +0 -276
  302. data/vendor/google.golang.org/protobuf/internal/impl/encode.go +0 -201
  303. data/vendor/google.golang.org/protobuf/internal/impl/enum.go +0 -21
  304. data/vendor/google.golang.org/protobuf/internal/impl/extension.go +0 -156
  305. data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +0 -219
  306. data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +0 -92
  307. data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +0 -176
  308. data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +0 -81
  309. data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +0 -558
  310. data/vendor/google.golang.org/protobuf/internal/impl/merge.go +0 -176
  311. data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +0 -209
  312. data/vendor/google.golang.org/protobuf/internal/impl/message.go +0 -276
  313. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +0 -465
  314. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +0 -543
  315. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +0 -249
  316. data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +0 -178
  317. data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +0 -174
  318. data/vendor/google.golang.org/protobuf/internal/impl/validate.go +0 -576
  319. data/vendor/google.golang.org/protobuf/internal/impl/weak.go +0 -74
  320. data/vendor/google.golang.org/protobuf/internal/order/order.go +0 -89
  321. data/vendor/google.golang.org/protobuf/internal/order/range.go +0 -115
  322. data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +0 -29
  323. data/vendor/google.golang.org/protobuf/internal/set/ints.go +0 -58
  324. data/vendor/google.golang.org/protobuf/internal/strs/strings.go +0 -196
  325. data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +0 -27
  326. data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +0 -94
  327. data/vendor/google.golang.org/protobuf/internal/version/version.go +0 -79
  328. data/vendor/google.golang.org/protobuf/proto/checkinit.go +0 -71
  329. data/vendor/google.golang.org/protobuf/proto/decode.go +0 -278
  330. data/vendor/google.golang.org/protobuf/proto/decode_gen.go +0 -603
  331. data/vendor/google.golang.org/protobuf/proto/doc.go +0 -94
  332. data/vendor/google.golang.org/protobuf/proto/encode.go +0 -319
  333. data/vendor/google.golang.org/protobuf/proto/encode_gen.go +0 -97
  334. data/vendor/google.golang.org/protobuf/proto/equal.go +0 -167
  335. data/vendor/google.golang.org/protobuf/proto/extension.go +0 -92
  336. data/vendor/google.golang.org/protobuf/proto/merge.go +0 -139
  337. data/vendor/google.golang.org/protobuf/proto/messageset.go +0 -93
  338. data/vendor/google.golang.org/protobuf/proto/proto.go +0 -43
  339. data/vendor/google.golang.org/protobuf/proto/proto_methods.go +0 -19
  340. data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +0 -19
  341. data/vendor/google.golang.org/protobuf/proto/reset.go +0 -43
  342. data/vendor/google.golang.org/protobuf/proto/size.go +0 -97
  343. data/vendor/google.golang.org/protobuf/proto/size_gen.go +0 -55
  344. data/vendor/google.golang.org/protobuf/proto/wrappers.go +0 -29
  345. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +0 -276
  346. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +0 -248
  347. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +0 -286
  348. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +0 -374
  349. data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +0 -252
  350. data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +0 -77
  351. data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +0 -504
  352. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +0 -128
  353. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +0 -461
  354. data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +0 -665
  355. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +0 -285
  356. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +0 -59
  357. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +0 -411
  358. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +0 -98
  359. data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +0 -869
  360. data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +0 -15
  361. data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +0 -167
  362. data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +0 -44
  363. data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +0 -56
  364. data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +0 -4039
  365. data/vendor/modules.txt +0 -79
@@ -1,678 +0,0 @@
1
- // Copyright 2011 Google Inc. All rights reserved.
2
- // Use of this source code is governed by the Apache 2.0
3
- // license that can be found in the LICENSE file.
4
-
5
- // +build !appengine
6
-
7
- package internal
8
-
9
- import (
10
- "bytes"
11
- "errors"
12
- "fmt"
13
- "io/ioutil"
14
- "log"
15
- "net"
16
- "net/http"
17
- "net/url"
18
- "os"
19
- "runtime"
20
- "strconv"
21
- "strings"
22
- "sync"
23
- "sync/atomic"
24
- "time"
25
-
26
- "github.com/golang/protobuf/proto"
27
- netcontext "golang.org/x/net/context"
28
-
29
- basepb "google.golang.org/appengine/internal/base"
30
- logpb "google.golang.org/appengine/internal/log"
31
- remotepb "google.golang.org/appengine/internal/remote_api"
32
- )
33
-
34
- const (
35
- apiPath = "/rpc_http"
36
- defaultTicketSuffix = "/default.20150612t184001.0"
37
- )
38
-
39
- var (
40
- // Incoming headers.
41
- ticketHeader = http.CanonicalHeaderKey("X-AppEngine-API-Ticket")
42
- dapperHeader = http.CanonicalHeaderKey("X-Google-DapperTraceInfo")
43
- traceHeader = http.CanonicalHeaderKey("X-Cloud-Trace-Context")
44
- curNamespaceHeader = http.CanonicalHeaderKey("X-AppEngine-Current-Namespace")
45
- userIPHeader = http.CanonicalHeaderKey("X-AppEngine-User-IP")
46
- remoteAddrHeader = http.CanonicalHeaderKey("X-AppEngine-Remote-Addr")
47
- devRequestIdHeader = http.CanonicalHeaderKey("X-Appengine-Dev-Request-Id")
48
-
49
- // Outgoing headers.
50
- apiEndpointHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Endpoint")
51
- apiEndpointHeaderValue = []string{"app-engine-apis"}
52
- apiMethodHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Method")
53
- apiMethodHeaderValue = []string{"/VMRemoteAPI.CallRemoteAPI"}
54
- apiDeadlineHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Deadline")
55
- apiContentType = http.CanonicalHeaderKey("Content-Type")
56
- apiContentTypeValue = []string{"application/octet-stream"}
57
- logFlushHeader = http.CanonicalHeaderKey("X-AppEngine-Log-Flush-Count")
58
-
59
- apiHTTPClient = &http.Client{
60
- Transport: &http.Transport{
61
- Proxy: http.ProxyFromEnvironment,
62
- Dial: limitDial,
63
- MaxIdleConns: 1000,
64
- MaxIdleConnsPerHost: 10000,
65
- IdleConnTimeout: 90 * time.Second,
66
- },
67
- }
68
-
69
- defaultTicketOnce sync.Once
70
- defaultTicket string
71
- backgroundContextOnce sync.Once
72
- backgroundContext netcontext.Context
73
- )
74
-
75
- func apiURL() *url.URL {
76
- host, port := "appengine.googleapis.internal", "10001"
77
- if h := os.Getenv("API_HOST"); h != "" {
78
- host = h
79
- }
80
- if p := os.Getenv("API_PORT"); p != "" {
81
- port = p
82
- }
83
- return &url.URL{
84
- Scheme: "http",
85
- Host: host + ":" + port,
86
- Path: apiPath,
87
- }
88
- }
89
-
90
- func handleHTTP(w http.ResponseWriter, r *http.Request) {
91
- c := &context{
92
- req: r,
93
- outHeader: w.Header(),
94
- apiURL: apiURL(),
95
- }
96
- r = r.WithContext(withContext(r.Context(), c))
97
- c.req = r
98
-
99
- stopFlushing := make(chan int)
100
-
101
- // Patch up RemoteAddr so it looks reasonable.
102
- if addr := r.Header.Get(userIPHeader); addr != "" {
103
- r.RemoteAddr = addr
104
- } else if addr = r.Header.Get(remoteAddrHeader); addr != "" {
105
- r.RemoteAddr = addr
106
- } else {
107
- // Should not normally reach here, but pick a sensible default anyway.
108
- r.RemoteAddr = "127.0.0.1"
109
- }
110
- // The address in the headers will most likely be of these forms:
111
- // 123.123.123.123
112
- // 2001:db8::1
113
- // net/http.Request.RemoteAddr is specified to be in "IP:port" form.
114
- if _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil {
115
- // Assume the remote address is only a host; add a default port.
116
- r.RemoteAddr = net.JoinHostPort(r.RemoteAddr, "80")
117
- }
118
-
119
- // Start goroutine responsible for flushing app logs.
120
- // This is done after adding c to ctx.m (and stopped before removing it)
121
- // because flushing logs requires making an API call.
122
- go c.logFlusher(stopFlushing)
123
-
124
- executeRequestSafely(c, r)
125
- c.outHeader = nil // make sure header changes aren't respected any more
126
-
127
- stopFlushing <- 1 // any logging beyond this point will be dropped
128
-
129
- // Flush any pending logs asynchronously.
130
- c.pendingLogs.Lock()
131
- flushes := c.pendingLogs.flushes
132
- if len(c.pendingLogs.lines) > 0 {
133
- flushes++
134
- }
135
- c.pendingLogs.Unlock()
136
- flushed := make(chan struct{})
137
- go func() {
138
- defer close(flushed)
139
- // Force a log flush, because with very short requests we
140
- // may not ever flush logs.
141
- c.flushLog(true)
142
- }()
143
- w.Header().Set(logFlushHeader, strconv.Itoa(flushes))
144
-
145
- // Avoid nil Write call if c.Write is never called.
146
- if c.outCode != 0 {
147
- w.WriteHeader(c.outCode)
148
- }
149
- if c.outBody != nil {
150
- w.Write(c.outBody)
151
- }
152
- // Wait for the last flush to complete before returning,
153
- // otherwise the security ticket will not be valid.
154
- <-flushed
155
- }
156
-
157
- func executeRequestSafely(c *context, r *http.Request) {
158
- defer func() {
159
- if x := recover(); x != nil {
160
- logf(c, 4, "%s", renderPanic(x)) // 4 == critical
161
- c.outCode = 500
162
- }
163
- }()
164
-
165
- http.DefaultServeMux.ServeHTTP(c, r)
166
- }
167
-
168
- func renderPanic(x interface{}) string {
169
- buf := make([]byte, 16<<10) // 16 KB should be plenty
170
- buf = buf[:runtime.Stack(buf, false)]
171
-
172
- // Remove the first few stack frames:
173
- // this func
174
- // the recover closure in the caller
175
- // That will root the stack trace at the site of the panic.
176
- const (
177
- skipStart = "internal.renderPanic"
178
- skipFrames = 2
179
- )
180
- start := bytes.Index(buf, []byte(skipStart))
181
- p := start
182
- for i := 0; i < skipFrames*2 && p+1 < len(buf); i++ {
183
- p = bytes.IndexByte(buf[p+1:], '\n') + p + 1
184
- if p < 0 {
185
- break
186
- }
187
- }
188
- if p >= 0 {
189
- // buf[start:p+1] is the block to remove.
190
- // Copy buf[p+1:] over buf[start:] and shrink buf.
191
- copy(buf[start:], buf[p+1:])
192
- buf = buf[:len(buf)-(p+1-start)]
193
- }
194
-
195
- // Add panic heading.
196
- head := fmt.Sprintf("panic: %v\n\n", x)
197
- if len(head) > len(buf) {
198
- // Extremely unlikely to happen.
199
- return head
200
- }
201
- copy(buf[len(head):], buf)
202
- copy(buf, head)
203
-
204
- return string(buf)
205
- }
206
-
207
- // context represents the context of an in-flight HTTP request.
208
- // It implements the appengine.Context and http.ResponseWriter interfaces.
209
- type context struct {
210
- req *http.Request
211
-
212
- outCode int
213
- outHeader http.Header
214
- outBody []byte
215
-
216
- pendingLogs struct {
217
- sync.Mutex
218
- lines []*logpb.UserAppLogLine
219
- flushes int
220
- }
221
-
222
- apiURL *url.URL
223
- }
224
-
225
- var contextKey = "holds a *context"
226
-
227
- // jointContext joins two contexts in a superficial way.
228
- // It takes values and timeouts from a base context, and only values from another context.
229
- type jointContext struct {
230
- base netcontext.Context
231
- valuesOnly netcontext.Context
232
- }
233
-
234
- func (c jointContext) Deadline() (time.Time, bool) {
235
- return c.base.Deadline()
236
- }
237
-
238
- func (c jointContext) Done() <-chan struct{} {
239
- return c.base.Done()
240
- }
241
-
242
- func (c jointContext) Err() error {
243
- return c.base.Err()
244
- }
245
-
246
- func (c jointContext) Value(key interface{}) interface{} {
247
- if val := c.base.Value(key); val != nil {
248
- return val
249
- }
250
- return c.valuesOnly.Value(key)
251
- }
252
-
253
- // fromContext returns the App Engine context or nil if ctx is not
254
- // derived from an App Engine context.
255
- func fromContext(ctx netcontext.Context) *context {
256
- c, _ := ctx.Value(&contextKey).(*context)
257
- return c
258
- }
259
-
260
- func withContext(parent netcontext.Context, c *context) netcontext.Context {
261
- ctx := netcontext.WithValue(parent, &contextKey, c)
262
- if ns := c.req.Header.Get(curNamespaceHeader); ns != "" {
263
- ctx = withNamespace(ctx, ns)
264
- }
265
- return ctx
266
- }
267
-
268
- func toContext(c *context) netcontext.Context {
269
- return withContext(netcontext.Background(), c)
270
- }
271
-
272
- func IncomingHeaders(ctx netcontext.Context) http.Header {
273
- if c := fromContext(ctx); c != nil {
274
- return c.req.Header
275
- }
276
- return nil
277
- }
278
-
279
- func ReqContext(req *http.Request) netcontext.Context {
280
- return req.Context()
281
- }
282
-
283
- func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context {
284
- return jointContext{
285
- base: parent,
286
- valuesOnly: req.Context(),
287
- }
288
- }
289
-
290
- // DefaultTicket returns a ticket used for background context or dev_appserver.
291
- func DefaultTicket() string {
292
- defaultTicketOnce.Do(func() {
293
- if IsDevAppServer() {
294
- defaultTicket = "testapp" + defaultTicketSuffix
295
- return
296
- }
297
- appID := partitionlessAppID()
298
- escAppID := strings.Replace(strings.Replace(appID, ":", "_", -1), ".", "_", -1)
299
- majVersion := VersionID(nil)
300
- if i := strings.Index(majVersion, "."); i > 0 {
301
- majVersion = majVersion[:i]
302
- }
303
- defaultTicket = fmt.Sprintf("%s/%s.%s.%s", escAppID, ModuleName(nil), majVersion, InstanceID())
304
- })
305
- return defaultTicket
306
- }
307
-
308
- func BackgroundContext() netcontext.Context {
309
- backgroundContextOnce.Do(func() {
310
- // Compute background security ticket.
311
- ticket := DefaultTicket()
312
-
313
- c := &context{
314
- req: &http.Request{
315
- Header: http.Header{
316
- ticketHeader: []string{ticket},
317
- },
318
- },
319
- apiURL: apiURL(),
320
- }
321
- backgroundContext = toContext(c)
322
-
323
- // TODO(dsymonds): Wire up the shutdown handler to do a final flush.
324
- go c.logFlusher(make(chan int))
325
- })
326
-
327
- return backgroundContext
328
- }
329
-
330
- // RegisterTestRequest registers the HTTP request req for testing, such that
331
- // any API calls are sent to the provided URL. It returns a closure to delete
332
- // the registration.
333
- // It should only be used by aetest package.
334
- func RegisterTestRequest(req *http.Request, apiURL *url.URL, decorate func(netcontext.Context) netcontext.Context) (*http.Request, func()) {
335
- c := &context{
336
- req: req,
337
- apiURL: apiURL,
338
- }
339
- ctx := withContext(decorate(req.Context()), c)
340
- req = req.WithContext(ctx)
341
- c.req = req
342
- return req, func() {}
343
- }
344
-
345
- var errTimeout = &CallError{
346
- Detail: "Deadline exceeded",
347
- Code: int32(remotepb.RpcError_CANCELLED),
348
- Timeout: true,
349
- }
350
-
351
- func (c *context) Header() http.Header { return c.outHeader }
352
-
353
- // Copied from $GOROOT/src/pkg/net/http/transfer.go. Some response status
354
- // codes do not permit a response body (nor response entity headers such as
355
- // Content-Length, Content-Type, etc).
356
- func bodyAllowedForStatus(status int) bool {
357
- switch {
358
- case status >= 100 && status <= 199:
359
- return false
360
- case status == 204:
361
- return false
362
- case status == 304:
363
- return false
364
- }
365
- return true
366
- }
367
-
368
- func (c *context) Write(b []byte) (int, error) {
369
- if c.outCode == 0 {
370
- c.WriteHeader(http.StatusOK)
371
- }
372
- if len(b) > 0 && !bodyAllowedForStatus(c.outCode) {
373
- return 0, http.ErrBodyNotAllowed
374
- }
375
- c.outBody = append(c.outBody, b...)
376
- return len(b), nil
377
- }
378
-
379
- func (c *context) WriteHeader(code int) {
380
- if c.outCode != 0 {
381
- logf(c, 3, "WriteHeader called multiple times on request.") // error level
382
- return
383
- }
384
- c.outCode = code
385
- }
386
-
387
- func (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) {
388
- hreq := &http.Request{
389
- Method: "POST",
390
- URL: c.apiURL,
391
- Header: http.Header{
392
- apiEndpointHeader: apiEndpointHeaderValue,
393
- apiMethodHeader: apiMethodHeaderValue,
394
- apiContentType: apiContentTypeValue,
395
- apiDeadlineHeader: []string{strconv.FormatFloat(timeout.Seconds(), 'f', -1, 64)},
396
- },
397
- Body: ioutil.NopCloser(bytes.NewReader(body)),
398
- ContentLength: int64(len(body)),
399
- Host: c.apiURL.Host,
400
- }
401
- if info := c.req.Header.Get(dapperHeader); info != "" {
402
- hreq.Header.Set(dapperHeader, info)
403
- }
404
- if info := c.req.Header.Get(traceHeader); info != "" {
405
- hreq.Header.Set(traceHeader, info)
406
- }
407
-
408
- tr := apiHTTPClient.Transport.(*http.Transport)
409
-
410
- var timedOut int32 // atomic; set to 1 if timed out
411
- t := time.AfterFunc(timeout, func() {
412
- atomic.StoreInt32(&timedOut, 1)
413
- tr.CancelRequest(hreq)
414
- })
415
- defer t.Stop()
416
- defer func() {
417
- // Check if timeout was exceeded.
418
- if atomic.LoadInt32(&timedOut) != 0 {
419
- err = errTimeout
420
- }
421
- }()
422
-
423
- hresp, err := apiHTTPClient.Do(hreq)
424
- if err != nil {
425
- return nil, &CallError{
426
- Detail: fmt.Sprintf("service bridge HTTP failed: %v", err),
427
- Code: int32(remotepb.RpcError_UNKNOWN),
428
- }
429
- }
430
- defer hresp.Body.Close()
431
- hrespBody, err := ioutil.ReadAll(hresp.Body)
432
- if hresp.StatusCode != 200 {
433
- return nil, &CallError{
434
- Detail: fmt.Sprintf("service bridge returned HTTP %d (%q)", hresp.StatusCode, hrespBody),
435
- Code: int32(remotepb.RpcError_UNKNOWN),
436
- }
437
- }
438
- if err != nil {
439
- return nil, &CallError{
440
- Detail: fmt.Sprintf("service bridge response bad: %v", err),
441
- Code: int32(remotepb.RpcError_UNKNOWN),
442
- }
443
- }
444
- return hrespBody, nil
445
- }
446
-
447
- func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error {
448
- if ns := NamespaceFromContext(ctx); ns != "" {
449
- if fn, ok := NamespaceMods[service]; ok {
450
- fn(in, ns)
451
- }
452
- }
453
-
454
- if f, ctx, ok := callOverrideFromContext(ctx); ok {
455
- return f(ctx, service, method, in, out)
456
- }
457
-
458
- // Handle already-done contexts quickly.
459
- select {
460
- case <-ctx.Done():
461
- return ctx.Err()
462
- default:
463
- }
464
-
465
- c := fromContext(ctx)
466
- if c == nil {
467
- // Give a good error message rather than a panic lower down.
468
- return errNotAppEngineContext
469
- }
470
-
471
- // Apply transaction modifications if we're in a transaction.
472
- if t := transactionFromContext(ctx); t != nil {
473
- if t.finished {
474
- return errors.New("transaction context has expired")
475
- }
476
- applyTransaction(in, &t.transaction)
477
- }
478
-
479
- // Default RPC timeout is 60s.
480
- timeout := 60 * time.Second
481
- if deadline, ok := ctx.Deadline(); ok {
482
- timeout = deadline.Sub(time.Now())
483
- }
484
-
485
- data, err := proto.Marshal(in)
486
- if err != nil {
487
- return err
488
- }
489
-
490
- ticket := c.req.Header.Get(ticketHeader)
491
- // Use a test ticket under test environment.
492
- if ticket == "" {
493
- if appid := ctx.Value(&appIDOverrideKey); appid != nil {
494
- ticket = appid.(string) + defaultTicketSuffix
495
- }
496
- }
497
- // Fall back to use background ticket when the request ticket is not available in Flex or dev_appserver.
498
- if ticket == "" {
499
- ticket = DefaultTicket()
500
- }
501
- if dri := c.req.Header.Get(devRequestIdHeader); IsDevAppServer() && dri != "" {
502
- ticket = dri
503
- }
504
- req := &remotepb.Request{
505
- ServiceName: &service,
506
- Method: &method,
507
- Request: data,
508
- RequestId: &ticket,
509
- }
510
- hreqBody, err := proto.Marshal(req)
511
- if err != nil {
512
- return err
513
- }
514
-
515
- hrespBody, err := c.post(hreqBody, timeout)
516
- if err != nil {
517
- return err
518
- }
519
-
520
- res := &remotepb.Response{}
521
- if err := proto.Unmarshal(hrespBody, res); err != nil {
522
- return err
523
- }
524
- if res.RpcError != nil {
525
- ce := &CallError{
526
- Detail: res.RpcError.GetDetail(),
527
- Code: *res.RpcError.Code,
528
- }
529
- switch remotepb.RpcError_ErrorCode(ce.Code) {
530
- case remotepb.RpcError_CANCELLED, remotepb.RpcError_DEADLINE_EXCEEDED:
531
- ce.Timeout = true
532
- }
533
- return ce
534
- }
535
- if res.ApplicationError != nil {
536
- return &APIError{
537
- Service: *req.ServiceName,
538
- Detail: res.ApplicationError.GetDetail(),
539
- Code: *res.ApplicationError.Code,
540
- }
541
- }
542
- if res.Exception != nil || res.JavaException != nil {
543
- // This shouldn't happen, but let's be defensive.
544
- return &CallError{
545
- Detail: "service bridge returned exception",
546
- Code: int32(remotepb.RpcError_UNKNOWN),
547
- }
548
- }
549
- return proto.Unmarshal(res.Response, out)
550
- }
551
-
552
- func (c *context) Request() *http.Request {
553
- return c.req
554
- }
555
-
556
- func (c *context) addLogLine(ll *logpb.UserAppLogLine) {
557
- // Truncate long log lines.
558
- // TODO(dsymonds): Check if this is still necessary.
559
- const lim = 8 << 10
560
- if len(*ll.Message) > lim {
561
- suffix := fmt.Sprintf("...(length %d)", len(*ll.Message))
562
- ll.Message = proto.String((*ll.Message)[:lim-len(suffix)] + suffix)
563
- }
564
-
565
- c.pendingLogs.Lock()
566
- c.pendingLogs.lines = append(c.pendingLogs.lines, ll)
567
- c.pendingLogs.Unlock()
568
- }
569
-
570
- var logLevelName = map[int64]string{
571
- 0: "DEBUG",
572
- 1: "INFO",
573
- 2: "WARNING",
574
- 3: "ERROR",
575
- 4: "CRITICAL",
576
- }
577
-
578
- func logf(c *context, level int64, format string, args ...interface{}) {
579
- if c == nil {
580
- panic("not an App Engine context")
581
- }
582
- s := fmt.Sprintf(format, args...)
583
- s = strings.TrimRight(s, "\n") // Remove any trailing newline characters.
584
- c.addLogLine(&logpb.UserAppLogLine{
585
- TimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3),
586
- Level: &level,
587
- Message: &s,
588
- })
589
- // Only duplicate log to stderr if not running on App Engine second generation
590
- if !IsSecondGen() {
591
- log.Print(logLevelName[level] + ": " + s)
592
- }
593
- }
594
-
595
- // flushLog attempts to flush any pending logs to the appserver.
596
- // It should not be called concurrently.
597
- func (c *context) flushLog(force bool) (flushed bool) {
598
- c.pendingLogs.Lock()
599
- // Grab up to 30 MB. We can get away with up to 32 MB, but let's be cautious.
600
- n, rem := 0, 30<<20
601
- for ; n < len(c.pendingLogs.lines); n++ {
602
- ll := c.pendingLogs.lines[n]
603
- // Each log line will require about 3 bytes of overhead.
604
- nb := proto.Size(ll) + 3
605
- if nb > rem {
606
- break
607
- }
608
- rem -= nb
609
- }
610
- lines := c.pendingLogs.lines[:n]
611
- c.pendingLogs.lines = c.pendingLogs.lines[n:]
612
- c.pendingLogs.Unlock()
613
-
614
- if len(lines) == 0 && !force {
615
- // Nothing to flush.
616
- return false
617
- }
618
-
619
- rescueLogs := false
620
- defer func() {
621
- if rescueLogs {
622
- c.pendingLogs.Lock()
623
- c.pendingLogs.lines = append(lines, c.pendingLogs.lines...)
624
- c.pendingLogs.Unlock()
625
- }
626
- }()
627
-
628
- buf, err := proto.Marshal(&logpb.UserAppLogGroup{
629
- LogLine: lines,
630
- })
631
- if err != nil {
632
- log.Printf("internal.flushLog: marshaling UserAppLogGroup: %v", err)
633
- rescueLogs = true
634
- return false
635
- }
636
-
637
- req := &logpb.FlushRequest{
638
- Logs: buf,
639
- }
640
- res := &basepb.VoidProto{}
641
- c.pendingLogs.Lock()
642
- c.pendingLogs.flushes++
643
- c.pendingLogs.Unlock()
644
- if err := Call(toContext(c), "logservice", "Flush", req, res); err != nil {
645
- log.Printf("internal.flushLog: Flush RPC: %v", err)
646
- rescueLogs = true
647
- return false
648
- }
649
- return true
650
- }
651
-
652
- const (
653
- // Log flushing parameters.
654
- flushInterval = 1 * time.Second
655
- forceFlushInterval = 60 * time.Second
656
- )
657
-
658
- func (c *context) logFlusher(stop <-chan int) {
659
- lastFlush := time.Now()
660
- tick := time.NewTicker(flushInterval)
661
- for {
662
- select {
663
- case <-stop:
664
- // Request finished.
665
- tick.Stop()
666
- return
667
- case <-tick.C:
668
- force := time.Now().Sub(lastFlush) > forceFlushInterval
669
- if c.flushLog(force) {
670
- lastFlush = time.Now()
671
- }
672
- }
673
- }
674
- }
675
-
676
- func ContextForTesting(req *http.Request) netcontext.Context {
677
- return toContext(&context{req: req})
678
- }