planetscale 0.3.1 → 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 (368) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +9 -1
  3. data/.github/workflows/gem-push.yml +9 -2
  4. data/.licenses/go/github.com/matoous/go-nanoid/v2.dep.yml +34 -0
  5. data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +1 -1
  6. data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +1 -1
  7. data/.licenses/go/go.uber.org/zap/buffer.dep.yml +1 -1
  8. data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +1 -1
  9. data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +1 -1
  10. data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +1 -1
  11. data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +1 -1
  12. data/.licenses/go/go.uber.org/zap.dep.yml +1 -1
  13. data/README.md +2 -0
  14. data/controller.go +21 -36
  15. data/go.mod +4 -3
  16. data/go.sum +32 -18
  17. data/lib/planetscale/version.rb +1 -1
  18. data/lib/planetscale.rb +2 -3
  19. data/planetscale.gemspec +1 -1
  20. data/proxy/planetscale-darwin.h +1 -1
  21. data/proxy/planetscale-darwin.so +0 -0
  22. data/proxy/planetscale-linux.h +1 -1
  23. data/proxy/planetscale-linux.so +0 -0
  24. data/proxy.go +1 -5
  25. metadata +3 -345
  26. data/vendor/github.com/armon/circbuf/.gitignore +0 -22
  27. data/vendor/github.com/armon/circbuf/LICENSE +0 -20
  28. data/vendor/github.com/armon/circbuf/README.md +0 -28
  29. data/vendor/github.com/armon/circbuf/circbuf.go +0 -92
  30. data/vendor/github.com/armon/circbuf/go.mod +0 -1
  31. data/vendor/github.com/golang/protobuf/AUTHORS +0 -3
  32. data/vendor/github.com/golang/protobuf/CONTRIBUTORS +0 -3
  33. data/vendor/github.com/golang/protobuf/LICENSE +0 -28
  34. data/vendor/github.com/golang/protobuf/proto/buffer.go +0 -324
  35. data/vendor/github.com/golang/protobuf/proto/defaults.go +0 -63
  36. data/vendor/github.com/golang/protobuf/proto/deprecated.go +0 -113
  37. data/vendor/github.com/golang/protobuf/proto/discard.go +0 -58
  38. data/vendor/github.com/golang/protobuf/proto/extensions.go +0 -356
  39. data/vendor/github.com/golang/protobuf/proto/properties.go +0 -306
  40. data/vendor/github.com/golang/protobuf/proto/proto.go +0 -167
  41. data/vendor/github.com/golang/protobuf/proto/registry.go +0 -317
  42. data/vendor/github.com/golang/protobuf/proto/text_decode.go +0 -801
  43. data/vendor/github.com/golang/protobuf/proto/text_encode.go +0 -560
  44. data/vendor/github.com/golang/protobuf/proto/wire.go +0 -78
  45. data/vendor/github.com/golang/protobuf/proto/wrappers.go +0 -34
  46. data/vendor/github.com/gorilla/mux/AUTHORS +0 -8
  47. data/vendor/github.com/gorilla/mux/LICENSE +0 -27
  48. data/vendor/github.com/gorilla/mux/README.md +0 -805
  49. data/vendor/github.com/gorilla/mux/doc.go +0 -306
  50. data/vendor/github.com/gorilla/mux/go.mod +0 -3
  51. data/vendor/github.com/gorilla/mux/middleware.go +0 -74
  52. data/vendor/github.com/gorilla/mux/mux.go +0 -606
  53. data/vendor/github.com/gorilla/mux/regexp.go +0 -388
  54. data/vendor/github.com/gorilla/mux/route.go +0 -736
  55. data/vendor/github.com/gorilla/mux/test_helpers.go +0 -19
  56. data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +0 -363
  57. data/vendor/github.com/hashicorp/go-cleanhttp/README.md +0 -30
  58. data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +0 -58
  59. data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +0 -20
  60. data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +0 -3
  61. data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +0 -48
  62. data/vendor/github.com/mitchellh/go-homedir/LICENSE +0 -21
  63. data/vendor/github.com/mitchellh/go-homedir/README.md +0 -14
  64. data/vendor/github.com/mitchellh/go-homedir/go.mod +0 -1
  65. data/vendor/github.com/mitchellh/go-homedir/homedir.go +0 -167
  66. data/vendor/github.com/pkg/errors/.gitignore +0 -24
  67. data/vendor/github.com/pkg/errors/.travis.yml +0 -10
  68. data/vendor/github.com/pkg/errors/LICENSE +0 -23
  69. data/vendor/github.com/pkg/errors/Makefile +0 -44
  70. data/vendor/github.com/pkg/errors/README.md +0 -59
  71. data/vendor/github.com/pkg/errors/appveyor.yml +0 -32
  72. data/vendor/github.com/pkg/errors/errors.go +0 -288
  73. data/vendor/github.com/pkg/errors/go113.go +0 -38
  74. data/vendor/github.com/pkg/errors/stack.go +0 -177
  75. data/vendor/github.com/planetscale/planetscale-go/LICENSE +0 -202
  76. data/vendor/github.com/planetscale/planetscale-go/planetscale/audit_logs.go +0 -136
  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 -252
  79. data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +0 -166
  80. data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +0 -312
  81. data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +0 -133
  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 -103
  84. data/vendor/github.com/planetscale/planetscale-go/planetscale/regions.go +0 -52
  85. data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +0 -163
  86. data/vendor/github.com/planetscale/sql-proxy/LICENSE +0 -202
  87. data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +0 -476
  88. data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +0 -73
  89. data/vendor/go.uber.org/atomic/.codecov.yml +0 -19
  90. data/vendor/go.uber.org/atomic/.gitignore +0 -12
  91. data/vendor/go.uber.org/atomic/.travis.yml +0 -27
  92. data/vendor/go.uber.org/atomic/CHANGELOG.md +0 -76
  93. data/vendor/go.uber.org/atomic/LICENSE.txt +0 -19
  94. data/vendor/go.uber.org/atomic/Makefile +0 -78
  95. data/vendor/go.uber.org/atomic/README.md +0 -63
  96. data/vendor/go.uber.org/atomic/bool.go +0 -81
  97. data/vendor/go.uber.org/atomic/bool_ext.go +0 -53
  98. data/vendor/go.uber.org/atomic/doc.go +0 -23
  99. data/vendor/go.uber.org/atomic/duration.go +0 -82
  100. data/vendor/go.uber.org/atomic/duration_ext.go +0 -40
  101. data/vendor/go.uber.org/atomic/error.go +0 -51
  102. data/vendor/go.uber.org/atomic/error_ext.go +0 -39
  103. data/vendor/go.uber.org/atomic/float64.go +0 -76
  104. data/vendor/go.uber.org/atomic/float64_ext.go +0 -47
  105. data/vendor/go.uber.org/atomic/gen.go +0 -26
  106. data/vendor/go.uber.org/atomic/go.mod +0 -8
  107. data/vendor/go.uber.org/atomic/go.sum +0 -9
  108. data/vendor/go.uber.org/atomic/int32.go +0 -102
  109. data/vendor/go.uber.org/atomic/int64.go +0 -102
  110. data/vendor/go.uber.org/atomic/nocmp.go +0 -35
  111. data/vendor/go.uber.org/atomic/string.go +0 -54
  112. data/vendor/go.uber.org/atomic/string_ext.go +0 -43
  113. data/vendor/go.uber.org/atomic/uint32.go +0 -102
  114. data/vendor/go.uber.org/atomic/uint64.go +0 -102
  115. data/vendor/go.uber.org/atomic/value.go +0 -31
  116. data/vendor/go.uber.org/multierr/.codecov.yml +0 -15
  117. data/vendor/go.uber.org/multierr/.gitignore +0 -4
  118. data/vendor/go.uber.org/multierr/.travis.yml +0 -23
  119. data/vendor/go.uber.org/multierr/CHANGELOG.md +0 -60
  120. data/vendor/go.uber.org/multierr/LICENSE.txt +0 -19
  121. data/vendor/go.uber.org/multierr/Makefile +0 -42
  122. data/vendor/go.uber.org/multierr/README.md +0 -23
  123. data/vendor/go.uber.org/multierr/error.go +0 -449
  124. data/vendor/go.uber.org/multierr/glide.yaml +0 -8
  125. data/vendor/go.uber.org/multierr/go.mod +0 -8
  126. data/vendor/go.uber.org/multierr/go.sum +0 -11
  127. data/vendor/go.uber.org/multierr/go113.go +0 -52
  128. data/vendor/go.uber.org/zap/.codecov.yml +0 -17
  129. data/vendor/go.uber.org/zap/.gitignore +0 -32
  130. data/vendor/go.uber.org/zap/.readme.tmpl +0 -109
  131. data/vendor/go.uber.org/zap/CHANGELOG.md +0 -492
  132. data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +0 -75
  133. data/vendor/go.uber.org/zap/CONTRIBUTING.md +0 -75
  134. data/vendor/go.uber.org/zap/FAQ.md +0 -164
  135. data/vendor/go.uber.org/zap/LICENSE.txt +0 -19
  136. data/vendor/go.uber.org/zap/Makefile +0 -73
  137. data/vendor/go.uber.org/zap/README.md +0 -134
  138. data/vendor/go.uber.org/zap/array.go +0 -320
  139. data/vendor/go.uber.org/zap/buffer/buffer.go +0 -141
  140. data/vendor/go.uber.org/zap/buffer/pool.go +0 -49
  141. data/vendor/go.uber.org/zap/checklicense.sh +0 -17
  142. data/vendor/go.uber.org/zap/config.go +0 -264
  143. data/vendor/go.uber.org/zap/doc.go +0 -113
  144. data/vendor/go.uber.org/zap/encoder.go +0 -79
  145. data/vendor/go.uber.org/zap/error.go +0 -80
  146. data/vendor/go.uber.org/zap/field.go +0 -549
  147. data/vendor/go.uber.org/zap/flag.go +0 -39
  148. data/vendor/go.uber.org/zap/glide.yaml +0 -34
  149. data/vendor/go.uber.org/zap/global.go +0 -168
  150. data/vendor/go.uber.org/zap/global_go112.go +0 -26
  151. data/vendor/go.uber.org/zap/global_prego112.go +0 -26
  152. data/vendor/go.uber.org/zap/go.mod +0 -14
  153. data/vendor/go.uber.org/zap/go.sum +0 -54
  154. data/vendor/go.uber.org/zap/http_handler.go +0 -132
  155. data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +0 -31
  156. data/vendor/go.uber.org/zap/internal/color/color.go +0 -44
  157. data/vendor/go.uber.org/zap/internal/exit/exit.go +0 -64
  158. data/vendor/go.uber.org/zap/level.go +0 -132
  159. data/vendor/go.uber.org/zap/logger.go +0 -348
  160. data/vendor/go.uber.org/zap/options.go +0 -148
  161. data/vendor/go.uber.org/zap/sink.go +0 -161
  162. data/vendor/go.uber.org/zap/stacktrace.go +0 -85
  163. data/vendor/go.uber.org/zap/sugar.go +0 -315
  164. data/vendor/go.uber.org/zap/time.go +0 -27
  165. data/vendor/go.uber.org/zap/writer.go +0 -99
  166. data/vendor/go.uber.org/zap/zapcore/buffered_write_syncer.go +0 -188
  167. data/vendor/go.uber.org/zap/zapcore/clock.go +0 -50
  168. data/vendor/go.uber.org/zap/zapcore/console_encoder.go +0 -161
  169. data/vendor/go.uber.org/zap/zapcore/core.go +0 -113
  170. data/vendor/go.uber.org/zap/zapcore/doc.go +0 -24
  171. data/vendor/go.uber.org/zap/zapcore/encoder.go +0 -443
  172. data/vendor/go.uber.org/zap/zapcore/entry.go +0 -264
  173. data/vendor/go.uber.org/zap/zapcore/error.go +0 -132
  174. data/vendor/go.uber.org/zap/zapcore/field.go +0 -233
  175. data/vendor/go.uber.org/zap/zapcore/hook.go +0 -68
  176. data/vendor/go.uber.org/zap/zapcore/increase_level.go +0 -66
  177. data/vendor/go.uber.org/zap/zapcore/json_encoder.go +0 -534
  178. data/vendor/go.uber.org/zap/zapcore/level.go +0 -175
  179. data/vendor/go.uber.org/zap/zapcore/level_strings.go +0 -46
  180. data/vendor/go.uber.org/zap/zapcore/marshaler.go +0 -61
  181. data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +0 -179
  182. data/vendor/go.uber.org/zap/zapcore/sampler.go +0 -208
  183. data/vendor/go.uber.org/zap/zapcore/tee.go +0 -81
  184. data/vendor/go.uber.org/zap/zapcore/write_syncer.go +0 -122
  185. data/vendor/golang.org/x/net/AUTHORS +0 -3
  186. data/vendor/golang.org/x/net/CONTRIBUTORS +0 -3
  187. data/vendor/golang.org/x/net/LICENSE +0 -27
  188. data/vendor/golang.org/x/net/PATENTS +0 -22
  189. data/vendor/golang.org/x/net/context/context.go +0 -56
  190. data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +0 -71
  191. data/vendor/golang.org/x/net/context/go17.go +0 -73
  192. data/vendor/golang.org/x/net/context/go19.go +0 -21
  193. data/vendor/golang.org/x/net/context/pre_go17.go +0 -301
  194. data/vendor/golang.org/x/net/context/pre_go19.go +0 -110
  195. data/vendor/golang.org/x/oauth2/.travis.yml +0 -13
  196. data/vendor/golang.org/x/oauth2/AUTHORS +0 -3
  197. data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +0 -26
  198. data/vendor/golang.org/x/oauth2/CONTRIBUTORS +0 -3
  199. data/vendor/golang.org/x/oauth2/LICENSE +0 -27
  200. data/vendor/golang.org/x/oauth2/README.md +0 -36
  201. data/vendor/golang.org/x/oauth2/go.mod +0 -9
  202. data/vendor/golang.org/x/oauth2/go.sum +0 -361
  203. data/vendor/golang.org/x/oauth2/internal/client_appengine.go +0 -14
  204. data/vendor/golang.org/x/oauth2/internal/doc.go +0 -6
  205. data/vendor/golang.org/x/oauth2/internal/oauth2.go +0 -37
  206. data/vendor/golang.org/x/oauth2/internal/token.go +0 -294
  207. data/vendor/golang.org/x/oauth2/internal/transport.go +0 -33
  208. data/vendor/golang.org/x/oauth2/oauth2.go +0 -381
  209. data/vendor/golang.org/x/oauth2/token.go +0 -178
  210. data/vendor/golang.org/x/oauth2/transport.go +0 -89
  211. data/vendor/google.golang.org/appengine/LICENSE +0 -202
  212. data/vendor/google.golang.org/appengine/internal/api.go +0 -678
  213. data/vendor/google.golang.org/appengine/internal/api_classic.go +0 -169
  214. data/vendor/google.golang.org/appengine/internal/api_common.go +0 -123
  215. data/vendor/google.golang.org/appengine/internal/app_id.go +0 -28
  216. data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +0 -308
  217. data/vendor/google.golang.org/appengine/internal/base/api_base.proto +0 -33
  218. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +0 -4367
  219. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +0 -551
  220. data/vendor/google.golang.org/appengine/internal/identity.go +0 -55
  221. data/vendor/google.golang.org/appengine/internal/identity_classic.go +0 -61
  222. data/vendor/google.golang.org/appengine/internal/identity_flex.go +0 -11
  223. data/vendor/google.golang.org/appengine/internal/identity_vm.go +0 -134
  224. data/vendor/google.golang.org/appengine/internal/internal.go +0 -110
  225. data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +0 -1313
  226. data/vendor/google.golang.org/appengine/internal/log/log_service.proto +0 -150
  227. data/vendor/google.golang.org/appengine/internal/main.go +0 -16
  228. data/vendor/google.golang.org/appengine/internal/main_common.go +0 -7
  229. data/vendor/google.golang.org/appengine/internal/main_vm.go +0 -69
  230. data/vendor/google.golang.org/appengine/internal/metadata.go +0 -60
  231. data/vendor/google.golang.org/appengine/internal/net.go +0 -56
  232. data/vendor/google.golang.org/appengine/internal/regen.sh +0 -40
  233. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +0 -361
  234. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +0 -44
  235. data/vendor/google.golang.org/appengine/internal/transaction.go +0 -115
  236. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +0 -527
  237. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +0 -64
  238. data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +0 -210
  239. data/vendor/google.golang.org/protobuf/AUTHORS +0 -3
  240. data/vendor/google.golang.org/protobuf/CONTRIBUTORS +0 -3
  241. data/vendor/google.golang.org/protobuf/LICENSE +0 -27
  242. data/vendor/google.golang.org/protobuf/PATENTS +0 -22
  243. data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +0 -773
  244. data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +0 -7
  245. data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +0 -371
  246. data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +0 -538
  247. data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +0 -318
  248. data/vendor/google.golang.org/protobuf/internal/descopts/options.go +0 -29
  249. data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +0 -69
  250. data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +0 -213
  251. data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +0 -241
  252. data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +0 -207
  253. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +0 -665
  254. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +0 -190
  255. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +0 -161
  256. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +0 -373
  257. data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +0 -29
  258. data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +0 -265
  259. data/vendor/google.golang.org/protobuf/internal/errors/errors.go +0 -89
  260. data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +0 -39
  261. data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +0 -12
  262. data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +0 -158
  263. data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +0 -631
  264. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +0 -471
  265. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +0 -704
  266. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +0 -450
  267. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +0 -356
  268. data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +0 -107
  269. data/vendor/google.golang.org/protobuf/internal/filetype/build.go +0 -297
  270. data/vendor/google.golang.org/protobuf/internal/flags/flags.go +0 -24
  271. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +0 -9
  272. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +0 -9
  273. data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +0 -34
  274. data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +0 -106
  275. data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +0 -829
  276. data/vendor/google.golang.org/protobuf/internal/genid/doc.go +0 -11
  277. data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +0 -34
  278. data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +0 -19
  279. data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +0 -31
  280. data/vendor/google.golang.org/protobuf/internal/genid/goname.go +0 -25
  281. data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +0 -16
  282. data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +0 -31
  283. data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +0 -116
  284. data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +0 -34
  285. data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +0 -184
  286. data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +0 -13
  287. data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +0 -175
  288. data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +0 -177
  289. data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +0 -141
  290. data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +0 -223
  291. data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +0 -830
  292. data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +0 -5637
  293. data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +0 -388
  294. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +0 -37
  295. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +0 -11
  296. data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +0 -217
  297. data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +0 -123
  298. data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +0 -209
  299. data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +0 -557
  300. data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +0 -17
  301. data/vendor/google.golang.org/protobuf/internal/impl/convert.go +0 -496
  302. data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +0 -141
  303. data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +0 -121
  304. data/vendor/google.golang.org/protobuf/internal/impl/decode.go +0 -276
  305. data/vendor/google.golang.org/protobuf/internal/impl/encode.go +0 -201
  306. data/vendor/google.golang.org/protobuf/internal/impl/enum.go +0 -21
  307. data/vendor/google.golang.org/protobuf/internal/impl/extension.go +0 -156
  308. data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +0 -219
  309. data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +0 -92
  310. data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +0 -176
  311. data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +0 -81
  312. data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +0 -558
  313. data/vendor/google.golang.org/protobuf/internal/impl/merge.go +0 -176
  314. data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +0 -209
  315. data/vendor/google.golang.org/protobuf/internal/impl/message.go +0 -276
  316. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +0 -465
  317. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +0 -543
  318. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +0 -249
  319. data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +0 -178
  320. data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +0 -174
  321. data/vendor/google.golang.org/protobuf/internal/impl/validate.go +0 -576
  322. data/vendor/google.golang.org/protobuf/internal/impl/weak.go +0 -74
  323. data/vendor/google.golang.org/protobuf/internal/order/order.go +0 -89
  324. data/vendor/google.golang.org/protobuf/internal/order/range.go +0 -115
  325. data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +0 -29
  326. data/vendor/google.golang.org/protobuf/internal/set/ints.go +0 -58
  327. data/vendor/google.golang.org/protobuf/internal/strs/strings.go +0 -196
  328. data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +0 -27
  329. data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +0 -94
  330. data/vendor/google.golang.org/protobuf/internal/version/version.go +0 -79
  331. data/vendor/google.golang.org/protobuf/proto/checkinit.go +0 -71
  332. data/vendor/google.golang.org/protobuf/proto/decode.go +0 -278
  333. data/vendor/google.golang.org/protobuf/proto/decode_gen.go +0 -603
  334. data/vendor/google.golang.org/protobuf/proto/doc.go +0 -94
  335. data/vendor/google.golang.org/protobuf/proto/encode.go +0 -319
  336. data/vendor/google.golang.org/protobuf/proto/encode_gen.go +0 -97
  337. data/vendor/google.golang.org/protobuf/proto/equal.go +0 -167
  338. data/vendor/google.golang.org/protobuf/proto/extension.go +0 -92
  339. data/vendor/google.golang.org/protobuf/proto/merge.go +0 -139
  340. data/vendor/google.golang.org/protobuf/proto/messageset.go +0 -93
  341. data/vendor/google.golang.org/protobuf/proto/proto.go +0 -43
  342. data/vendor/google.golang.org/protobuf/proto/proto_methods.go +0 -19
  343. data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +0 -19
  344. data/vendor/google.golang.org/protobuf/proto/reset.go +0 -43
  345. data/vendor/google.golang.org/protobuf/proto/size.go +0 -97
  346. data/vendor/google.golang.org/protobuf/proto/size_gen.go +0 -55
  347. data/vendor/google.golang.org/protobuf/proto/wrappers.go +0 -29
  348. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +0 -276
  349. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +0 -248
  350. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +0 -286
  351. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +0 -374
  352. data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +0 -252
  353. data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +0 -77
  354. data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +0 -504
  355. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +0 -128
  356. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +0 -461
  357. data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +0 -665
  358. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +0 -285
  359. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +0 -59
  360. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +0 -411
  361. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +0 -98
  362. data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +0 -869
  363. data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +0 -15
  364. data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +0 -167
  365. data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +0 -44
  366. data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +0 -56
  367. data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +0 -4039
  368. 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
- }