planetscale 0.2.0 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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
- }